3

我已经构建了一个使用 Tesseract (V3.03 rc1) 来识别一些特定文本字符串的应用程序。不幸的是,这些打印在自定义字体上,需要我构建自己的训练数据文件。我已经在 iOS(使用https://github.com/gali8/Tesseract-OCR-iOS获得灵感)和 Android(使用https://github.com/rmtheis/tess-two/获得灵感)上构建了应用程序出色地)。

两个平台的工作流程如下:

  • 我在预览屏幕上选择一个边界框,我可以在其中裁剪相关文本,并相应地裁剪图像。

  • 我使用 OpenCV 获取二进制图像(使用 OpenCV 的自适应阈值函数,两个平台的参数相同)

  • 我将这个二进制图像传递给 Tesseract。两个平台(Android 和 iOS)都使用相同的训练数据文件。

然而,iOS 完美地识别了文本字符串,而 Android 不断地错误识别某些字符(Ss 为 6s,Hs 为 6s)。

在这两个平台上,我使用相同的白名单字符串,禁用 load_type_dawg 和 load_system_dawg,并选择保存 blob 选项。

有没有人遇到过这种情况?我是否缺少在 iOS 中自动处理的 Android 设置?Android 有什么特别的地方没有让我想到吗?

任何想法或建议将不胜感激!

4

1 回答 1

1

因此,经过大量工作,我发现了我的 Android 应用程序出了什么问题(谢天谢地,这根本不是 Tesseract 的问题)。由于我比 Android 更熟悉 iOS 应用程序,因此我不确定如何在不要求用户将文件加载到其外部存储设备上的情况下将训练数据文件加载到应用程序中。我在这个项目 ( http://www.codeproject.com/Tips/840623/Android-Character-Recognition )中找到了灵感,因为它们会自动加载经过训练的数据文件。

但是,我误解了它是如何工作的。我最初认为 TessDataManager 在项目的本地 tesseract/tessdata 文件夹上进行了文件查找,以获取经过训练的数据文件(我也在 iOS 上这样做)。但是,这不是它的作用。相反,它会检查内部文件结构(data/data/projectname/files/tesseract/tessdata/traineddatafilegoeshere)以查看文件是否存在,如果不存在,它会复制它保存在 Resources/ 中的训练数据文件原始目录。就我而言,它默认为 eng 文件,因此它从不读取我的自定义字体文件。

希望这可以帮助其他有类似问题的人。感谢 Robin 和 RmTheis 的所有帮助!

于 2015-05-31T04:22:01.887 回答