2

私は Tesseract を使用して一連の画像内のいくつかの数字を識別しようとしてきましたが、アドバイスを求めて精査した後、多くの改善を行いました。これまでのところ、次の手順を試みました。

  • 数値を選択するために適切なしきい値で画像を 2 値化します
  • Tesseract を数字のみに制限する
  • さまざまなアプローチを使用して画像をアップスケールします (Image.SCALE_SMOOTH を使用した getScaledInstance、AffineTransformOp.TYPE_BICUBIC を使用した AffineTransform)。
  • さまざまな Tesseract ページ セグメンテーション モードを調べます。現在モード 6 を使用しています。

数字はすべて同一の形状で、完全に整列していますが、エッジは多少ギザギザになっています。処理された画像の例:

ここに画像の説明を入力 ここに画像の説明を入力

Tesseract はこれらを問題なく処理しますが、8 を 3、6 を 5、9 を 5 と混同することがよくあります。

画像を滑らかにするさまざまな方法を少し調べて、さまざまなスケールを試してみましたが、Tesseract をトレーニングするプロセスを実行する方が理にかなっているのかどうかも疑問に思っています。常にほとんど同じである可能性のある値は 10 個しかないため、それらを認識することを学習するのはそれほど難しくないように思われますが、Tesseract のトレーニングも非常に苦痛のように思えます。

これらの画像で Tesseract から最終的な精度を得る方法について何か提案はありますか?

私は tess4j と Java を使用しているので、Java 固有の提案とライブラリは特に高く評価されます。自分でアルゴリズムを実装したいとは思っていますが、車輪の再発明はしたくありません。

4

1 に答える 1

4

さまざまな種類のグレースケール、画像の色の反転、サイズ変更、および代替の二値化戦略など、あまり進歩することなく、さらにいくつかの前処理のアイデアを試しました。これらのどれも、元のサイズ変更されていない二値化よりも改善されていません。最終的に、Tesseract のトレーニングを試してみることにしました。ここの指示に従いました: Manual Tesseract Training Walkthrough

Windows 64 ビットで実際に動作するプログラムを見つけるのに苦労し、ほとんどの作業を手動で行うことになりました。jTessBoxEditor を使用して、手動で生成された .box ファイルを編集しましたが、テキスト エディターで編集を行って、ボックス ファイル ジェネレーターが見逃した欠落文字のエントリを追加しました。私は作業するこれらの小さな tiff しか持っていないので、私のトレーニング ファイルは Tesseract wiki のガイドラインを満たしていませんが、まあまあです。

box.train の使用時にいくつかのエラーが発生しました。

FAIL! apply_boxes BOXFILE LINE ... failure! COULDN'T FIND A MATCHING BLOB

非生産的なグーグル検索の後、私はそれらを無視して先に進むことにしました。

cntraining を実行しようとすると、さらにエラーが発生しました。

Error: Illegal number of feature sets!
signal_termination_handler:Error:Signal_termination_handler called:Code 3001

さらに非生産的なグーグル検索を行った後、基本的に、各 .tr ファイルを順番に省略して、どのファイルが問題の原因であるかを確認しようとしました。最終的に、1 つの欠落ファイルで cntraining を完了することができました。これが出力にどのような影響を与えるかはわかりませんが、無視して続行することにしました。

私は、combine_tessdata の実行中に別の問題に遭遇しました。

Error opening unicharset file
Error combining tessdata files into foo.traineddata

これは、unicharset ファイルの前に lang プレフィックスを付ける必要があったためで、チュートリアルでは指示されていませんでした。それを行った後、私は訓練されたデータファイルを正常に構築しました。それが機能するかどうかわからないので、それを tessdata ディレクトリにドロップし、言語を新しいトレーニング済み言語に切り替えて、もう一度試しました。

出来上がり、完璧でした。私の数字を100%の精度で認識しているようです(少なくとも私の限られたサンプルサイズ全体で)。私が行っている唯一の前処理は、画像の 2 値化であり、それ以上のクリーンアップや再スケーリングはありません。

したがって、明らかに小さな文字セットでは、手動でトレーニングする価値があります。機能するツールを見つけて、プロセスを進めるのに苦労するのに、おそらく3時間かかりました。参考までに、最初の投稿と同様の 14 個の tif から始めました。それらのうちの 4 つは、途中で何らかのエラーがありました。さらに、cntraining から省略した 1 つ (ただし、他のものからではありません..?) のように..トレーニング用の 9 枚と 2/3 枚の画像。私のキャラクターの一貫性のおかげで、それで十分だったようです.

于 2015-02-26T06:12:35.617 に答える