通过Tesseract OCR在七段数码管上进行文本检测

21
我遇到的问题是从图像中提取文本,我使用了Tesseract v3.02。我需要从一些涉及仪表读数的示例图像中提取文本,其中一些具有固体背景,而另一些具有LED显示。我已经对具有固体背景的数据集进行了训练,结果还算有效。
现在我面临的主要问题是无法识别Tesseract的LED / LCD背景下的文本图像,因此无法生成训练集。 是否有人可以指导我如何使用Tesseract和七段数码管(LCD / LED背景),或者是否有其他替代方案可供我使用。
图片链接如下:LED背景图片1LED背景图片2带实心背景的仪表1输入图像描述输入图像描述

4
我已经训练了实心背景数据集。请问您能否告诉我,您是如何做到这一点的? - Alejandro Vargas
3
@yunas,你在这方面有任何进展吗?我也遇到了同样的问题。 - daniyalzade
3个回答

6

5
这似乎是一个图像预处理任务。Tesseract真的很喜欢其图像为位图格式的黑底白字。如果你给它一些不符合要求的图像,它会尽力将其转换成这种格式。但它并不非常聪明。使用一些图像处理工具(我偏好imagemagick),你需要使图像更符合tesseract的要求。一个简单的第一步可能是进行小半径高斯模糊,以相当低的阈值进行阈值化(你正在尝试只保留黑色,所以15%似乎是正确的),然后反转图像。
然后困难的部分是知道要做哪个预处理任务。如果你有元数据告诉你正在处理什么样的显示器,那太好了。如果没有,我想你至少可以查看图像颜色直方图来确定你的文本是白底黑字还是黑底彩字。如果这些是唯一的情况,白底黑字始终是纯背景,而黑底彩字始终是七段显示器,那么你就完成了。如果不是,你就必须要聪明一点。祝你好运,并请告诉我们你的发现。

这个stackoverflow问题有一个链接到一个C脚本,用于读取七段数码管而不依赖OCR。可能也值得一看。 - Mongoose1021
我正在使用GPUImageLibrary https://github.com/BradLarson/GPUImage。我做的和你一样。我应用了高斯模糊,然后没有反转,而是对模糊图像进行了锐化处理,并将其提供给了高斯,这在某种程度上起作用,但对于我在问题中添加到位置4的图像失败了...应该应用什么样的滤镜? - yunas
能否去除 LED 的背景? - yunas
1
第四张图的难点在于背景亮度从左到右逐渐降低。我使用本地自适应阈值处理解决了这个问题,在 ImageMagick 中称为函数 -lat。其思想是平均周围区域中的像素并构建一个本地阈值,以分离前景和背景。如果 GPUImageLibrary 没有这个功能,自己编写也不会太难。它还具有在平坦背景图像上仍然有效的优点。对于那个图像,半径为60-80像素的局部自适应阈值效果很好。 - Mongoose1021
但现在我面临一个奇怪的问题,就是字符识别错误。例如,我附上了第5张图片,tesseract将其错误地识别为“n n g g g q”,而我无法将其映射到“0 0 0 3 8 9”,因为“g”重复了... 有什么办法可以解决这个问题吗? - yunas
显示剩余8条评论

4

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