使用 Tesseract 进行鸡蛋标记识别的图像预处理

Posted

技术标签:

【中文标题】使用 Tesseract 进行鸡蛋标记识别的图像预处理【英文标题】:Image preprocessing for egg marking recognition with Tesseract 【发布时间】:2018-02-09 07:16:02 【问题描述】:

目标是制作一个可以识别鸡蛋标记的应用程序,例如0-DE-134461。我在以下图片上尝试了Tesseract 和Google Vision API。两种 OCR 引擎的结果都是灾难性的。

0-DE-46042

Tesseract → ""
Google Vision API → " 2 "

3-ES08234-25591

Tesseract → ""
Google Vision API → " Es1234-2SS ) R SHAH That is part "

裁剪

我用 Photoshop 手动裁剪了图像。

0-DE-46042

Tesseract → ""
Google Vision API → ""

3-ES08234-25591

Tesseract → "3ΓÇöE503ΓÇÿ234-gg"
Google Vision API → " -ESOT23-2559 ) "

阈值

我使用 Photoshop 手动为两个鸡蛋上的文本进行了颜色选择,并移除了背景。

0-DE-46042

Tesseract → "OΓÇöDEΓÇö46042"
Google Vision API → " O-DE-46042 "

3-ES08234-25591

Tesseract → ""
Google Vision API → " 3-ESO8234-9 "

去除圆形扭曲?

我认为最后一个预处理步骤应该是去除圆形扭曲,但我不知道如何使用 Photoshop 手动完成,更不用说自动化了。


我的问题

我的方向是否正确? 我的预处理步骤是否正确? 在 OpenCV 中自动化这些步骤的方法是什么?

额外信息

我用来获取 tesseract OCR 结果的命令:

λ tesseract egg_picture.jpg --psm 7 stdout

正方体版本:

λ tesseract --version
tesseract 4.0.0-alpha.20170804
 leptonica-1.74.4
  libgif 4.1.6(?) : libjpeg 8d (libjpeg-turbo 1.5.0) : libpng 1.6.20 : libtiff 4.0.6 : zlib 1.2.8 : libwebp 0.4.3 : libopenjp2 2.1.

平台:Windows 10


编辑 1

我使用 OpenCV 对一些鸡蛋标记图像应用了自适应阈值。以下是目前的结果:

但是,仍然有很多噪音。我正在努力调整参数,以便它在不同的图像上都能正常工作。


【问题讨论】:

是的,我认为你必须纠正圆形扭曲。对于颜色阈值,我会尝试 HSV 颜色空间,但不确定红色(字体)和橙色(鸡蛋)是否足够远...... 为了更正圆形环绕,您可以应用单应性。您只需将位于曲线上的点映射到与左上角点平行的线(对于上表面,您也可以对下表面做类似的操作)。现在从二值图像中检测位于曲面上的点应该不是一项艰巨的任务 developers.googleblog.com/2017/09/… 【参考方案1】:

我有一个建议。

我尝试对 BGR 颜色空间中的所有三个通道应用局部直方图均衡,然后将它们合并。

结果:

随着图像中的细节得到更多增强,您可以考虑对这些图像进行预处理。

我还尝试分别对三个通道的直方图进行全局均衡。图像虽然比原图清晰,但细节缺乏深度。

【讨论】:

感谢 RGB 通道的直方图均衡技巧。 eggcode 无疑更加突出。但是,我无法成功地对文本进行二值化。有什么想法吗? 我还没有尝试任何东西。尝试使用不同的内核大小或自适应阈值执行高斯差分。 我尝试了自适应阈值,但有很多二进制噪声。我已经添加了关于结果问题的图片。

以上是关于使用 Tesseract 进行鸡蛋标记识别的图像预处理的主要内容,如果未能解决你的问题,请参考以下文章

显式设置用于 Tesseract-OCR 识别的字体

在进行字符识别之前使用 OpenCV 进行图像预处理(tesseract)

有用过tesseract OCR字符识别的吗?怎么识别率那么低

Tesseract训练

python+tesseract验证码识别的一点小心得

Tesseract 错误空间识别