循环中的 Tesseract 有时会输出额外的数字

Tesseract in loop sometimes outputs extra digits

我 运行 tesseract 处于无限循环中以进行调试以增加错误检测的机会(我正在 window 上检测计时器),我注意到 tesseract 相当频繁地添加当明显有 none 时多出一个数字。当我保存这些错误检测并通过 tesseract 重新运行时,没有多余的数字。

Here is an example of false detection, where the 16.9 was detected as 1169

运行再次保存的图像得到169。不检测小数点没问题,我可以解释,但出现额外的数字是一个真正的问题。

Another example. 38.4 was detected as 3584

这里是 tesseract 配置:

d = pytesseract.image_to_data(img, lang='eng',config='-c tessedit_char_whitelist="0123456789x.% " --psm 6 --oem 3', output_type=Output.DICT)

我已经尝试了 psm 6、7、11 和 13,但问题仍然相同。我试过改变截图的方式,还是一样的问题

编辑:现在我将简单地检查检测的宽度,但我仍然很好奇是否有人知道可能导致这种情况的原因。

你需要

需要上采样才能准确识别数字。阈值化将输出图像的特征。

Threshold (BINARY + OTSU)
40% 76% 19.7 60% 16.9 21.8 24.3 x4
2.1 1.7 9.3 90% 34.1 38.4 6.9 x4

代码:


import cv2
import pytesseract

img_lst = ["GAaEm.jpg", "Z2qV5.jpg"]

for img_nm in img_lst:
    img = cv2.imread(img_nm)
    gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    (h, w) = gry.shape[:2]
    gry = cv2.resize(gry, (w*3, h*3))
    thr = cv2.threshold(gry, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
    txt = pytesseract.image_to_string(thr)
    print(txt)
    cv2.imshow("thr", thr)
    cv2.waitKey(0)