Android中的Tesseract字符识别问题(但不适用iOS?)



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

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

  • 我在预览屏幕上选择了一个边框,在那里我可以裁剪出相关的文本,并相应地裁剪图像。

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

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

然而,iOS可以很好地识别文本字符串,而Android总是错误地识别某些字符(将6s误认为s,将As误认为Hs)。

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

以前有人遇到过这种情况吗?我是否错过了Android上的一个在iOS中自动处理的设置?Android有没有什么特别之处是我没有想到的?

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

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

然而,我误解了它是如何工作的。我最初认为TessDataManager对项目的本地tesseract/tessdata文件夹进行了文件查找,以获得训练过的数据文件(正如我在iOS上所做的那样)。然而,这不是它的作用。相反,它检查内部文件结构(data/data/projectname/files/tesseract/tessdata/traineddatafilegoeshere)以查看文件是否存在,如果不存在,则复制保存在Resources/Raw目录中的训练数据文件。在我的情况下,它默认为eng文件,所以它永远不会读取我的自定义字体文件。

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

最新更新