Tesseract 在特定情况下不读取零

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

我正在编写一个小软件,它通过网络摄像头读取另一个设备的终端输出(不,屏幕共享等是不可能的)。

这是我第一次使用tesseract,所以我确实犯了一些菜鸟错误。

我一直在尝试阅读文本并得到了很好的结果,但现在我注意到,在两种特定情况下它总是会丢失零(参见图片),有线的事情是,当它丢失这些零时,它会分配前导字符 + 零到前导字符的宽度。或者更清楚地说:当我在前导字符周围绘制一个框时,它会在前导字符+零周围绘制框,但只读取前导字符。

我尝试过:

  • 重新缩放
  • 不同的 PSM 设置
  • 不同的 OEM 设置
  • 放大特定区域
  • 设置滤镜阈值并将图像转换为灰度。唯一一次带来明显更好的结果(零)是当我如此积极地设置过滤器以至于所有红色文本都消失了。

大写字母的大小约为30像素,这应该是完美的(根据https://groups.google.com/g/tesseract-ocr/c/Wdh_JJwnw94/m/24JHDYQbBQAJ

这是负责 OCR 的代码块:

    configString = r'--oem 3 psm 11 -c tessedit_char_whitelist=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNPRSTUVWXYZ():.$£B '
    boxes = pytesseract.image_to_boxes(img, config=configString)
    print(boxes)

整体图像尺寸为1280 x 720

在第三张图片中,您可以看到“打印(框)”结果的一部分显示(或不显示)丢失的零。我标记了前导字符的 Y 坐标。与其他字符的 Y 坐标比较,您可以看到标记的字符要宽得多(因为它的宽度添加了缺失的零的宽度)。在第二张图片上,您可以看到方框是如何一直绘制到缺失的零的。绿色圆圈中的零大约有 10% 的时间被识别,蓝色圆圈中的零永远不会被识别。

所有其他零从来没有任何问题

感谢您的帮助!

如果我清空周围的所有文本,它甚至会做同样的事情,如图 4 所示。

This is the webcam feed before OCR Image after OCR, with boxes drawn pard of Text around line with missing Zero is blanked out

python ocr tesseract python-tesseract
1个回答
0
投票

遵循 Tesseract 文档并专注于预处理。我刚刚做了快速测试,结果如下:

>tesseract TKS1B_inv_gs_dpi_border_bw2.png -
Detected current bit errors: no
Detected current overflows: no
Detected current link changes: @

Overall results:

Transmitted frames: 0 (tx events disabled)
Received frames: 286001

ERROR: Lost events: 5228

ERRCR: 2614 on port DNetl.Dirl.MP1

ERROR: 2614 on port Vietl.Dirl.Mp1
Detected bit errors: no

Detected overflows: no

ERROR: Detected link changes: 10

ERROR: 4 on port DHetl.Dirl.MP1

问题在于红色文本 - 不确定这是否对您感兴趣。如果是,那么首先将红色转换为白色。

下一个问题是 0 未被正确识别 - 但它确实存在,但您用

tessedit_char_whitelist
过滤了结果...也许更积极的模糊可能会有所帮助,或者摆脱 tessedit_char_whitelist 并使用 Replace('@', ' 0')

在“DNet1”或“Dir1”这样的上下文中,1/l 的问题会很困难。也许尝试其他技术,例如锐化,使其更容易区分......

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