我如何在Tesseract和OpenCV之间进行选择?[关闭]


93

我最近遇到过TesseractOpenCV。看起来Tesseract是成熟的OCR引擎,而OpenCV可以用作创建OCR应用程序/服务的框架。

我尝试在某些图像上使用Tesseract,其准确性似乎不错。后来,我遇到了一个有关使用OpenCV使用Python执行OCR 的非常简单的教程,这给我留下了深刻的印象。几分钟后,我完成了对该系统的培训,其准确性非常好。但是,当然,采用这种方法意味着我需要使用大型训练集来广泛地训练系统。

我的具体问题如下:

  • 如何在Tesseract和使用OpenCV构建自定义OCR应用之间进行选择?
  • 对于Tesseract,有针对不同语言的培训数据集。OpenCV是否具有类似的功能,所以我不必重新开始就可以实现OCR?
  • 对于想成为商业应用程序的哪个更好?

有什么建议?


8
下面的答案确实很棒,但是作为与OCR合作的人,我可以告诉您Tesseract的识别质量低于商业应用程序用户的期望。Tesseract很棒,但是OCR却很困难-在线培训或即时改进之类的东西……仍在研究中。最近,TS背后的最大赞助商Google决定建立自己的引擎OCROpus。尽管它承诺开源,但核心识别引擎尚不可用-他们只发布了一个框架-这是tesseract的api。
山姆

3
@vasile:那是非常有用的信息。我并不了解OCROpus。谢谢。如果我的最终目标是写一张名片OCR(或者说像我链接的那样读取加油站收据的名片,请问您有什么建议):upload.wikimedia.org/wikipedia/en/3/34/…)?我问是因为我很好奇许多移动应用程序使用了什么来实现这一目标。我不介意在服务器端进行OCR。看到这个很酷的演示后,我很想使用OpenCV:youtube.com/watch?v=OkcOfS1lTxs
Legend

6
有很多商业OCR引擎,只有google OCR accuracy tests,您会发现一些图表。在谈论移动应用程序时,大多数都使用tesseract。但是,如果您不愿意下载其中的一些内容,则会发现结果与承诺的内容有所不同。他们通常会在精心控制的环境中制作视频演示,然后将其发布到youtube上,但在野外,如果您扫描页面/食谱/卡片/任何内容,都会得到一些有趣的结果。
山姆

1
@vasile:谢谢。今晚让我忙的事。真的很感谢您的时间。
传奇

Answers:


77
  • Tesseract是OCR引擎。它由Google使用,研究和资助,专门用于读取图像中的文本,执行基本的文档分割以及对特定的图像输入(单个单词,行,段落,页面,有限的词典等)进行操作。

  • 另一方面,OpenCV是一个计算机视觉库,其中包含使您可以执行某些特征提取和数据分类的功能。您可以创建一个简单的字母分段器和分类器来执行基本的OCR,但它不是一个很好的OCR引擎(我以前从头开始用Python编写过。对于输入与您的训练数据有所不同的输入确实不准确)。

如果您想基本了解OCR的难度,请尝试使用OpenCV。Tesseract适用于真正的 OCR。


3
这取决于您输入的图像。当字母清晰,水平排列,间隔开,未连接且完全是黑白时,Tesseract效果最佳。我在DIY图书扫描/保存社区中进行了大约一年的修补,并在业余时间使用软件来简化此过程。在最好的在那里的软件(商业或)进行后期处理的任何图像与文本扫描裁缝。它具有一些CLI选项,但是如果您花一些时间看一下它是如何工作的,那就太神奇了。
搅拌器

2
我花了一点时间处理了Scan Tailor的源代码,并且内部没有使用OpenCV,但是创建的许多算法都可以用OpenCV的函数轻松重写。如果您的图像不变形也不退化,那么您实际上只需要实施自适应二值化和一些简单的去斑点处理,然后再将图像输入Tesseract。
Blender

1
关于您的问题,我昨天刚刚测试了一些随机输入的图像。我尝试从加油站收到一张收据:upload.wikimedia.org/wikipedia/en/3/34/…它被识别08(总价为20美元)。我承认即使是我也很难理解数字,但是我不确定要使Tesseract适应这些情况还可以做些什么,或者如果我将拥有活跃的用户群,还可能会引入学习的内容。
图例

5
Tesseract受过阅读特定字体集的培训。那些活泼的信件不是其中之一。您必须向Google献祭动物并尝试自己训练Tesseract:code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3
Blender

1
另外,在着手编写自定义OCR引擎以读取这些字母之前,请不要指望它是准确的。我写了一个《命运之轮》的自动化程序,示例图像(在线游戏的屏幕截图)是JPEG。除非我为每个字符提供大约10-20个样本图像,否则JPEG压缩产生的伪影足以破坏图像分类器。
Blender

65

我是您提到的那个数字识别教程的作者,我想说,这绝不能替代tesseract。

Tesseract是一个非常好的OCR引擎,可能是最好的OpenSource OCR引擎。

您提到的教程只是一个尝试,旨在了解OCR的最简单的工作方式。

因此,如果您正在寻找OCR应用程序,我建议您使用OpenCV对图像进行预处理,然后再应用tesseract引擎。


1
+1谢谢。首先,感谢您的教程:)这是一个非常有趣的阅读。您是否了解有关如何在Tesseract中使用OpenCV的任何参考资料/教程?不是在谈论接口,而是在谈论要提高Tesseract准确性的图像转换或预处理的类型?
传奇

2
想要说的是,尽管Tesseract与其他引擎相比是一个很好的OCR引擎,但它仍然相当不准确,但我在识别正确文本方面的成功率约为40%。希望几年后会更好。
GangstaGraham

4
@GangstaGraham您只需培训tesseract,即可在数小时或数天内(而不是数年)获得更好的结果。opensource.newmediaist.com/tesseract-training.html
相当于

1
我使用PyTesseract进行实时文本提取。它在Linux PC上可以正常工作,但在Raspberry Pi环境上却非常慢...是否可以安装轻量级版本?例如,仅处理英文字母的数字和大写字母?
尤里·切尔尼绍夫

9

两者可以互补。如果您阅读有关OpenCV的文章,请访问:https : //github.com/tesseract-ocr/docs/blob/master/tesseracticdar2007.pdf

它着重指出:“由于HP具有产品中使用的独立开发的页面布局分析技术,因此Tesseract从来不需要自己的页面布局分析。因此,Tesseract假定其输入是带有定义了可选的多边形文本区域。”

此类任务可由OpenCV执行,并将生成的图像移交给Tesseract。您可以在Git存储库中找到此类代码的示例:https : //github.com/Itseez/opencv_contrib/tree/master/modules/text/samples 这些示例使用Tesseract API进行图像到文本的转换。


3

OpenCV是CV的库,通常用于分析和处理图像。Tesseract是OCR的库,它是CV的专门子集,专用于从图像中提取文本。

OpenCV.org

.....用于检测和识别人脸,识别物体,对视频中的人类动作进行分类,跟踪相机运动,跟踪运动物体,提取物体的3D模型,从立体相机产生3D点云,将图像缝合在一起以产生高整个场景的分辨率图像,从图像数据库中查找相似的图像,从使用闪光灯拍摄的图像中消除红眼,跟随眼睛的移动,识别风景并建立标记以将其与增强现实叠加,等等

Tesseract Github

.....可以直接使用,或(对于程序员)使用API​​从图像中提取键入的,手写的或打印的文本。它支持多种语言。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.