繁体   English   中英

无法识别 Pytesseract 上的正确数字

[英]Unable to recognize correct digit on Pytesseract

我无法使用 Pytesseract 识别我想要的数字,我做错了什么吗?

我的代码

import cv2
from pytesseract import pytesseract

img = cv2.imread('foo.png')
for i in range(6,14):
    text:str = pytesseract.image_to_string(img, config=f'--oem 3 --psm {i} digits').replace('\n','')

    print(f"psm {i}: {text}")

我的输入图像
图片 1

结果

psm 6: 
psm 7: 
psm 8: 
psm 9: 
psm 10: 
psm 11: 
psm 12: 4
psm 13: 

图 2
图 2

结果

psm 6: .4
psm 7: 
psm 8: 
psm 9: 
psm 10: 
psm 11: 
psm 12: 
psm 13: 

图 3

图 3

结果

psm 6: 4
psm 7: 4
psm 8: 4
psm 9: 4
psm 10: 4
psm 11: 4
psm 12: 
psm 13: 4

我怎样才能得到我想要的结果? 感谢您的帮助。

所有图像的高度均为 252 像素,最小宽度为 240 像素。

这里有一些尝试。

您使用的是孤立的数字,因此没有上下文可以帮助识别器,也没有字典的帮助。 从英文句子开始,然后 go 到英文单词,以验证一切正常。 然后尝试更难的孤立字母/数字任务。

尝试在图像上运行高斯模糊,将其阈值化为二进制,并要求对其进行识别 或者,几乎是同一件事,通过简单地从 252 像素缩小到更小的东西来减少“颠簸”的伪影。 请记住,Tesseract 是在 300 dpi 和 600 dpi 的大约 8 到 16 pt 类型的图像上训练的。 矛盾的是,超大图像可能利于识别。

您的一些图像看起来可能会被一些非零的 theta 扭曲。 考虑去偏移。 或者更好的是,考虑以各种分辨率生成地面实况图像,这些图像具有零偏斜。 Ghostscript 是一种流行的实现方式。

请更新问题以解释您使用的是哪种 Ocr 引擎模式。 也许3是 OEM_TESSERACT_LSTM_COMBINED ? 确定需要指定选项吗? 也就是说,当我们让它默认时,我们会看到更差的性能吗?

哇,确实有很多页面分割模式,如上所述。 你没有为引擎提供太多上下文,对于孤立的数字,如果你在图像中写“1 2 3”,甚至是“123”。 与您的示例个位数图像相比,引擎有更好的机会验证其对字体大小的估计,因此请考虑特定的 PSM 擅长什么。 并注意提供能够发挥这种优势的形象。 一旦我们看到一些相邻的字符,下行和基线的估计就会好得多。

抱歉,没有简单的答案。 看起来你前面有一些实验。 让我们知道您的发现!

我从命令行运行 tesseract,得到这个 output:

>tesseract 7.png - --psm 8
7
>tesseract 3.png - --psm 8
3
>tesseract 9.png - --psm 8
9

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM