Tesseract OCR库-学习字体
c#
image-processing
ocr
6
0

好吧,我正在使用此OCR的.NET版本,可以在http://www.pixel-technology.com/freeware/tessnet2/中找到

我可以正常工作,但是这样做的目的是翻译车牌,可惜引擎确实不能准确翻译一些字母,例如,这是我扫描以确定字符问题的图像

在此处输入图片说明

结果:

12345B7B9U ABCDEFGHIJKLMNUPIJRSTUVHXYZ

因此,以下字符被错误地翻译:

1,O,Q,W

这似乎还不错,但是在我的车牌上,结果并不是很好:

在此处输入图片说明 = H4 ODM

在此处输入图片说明 = LDH IFW

假测试

在此处输入图片说明 = NR4 y2k

如您所知,我已经尝试了降噪,增加对比度并删除不是绝对黑的像素,但没有真正的改进。

显然,您可以“学习”引擎的新字体,但是我想我需要重新编译.NET的库,而且看来这是在我没有的Linux操作系统上执行的。

http://www.scribd.com/doc/16747664/Tesseract-Trainingfor-Khmer-LanguageFor-Posting

因此,我为下一步尝试着迷,我编写了一个快速控制台应用程序,纯粹是出于测试目的,如果有人想尝试的话。如果有人有任何想法/图形处理/图书馆思想,我将不胜感激。

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

一个伟大的阅读! http://robotics.usc.edu/publications/downloads/pub/635/

关于车牌的偏斜问题:

问题:当从不固定视点的手持式照相机或其他成像设备(如扫描仪)获取OCR输入时,文本行可能会偏离其原始方向[13]。根据我们的实验,将这样旋转的图像馈送到我们的OCR引擎会产生极差的结果。建议的方法:在调用识别引擎之前,需要进行歪斜检测过程。如果检测到任何歪斜,在进一步处理文本之前,将执行自动旋转过程以纠正歪斜。在确定用于偏斜检测的算法时,我们发现许多方法,例如[13]中提到的方法,都是基于文档有一定余量的假设。但是,这种假设并不总是适用于我们的应用程序。另外,基于形态学运算和投影方法的传统方法非常慢,并且在存在相机捕获的图像的情况下往往会失败。在这项工作中,我们选择基于Branchand-Bound文本行查找算法(RAST算法)[25]的更健壮的方法来进行倾斜检测和自动旋转。该算法的基本思想是独立识别每条线,并使用最佳刻线的斜率作为整个文本段的倾斜角。在检测到倾斜角之后,相应地进行旋转。根据我们的实验,我们发现该算法具有很高的鲁棒性,极高的效率和速度。但是,它在检测不到大于30的旋转方面受到一个较小的限制。我们还尝试了一种替代方法,该方法可以检测到最大90度的任何倾斜角。但是,此方法基于某种形式的存在在图像上的十字架。由于缺乏可扩展性,我们决定坚持使用RAST算法。

收藏
评论

我最近通过Tessnet2使用了Tesseract(如果记得的话,Tessnet2是RémyThomas制造的Tesseract 2.0的VS2008 C ++包装器)。让我用我对此工具的一点知识来帮助您:

  • 首先,如上所述,该包装仅适用于Tesseract 2.0,而Google Code上最新Tesseract版本为3.00(该代码不再托管在Source Forge上)。有定期的贡献者:我看到了3.01左右版本的计划。因此,您不会从最后的增强功能中受益,包括页面布局分析,这在您的车牌并非100%水平时可能会有所帮助。

  • 我向雷米(Rémy)索要有关版本3的Tessnet2 .NET包装器,他暂时不打算这样做。因此,就像我所做的那样,您必须自己做!

  • 因此,如果您想获取最新版本的源代码,则可以从Subversion存储库中下载它们(所有内容均在专用网站页面上进行了描述),如果您使用的是Visual Studio 2008,则可以对其进行编译,因为它们的源代码包含vs2008子文件夹中的VS2008解决方案。该解决方案由VS2008 C ++项目组成,因此要在C#中获得结果,必须将.NET P / Invoke与该tessDll构建的tessDll一起使用。同样,如果您需要这样做,我会提供一些您可能感兴趣的代码示例,但是您可能希望继续使用C ++并做自己的新WinForm项目,例如!

  • 当您完成编译时(应该不会有什么大问题,但是告诉我您是否遇到了一些问题,我也可能也遇到过它们:-)),您将在输出中包含几个二进制文件,这些文件将允许您执行具体培训!同样,这里有专门针对Tesseract 3培训的页面 。借助此培训,您可以:

    • 限制您的字符集,这将自动删除标点符号(例如,“ /-\”而不是“ A”)

    • 指明您检测到的歧义(如您所见,用'D'代替'O',用'B'代替'8'等),将在您使用培训时考虑在内。

  • 我还看到,如果将图像限制在字母所在的区域(即,没有脸,周围没有风景),则Tesseract的效果会更好:就我而言,我只需要识别从网络摄像头拍摄的卡片的特定区域,因此我使用图像处理来限制区域。当然,那很长,但是我的图像来自许多不同的来源,所以我别无选择。如果您可以将图像限制在最小范围内,那就太好了!

希望对您有所帮助,请随时给我您的意见和疑问!

收藏
评论

嗨,我在tesseract上做了很多ocr,而且我也遇到了一些您的问题。您问有关图像处理工具的问题,我建议您使用“ unpaper” (也有Windows端口,请参阅google)。这是一个不错的消除偏斜,不旋转,去除边界噪声的程序。非常适合在跑步前跑步。

如果图像上的背景颜色(某种程度上)可变,我建议您使用“ textcleaner” imagemagick脚本,我认为它可以边缘检测并变白所有非前卫的东西。

而且,如果您有复杂的文本,那么“ ocropus”可能会有用。语法是(在Linux上):“ ocroscript rec-tess”

我的设置是1. textcleaner 2.拆纸3. ocroups

通过这三个步骤,我几乎可以阅读任何内容。即使在光线不均匀的情况下拍摄的非常模糊+嘈杂的图像,两列紧紧包装的文字也非常可读。好的,也许您的需求不是很多,但是步骤1)和2)可能对您有用。

收藏
评论

我目前正在为ispy构建车牌识别引擎-当我将车牌分割成单个字符并构建一个新的垂直显示的图像时,我从tesseract获得了更好的结果,例如:

w ^

4

Ø

Ø

中号

我认为,tesseract的一个大问题是它试图使水平字母和数字中的单词变得不正确,如果车牌上混合了字母和数字,它将决定数字是字母还是反之。输入字符垂直隔开的图像会使它被视为单个字符而不是文本。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号