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 は特定の文字 (S は 6、H は同様) を誤認し続けます。

両方のプラットフォームで、同じホワイト リスト文字列を使用し、load_type_dawg と load_system_dawg を無効にし、ブロブの選択を保存することも選択します。

誰もこのような状況に遭遇したことがありますか? 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 に答える