Tesseract OCR 上的数字数字

Posted

技术标签:

【中文标题】Tesseract OCR 上的数字数字【英文标题】:Digital Numbers on Tesseract OCR 【发布时间】:2015-08-09 08:01:58 【问题描述】:

解决方案:

我必须训练自己的数据才能使用 OCR 进行尝试。看起来效果不错,但我不知道为什么来自 arturaugusto 的训练数据对我不起作用 =(

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

使用我训练过的数据,为了获得良好的 OCR 结果,我已经完成了这个阶段(我已经使用 OpenCV 完成了):

首先,将图像转换为黑白 其次,对图像应用高斯模糊 第三,对图像应用阈值滤镜

这样,七段数字就被识别出来了。

问题:

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

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

884288

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

我正在通过 OpenCV 对图像应用高斯模糊和阈值过滤器,处理后的图像是这样的:

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

【问题讨论】:

嗨,阿德里,您的解决方案有什么更新吗? :-) 嗨菲利普!我已经训练了自己的数据...试试github.com/adri1992/Tesseract_sevenSegmentsLetsGoDigital 并检查我是否适合您。请记住执行我在帖子的“解决方案”部分中评论的所有阶段 我设法使用 python 枕头处理您的测试图像并达到与您的相似的 bw 图像,但是当我使用您训练的数据运行 tesseract 时,它返回一个空页面(!)。我不确定我是否正确安装了训练数据...我将所有内容复制到文件夹 /opt/local/share/tessdata (我在 Mac OS X 上)。当我运行 tesseract --list-langs 时,会显示“lets”语言。你有什么建议吗?顺便说一句,您的训练数据不再将“0”误认为“8”(正如您在问题中所说)? 感谢 adri1992 提供经过训练的数据。 嗨泽山!我训练了自己的数据。它应该使用具体字体github.com/adri1992/Tesseract_sevenSegmentsLetsGoDigital 【参考方案1】:

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

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

【讨论】:

是的,我试图填补段之间的空白,但它对我也不起作用:(我已经用相同的字体训练了我自己的数据,现在,我不知道究竟为什么,OCR 可以很好地处理这些经过训练的新数据。几分钟后,我将使用解决方案和存储库方向更新问题。非常感谢! 你能澄清一下你在代码前面声明的displaykernel吗? (例如,它是某种进口吗?) @takanuva15,举个例子:import cv2;将 numpy 导入为 np; display = cv2.imread('display.png',0);内核 = np.ones((6,6),np.uint8); eroded_img = cv2.erode(显示, 内核, 迭代次数 = 1);

以上是关于Tesseract OCR 上的数字数字的主要内容,如果未能解决你的问题,请参考以下文章

android怎么调用tesseract实现OCR功能?

Tess-Two(Android 中的 Tesseract OCR)显示非常不准确的结果

Android OCR 仅使用流行的 tessercat fork tess-two 检测数字

如何训练 tesseract 只识别 20 到 30 位数字?

使用 Tesseract 的 Android OCR 应用程序

使用 tesseract 为 android