EasyOCR 单独识别字母“e”时不一致

问题描述 投票:0回答:1

我在 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”单独时不被识别为文本。 Bounding Box of recognized texts

同一图像中的另一个区域,它将“e”识别为某些选项(2° 和 4°)中文本的一部分。组合框中的 1° e 3° 选项也显示“e”尚未被识别。

Another area in the same image

python ocr easyocr
1个回答
0
投票

尝试减少边距以及 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
参数将包含对文本内容的置信度较低的猜测。 调整这些参数可以帮助您在检测更多文本区域(包括低置信度文本区域)和通过更严格减少误报之间取得平衡。

© www.soinside.com 2019 - 2024. All rights reserved.