通过 Tesseract OCR 在七段显示器上进行文本检测

Posted

技术标签:

【中文标题】通过 Tesseract OCR 在七段显示器上进行文本检测【英文标题】:Text detection on Seven Segment Display via Tesseract OCR 【发布时间】:2013-07-14 09:46:43 【问题描述】:

我正在运行的问题是从图像中提取文本,为此我使用了 Tesseract v3.02。我必须从中提取文本的示例图像与仪表读数有关。其中一些具有实心纸背景,其中一些具有 LED 显示屏。 我已经为实体表背景训练了数据集,结果非常有效。

我现在遇到的主要问题是带有 LED/LCD 背景的文本图像无法被 Tesseract 识别,因此无法生成训练集。

任何人都可以指导我如何将 Tesseract 与七段显示器(LCD/LED 背景)一起使用,或者我可以使用其他替代方法来代替 Tesseract。

【问题讨论】:

“我已经为实体表背景训练了数据集”。请您介意一下,您是如何做到这一点的? @yunas 你在这方面有什么进展吗?我遇到了同样的问题。 【参考方案1】:

https://github.com/upupnaway/digital-display-character-rec/blob/master/digital_display_ocr.py

使用 openCV 和 tesseract 以及“letsgodigital”训练数据完成此操作

-步骤包括边缘检测和使用最大轮廓提取显示。然后使用 otsu 或二值化对图像进行阈值化,并通过 pytesseracts image_to_string 函数传递。

【讨论】:

【参考方案2】:

这似乎是一个图像预处理任务。 Tesseract 真的希望它的图像都是位图格式的黑白文本。如果你给它一些不是那样的东西,它会尽力将它转换成那种格式。如何做到这一点并不是很聪明。使用一些图像处理工具(我碰巧喜欢 imagemagick),您需要使图像更符合 tesseract 的要求。一个简单的第一步可能是做一个小半径高斯模糊,阈值非常低(你试图只保留黑色,所以 15% 似乎是正确的),然后反转图像。

然后,困难的部分就变成了知道要执行哪个预处理任务。如果您有元数据告诉您正在处理哪种显示,那就太好了。如果不是,我怀疑您可以查看图像颜色直方图,以至少确定您的文本是黑底白字还是黑底白字。如果只有这些场景,黑底白字总是纯色背景,而黑底白字总是七段显示,那么你就完成了。如果没有,你就必须聪明。祝你好运,请告诉我们你的想法。

【讨论】:

***.com/questions/9361213/7-segment-display-ocr?rq=1 这个 *** 问题有一个指向 c 脚本的链接,用于读取独立于 OCR 的七段。可能也值得一看。 我正在使用 GPUImageLibrary github.com/BradLarson/GPUImage。我做的和你做的一模一样。我应用了高斯模糊,然后我没有反转,而是锐化了模糊的图像并提供给高斯,它在一定程度上起作用,但对于我在相关位置 4 添加的图像。它失败了......应该应用什么样的过滤器? LED的背景可以去掉吗? 第四张图的难点在于背景亮度从左到右逐渐降低。我能够使用局部自适应阈值来解决这个问题,在 imagemagick 中由函数 -lat 调用。这个想法是平均周围区域的像素并构造一个局部阈值,将前景与背景分开。如果 GPUImageLibrary 没有那个,自己写应该不会太难。它还有一个额外的好处,那就是仍然可以处理平面背景图像。在该图像上,半径为 60-80 像素的局部自适应阈值效果很好。 是的,你是对的,我在图像上应用了高斯模糊,然后应用 AdaptiveThreshold 去除了颗粒或背景。【参考方案3】:

看看这个项目:

https://github.com/arturaugusto/display_ocr

在那里,您可以下载 7 段字体的训练数据和具有一些预处理功能的 python 脚本。

【讨论】:

以上是关于通过 Tesseract OCR 在七段显示器上进行文本检测的主要内容,如果未能解决你的问题,请参考以下文章

使用 Tesseract OCR 进行汉字识别

Tesseract ocr PDF 作为输入

如何通过Tesseract开源OCR引擎创建Android OCR应用

通过Tesseract实现简单的OCR

如何通过Tesseract开源OCR引擎创建Android OCR应用

如何通过Tesseract开源OCR引擎创建Android OCR应用