Android 中的 Tesseract 字符识别问题(但 iOS 中没有?)
Tesseract character recognition problems in Android (but not on iOS?)
我构建了一个应用程序,它使用 Tesseract (V3.03 rc1) 来识别一些特定的文本字符串。不幸的是,这些打印在自定义字体上,需要我构建自己的训练数据文件。我已经在 iOS 上构建了应用程序(也使用 https://github.com/gali8/Tesseract-OCR-iOS for inspiration) and Android (using https://github.com/rmtheis/tess-two/ 来获得灵感)。
两个平台的工作流程如下:
我 select 我可以在预览屏幕上裁剪出相关文本并相应裁剪图像的边界框。
我用OpenCV得到二值图像(使用OpenCV的自适应阈值函数,两个平台参数相同)
我将这个二进制图像传递给 Tesseract。两个平台(Android 和 iOS)使用相同的训练数据文件。
然而,iOS 可以完美地识别文本字符串,而 Android 总是错误识别某些字符(6s 代表 Ss,As 代表 Hs)。
在两个平台上,我使用相同的白名单字符串,我禁用 load_type_dawg 和 load_system_dawg,并选择保存 blob 选择。
有人遇到过这种情况吗?我是否遗漏了 Android 中自动处理的 iOS 设置?关于 Android 有什么我没有想到的特别之处吗?
如有任何想法或建议,我们将不胜感激!
因此,经过大量工作后,我发现我的 Android 应用程序出了什么问题(谢天谢地,这根本不是 Tesseract 的问题)。由于我对 iOS 应用程序比 Android 更熟悉,因此我不确定如何在不要求用户将文件加载到其外部存储设备的情况下将训练数据文件加载到应用程序中。我在这个项目 (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 的帮助!
我构建了一个应用程序,它使用 Tesseract (V3.03 rc1) 来识别一些特定的文本字符串。不幸的是,这些打印在自定义字体上,需要我构建自己的训练数据文件。我已经在 iOS 上构建了应用程序(也使用 https://github.com/gali8/Tesseract-OCR-iOS for inspiration) and Android (using https://github.com/rmtheis/tess-two/ 来获得灵感)。
两个平台的工作流程如下:
我 select 我可以在预览屏幕上裁剪出相关文本并相应裁剪图像的边界框。
我用OpenCV得到二值图像(使用OpenCV的自适应阈值函数,两个平台参数相同)
我将这个二进制图像传递给 Tesseract。两个平台(Android 和 iOS)使用相同的训练数据文件。
然而,iOS 可以完美地识别文本字符串,而 Android 总是错误识别某些字符(6s 代表 Ss,As 代表 Hs)。
在两个平台上,我使用相同的白名单字符串,我禁用 load_type_dawg 和 load_system_dawg,并选择保存 blob 选择。
有人遇到过这种情况吗?我是否遗漏了 Android 中自动处理的 iOS 设置?关于 Android 有什么我没有想到的特别之处吗?
如有任何想法或建议,我们将不胜感激!
因此,经过大量工作后,我发现我的 Android 应用程序出了什么问题(谢天谢地,这根本不是 Tesseract 的问题)。由于我对 iOS 应用程序比 Android 更熟悉,因此我不确定如何在不要求用户将文件加载到其外部存储设备的情况下将训练数据文件加载到应用程序中。我在这个项目 (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 的帮助!