【问题标题】:Unable to get all numbers pytesseract无法获取所有数字 pytesseract
【发布时间】:2022-08-21 06:57:30
【问题描述】:

您好,我是 python 新手,我正在尝试使用 pytesseract 和 cv2 从图像中获取数字,每当我运行我的代码时,它总是缺少一个数字或运行良好,例如,它会错过下图中的数字 8,也请注意,输入中的数字可能是随机的或空的,因为它是日期输入,但我期望的完整日期长度是 8,任何有助于获得准确性的帮助都会非常有帮助。

15082022有8位数字。

谢谢。

代码


img1 = cv2.imread(\"image.tiff\")
gry1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
(h, w) = gry1.shape[:2]
gry1 = cv2.resize(gry1, (w*3, h*3))

thr1 = cv2.threshold(gry1, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
thr1 = cv2.GaussianBlur(thr1, (3, 3), 0)
txt1 = pytesseract.image_to_string(
    thr1, config=f\"--oem 3 --psm 11 outputbase digits tessedit_char_whitelist=0123456789\")

print(\"\".join(t for t in txt1 if t.isalnum()))

cv2.imshow(\"thr1\", thr1)
cv2.waitKey(0)

输出

1502022

预期产出

15082022

图片示例图像可能包含文本,也可能不包含,这取决于屏幕截图系统的工作方式。

    标签: python ocr tesseract python-tesseract


    【解决方案1】:

    在玩过 tesseract 和 OpenCV 之后,我发现了几种提高准确性的方法。但是,如果没有对大型数据集进行适当的基准测试,我不确定任何答案是否会有所帮助。

    我的方法是:

    • 将图像放大倍数而不是 3
    • 使用具有合适内核大小的 cv2.erode()。
    • 使用--oem 3
    • 使用 --psm 7 (其他选项也可以,模式 7 告诉 tesseract 将图像视为单个文本行)

    我还尝试了几种内核大小,几种缩放,以及侵蚀过程的几次迭代,并且有许多组合可以提供想要的结果。

    如果您找到删除框边框的方法,则任务会更容易

    【讨论】:

      猜你喜欢
      • 2021-04-14
      • 2020-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      相关资源
      最近更新 更多