数字图像处理:Tesseract OCR上的数字识别

12

解决方案:

我不得不自己训练数据,以尝试与OCR一起使用。看起来这很有效,但我不知道为什么arturaugusto的训练数据对我不起作用 =(

https://github.com/adri1992/Tesseract_sevenSegmentsLetsGoDigital.git

使用我的训练数据,为了获得良好的OCR结果,我已经完成以下步骤(使用OpenCV完成):

  • 首先,将图像转换为黑白
  • 第二,对图像应用高斯模糊
  • 第三,对图像应用阈值过滤器

通过这样做,可以识别出七段数码管上的数字。

问题:

我正在尝试在Android上通过Tesseract获取OCR,并使用此图像测试该应用程序(通过 Text detection on Seven Segment Display via Tesseract OCR):

OCR test image

我正在使用arturaugusto训练的数据 (https://github.com/arturaugusto/display_ocr),但OCR的错误结果是:

884288

零被识别为八,我不知道为什么。

我正在使用OpenCV对图像应用高斯模糊和阈值过滤器,处理后的图像如下:

OCR Image processed

是否有其他训练数据或您知道任何解决问题的方法?


嗨Adri,你的解决方案有什么更新吗? :-) - Felipe Ferri
嗨,菲利普!我已经训练好了自己的数据... 试试这个 https://github.com/adri1992/Tesseract_sevenSegmentsLetsGoDigital 并告诉我它是否适用于你。记得按照我在帖子“解决方案”部分中评论的所有阶段进行操作。 - adlagar
我已经成功用Python Pillow处理了你的测试图像,并生成了与你相似的黑白图像,但当我使用你训练过的数据运行tesseract时,它返回一个空页面(!)。我不确定是否正确安装了训练数据... 我把所有文件都复制到了/opt/local/share/tessdata文件夹中(我的操作系统是Mac OS X)。当我运行tesseract --list-langs时,“lets”语言被显示出来。你有什么建议吗?另外,你的训练数据已经不再将“0”误认为“8”了(正如你在问题中所述)? - Felipe Ferri
你好,@adri1992,你能完成它吗?我已经卡在最后阶段两天了。 - Zeeshan Shabbir
2
嗨Zeeshan!我训练了自己的数据。它应该可以与这个具体的字体一起使用 https://github.com/adri1992/Tesseract_sevenSegmentsLetsGoDigital - adlagar
显示剩余3条评论
1个回答

0

尝试使用腐蚀(erode)来填补段之间的空隙。 我认为问题在于tesseract无法处理良好分割的字体。

使用OpenCV-python,我使用cv2.erode(display,kernel, iterations = erosion_iters)来解决这个问题。


是的,我已经尝试填补段之间的空白,但对我也没有用 :( 我用相同的字体训练了自己的数据,现在,我不知道为什么,OCR使用这个新训练的数据效果很好。 几分钟后,我会更新问题并提供解决方案和存储库方向。 非常感谢! - adlagar
你能澄清一下在代码前面声明的 displaykernel 是什么吗?(例如,它是某种导入吗?) - takanuva15
1
@takanuva15,以这个例子为例:import cv2; import numpy as np; display = cv2.imread('display.png',0); kernel = np.ones((6,6),np.uint8); eroded_img = cv2.erode(display, kernel, iterations = 1); - art

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接