【问题标题】:How do I choose between Tesseract and OpenCV? [closed]如何在 Tesseract 和 OpenCV 之间进行选择? [关闭]
【发布时间】:2012-07-14 10:41:50
【问题描述】:

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

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

我的具体问题如下:

  • 如何在 Tesseract 和使用 OpenCV 构建自定义 OCR 应用之间做出选择?
  • 有可用于不同语言的 Tesseract 的训练数据集。 OpenCV 是否有类似的东西,所以我不必从头开始实现 OCR?
  • 哪个更适合商业应用?

有什么建议吗?

【问题讨论】:

  • 下面的答案真的很棒,但作为一个使用过 OCR 的人,我可以告诉你,Tesseract 中的识别质量低于商业应用用户的期望。 Tesseract 很棒,但 OCR 很难——诸如在线培训或即时改进之类的东西是嗯……仍在研究中。最近,TS 背后的大赞助商 Google 决定打造自己的引擎 - OCROpus。虽然它承诺将其开源,但核心识别引擎尚不可用 - 他们只发布了一个框架 - 这是 tesseract 的 api。
  • @vasile:这非常有用。我不知道 OCROpus。谢谢你。如果我的最终目标是写一张名片 OCR(或者说,像我链接的那样读取加油站收据:upload.wikimedia.org/wikipedia/en/3/34/…),您对替代方案有什么建议吗?我之所以问,是因为我只是好奇众多移动应用程序使用什么来实现这一目标。我不介意在服务器端进行 OCR。看到这个很酷的演示后,我很想使用 OpenCV:youtube.com/watch?v=OkcOfS1lTxs
  • 有许多商业 OCR 引擎,只需 google OCR accuracy tests 即可找到一些图表。谈到移动应用程序,他们中的大多数都使用 tesseract。但是,如果您费心去下载其中的一些,您会发现结果与 Promise 有点不同。他们通常在精心控制的环境中制作视频演示并将其发布在 youtube 上,但在野外,如果您扫描页面/食谱/卡片/任何东西,您会得到一些有趣的结果。
  • @vasile:谢谢。今晚有事让我忙。非常感谢您的时间。

标签: python opencv computer-vision ocr tesseract


【解决方案1】:
  • Tesseract 是一个 OCR 引擎。它由 Google 使用、开发和资助,专门用于从图像中读取文本、执行基本文档分割以及对特定图像输入(单个单词、行、段落、页面、有限字典等)进行操作。

    李>
  • 另一方面,OpenCV 是一个计算机视觉库,其中包含可让您执行某些特征提取和数据分类的功能。您可以创建一个简单的字母分割器和分类器来执行基本的 OCR,但它不是一个很好的 OCR 引擎(我之前在 Python 中从头开始制作了一个。对于偏离训练数据的输入确实不准确)。

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

【讨论】:

  • 这取决于您输入的图像。当字母清晰、呈水平线、间隔开、未连接且完美的黑白时,Tesseract 效果最佳。我在 DIY 图书扫描/保存社区中修修补补了大约一年,并在空闲时间从事软件开发以简化流程。用于对带有文本的任何图像进行后处理的最好的软件(无论是否商用)是Scan Tailor。它有一些 CLI 选项,但如果您花一些时间了解它是如何工作的,那就太棒了。
  • 我在 Scan Tailor 的源代码上工作了一段时间,它内部没有使用 OpenCV,但是创建的许多算法可以很容易地用 OpenCV 的函数重写。如果您的图像没有变形并且没有退化,那么在将图像输入 Tesseract 之前,您真的只需要实现自适应二值化和一些简单的去斑。
  • 关于你的问题,我昨天刚刚测试了一些随机输入图像。我尝试了加油站的收据:upload.wikimedia.org/wikipedia/en/3/34/… 它将0 识别为8(总计20.00 美元)。我承认即使对我来说数字也很难破译,但我不确定还能做些什么来使 Tesseract 适应这些情况,或者如果我将拥有一个活跃的用户群,也许可以引入一个学习组件。
  • Tesseract 接受过阅读特定字体集的训练。那些块状字母不是其中之一。您必须向 Google 展示动物祭品并尝试自己训练 Tesseract:code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3
  • 另外,在开始编写自定义 OCR 引擎来读取这些字母之前,不要期望它是准确的。我写了一个用于自动化命运之轮的示例图像(在线游戏的屏幕截图)是 JPEG。除非我为每个字符提供大约 10-20 个样本图像,否则 JPEG 压缩的伪影足以搞砸图像分类器。
【解决方案2】:

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

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

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

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

【讨论】:

  • +1 谢谢。首先,感谢您的教程 :) 这是一本非常有趣的书。您是否知道任何有关如何将 OpenCV 与 Tesseract 一起使用的参考资料/教程?不是在谈论接口,而是为了提高 Tesseract 的准确性需要进行的图像转换或预处理的类型?
  • 我只想说,与其他引擎相比,Tesseract 是一个很好的 OCR 引擎,但它仍然相当不准确,我在识别正确文本方面的成功率约为 40%。希望几年后会更好。
  • @GangstaGraham 你只需要训练 tesseract 就可以在几小时或几天而不是几年内获得更好的结果。 opensource.newmediaist.com/tesseract-training.html
  • 我使用 PyTesseract 进行实时文本提取。它在 Linux PC 上运行良好,但在 Raspberry Pi 环境中运行速度很慢……有什么方法可以安装轻量级版本?例如,只处理英文字母的数字和大写字母?
【解决方案3】:

两者可以互补。如果您阅读有关 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 进行图像到文本的转换。

【讨论】:

    【解决方案4】:

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

    来自OpenCV.org

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

    来自Tesseract Github

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

    【讨论】:

      猜你喜欢
      • 2014-11-17
      • 1970-01-01
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 2022-01-24
      • 2019-12-17
      • 1970-01-01
      相关资源
      最近更新 更多