我在 Python 中有一个函数,可以使用 EasyOCR 读取葡萄牙语文本。由于某种原因,它并不总是能识别较大单词之间的 “e”,这是该语言中的 常见连接词。
有什么方法可以强制 EasyOCR 将“e”识别为短语的一部分?
def getOCRResults(imgFP)->list[tuple[tuple[int,int,int,int]|None,str|None,float|None]]:
reader = easyocr.Reader(['pt'], gpu=False)
result = reader.readtext(imgFP, width_ths=0.7, add_margin=0.2, height_ths=0.8)
return result
def draw_bounding_boxes(image, detections, threshold=0.25):
for bbox, text, score in detections:
if score > threshold:
cv2.rectangle(image, tuple(map(int, bbox[0])), tuple(map(int, bbox[2])), (0, 255, 0), 1)
cv2.putText(image, text, tuple(map(int, bbox[0])), cv2.FONT_HERSHEY_SIMPLEX, 0.35, (255, 0, 0), 1)
OCRResults = getOCRResults(image_path)
img = cv2.imread(image_path)
draw_bounding_boxes(img,OCRResults,0.25)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGBA))
plt.show()
同一图像中的另一个区域,它将“e”识别为某些选项(2° 和 4°)中文本的一部分。组合框中的 1° e 3° 选项也显示“e”尚未被识别。
尝试减少边距以及 low_text 和 text_threshold 参数。
reader.readtext(
imgFP,
width_ths=0.7,
add_margin=0.1,
height_ths=0.8,
low_text=0.3, # default 0.4
text_threshold=0.6 # default 0.7
)
您的边距比您需要的大,这可能会遮挡其他文本框。 在检测期间确定区域是否包含文本时,较低的
low_text
参数将包含更多的低置信度区域。 较低的 text_threshold
参数将包含对文本内容的置信度较低的猜测。 调整这些参数可以帮助您在检测更多文本区域(包括低置信度文本区域)和通过更严格减少误报之间取得平衡。