使用 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 进行鸡蛋标记识别的图像预处理的主要内容,如果未能解决你的问题,请参考以下文章
在进行字符识别之前使用 OpenCV 进行图像预处理(tesseract)