2012-04-17 17 views
8

なぜ私のTesseractが数字のある画像を認識できないのか、それについて何かできることがあるのか​​、誰かが教えてくれることを望んでいました。 すべてがテストに基づいて動作しています、そしてそれは私が必要とする数字だけなので、私は7セグメンテーションディスプレイから始めなければならないまで、私は英語のパターンで管理できると思いました。Tesseractの数字を認識できない - アンドロイド

添付された画像に多くの問題がありますが、私自身の認識アルゴリズムの作業を開始する必要があるかどうか、Tesseract用の独自のデータセットを作成できたらうまくいくかどうかを知りたいですTesseractの限界がどこにあるのか誰にでも分かりますか?

試したことがあります: psmをone_line、one_word、one_charに設定しようとしました(画像を切り刻む)。 one_lineとone_wordでは大きな変更はありませんでした。 with one_charこれはちょっと気分が良くなりましたが、大きな間隔のため余分な番号が付いてくることがありました。添付画像を見るとzero.jpgになり、04になりました。 私も試しました自分自身で二進化を行うには、これは認識が悪くなり、非常にリソースを消費していました。 私は絵を逆転しようとしましたが、これはtesseractのために全く違いはありません。

私は必要な画像を添付して処理します。

画像について、について説明:

decodethisimage_sevenは、それが働いた画像の周りにアプリケーションを構築する便利のために言葉で説明したがたTesseractは、何の問題認識を持っていないというイメージです。

decodethisimage_eightはimage_sevenにマッチする実生活の画像です。しかし、これを認識することはできません。

decodethisimage_four2私はそれを認識したいと思います。はい、私はそれがひっくり返ることができないことを知っています、そして、私はスクンクしませんでした(スクリューはここでの用語== "ストレート"です)。

+0

skrew = skew nice :)また、イメージツールセットは、ノイズを減らし、シャープにすることができます。それは助けるかもしれない –

答えて

2

私はあなたを助けるかもしれないいくつかのオプションを知っている:

  1. 画像境界とテキストの間の余分なスペースを追加します。 Tesseractは、画像内のテキストがエッジに配置されていると、ひどくうまく動作します。
  2. 画像を複製します。たとえば、単語 'foobar'でOCRを実行している場合、画像を複製して 'foobar foobar foobar foobar foobar foobar'をtesseractに送信すると、結果が改善されます。
  3. Google for tesseract font trainingおよびimage binarizationです。

は覚えておいて、その内蔵カメラのモバイル機器で主に生産する低品質の画像(blured、雑音除去、スキューなど)OCR自体がリソースcomsumingプロセスであり、あなたはそれに値する画像前処理を追加した場合、ローエンドおよびミッド・モバイル・デバイス(アンドロイドを持つ可能性が高い)は、予期せずパフォーマンスが低下したり、リソースが不足する可能性があります。無料の/学習プロジェクトであれば問題ありませんが、商用アプリケーションを計画している場合は、より優れたSDKの使用を検討してください。

詳細については、この質問を見てください:OCR for android

+0

あなたの入力をありがとう、私は挑戦してみます。 ローエンドミッドモバイル、通常のミッドセグメントイモについて少なくとも3mpixのカムを持っていて、それは十分であるはずですが、オートフォーカスは問題があります。 歪んだ画像を避けるために私は非常に限られた矩形を画面上のオーバーレイとして設定しました。 しかし、私はそれが電話機のために重くなるかもしれないことに同意する、私はそれがサーバー上で実行して気にしない、私はそれが最初に動作することを知る必要があります、私はまだ取得havent: -/ –

+0

写真にフレームを追加するか、または追加しますか? 悪いことにそれを見回してみてください。ちょうどそれがすべての経験を持っていればよろしいですか? –

+0

1と2は動作しませんでした。 代わりにjavaCrで作業しようとするtesseractを投げてください –

1

あなたがしよう(http://sourceforge.net/projects/javaocr/、はい、私は開発者ですが)javaocr与える可能性があり

Therreはしかし何offocialリリースされていない、とあなたがする必要がありますソースを探してください(良いニュース:サンプラー、オフライントレーナー、レコグナイザアプリケーションを含む作業中のAndroidサンプルがあります)

フォントが1つだけの場合は、かなり良い結果が得られます(認識率は99.96まで同じフォント)

PS:これは純粋なJavaであり、不変の瞬間を使ってマッチングを実行します(スケーリングと回転に問題はありません)。かなり効果的な2値化もあります。

は、アクションでそれを参照してください。

https://play.google.com/store/apps/details?id=de.pribluda.android.ocrcall&feature=search_result#?t=W251bGwsMSwxLDEsImRlLnByaWJsdWRhLmFuZHJvaWQub2NyY2FsbCJd

+0

あなたのアプリを試してみましたが、それは私の数字/写真のいずれかを認識しませんでした: -/ –

+0

このアプリは白い背景に黒いテキストを訓練されています。あなたがネガティブを必要とする場合は、javaocrプロセスでアンドロイドサンプルを試してみてください(ネガを扱うためにバイナリゼーションプロセスでわずかな変更が必要です)PS:regcognition result screenshotを投稿できますか?それから、私はマーズがいくつかのヒントを与えることができるでしょう –

+0

私はネガであるので、それは必要ありません:-) –

2

たTesseractはあなたのためのセグメンテーションを行いません。 Tesseractは、実際のテッサラクトゴルゴの前に画像の閾値処理を行います。閾値処理の後、画像内に残っているいくつかのエッジ、アーチファクトが存在する可能性がある。

画像を白黒の色に手動で変更し、出力としてどのようなtesseractが返されるかを確認してください。

画像をしきい値(自動的に)にして、出力として返されるtesseractを確認してください。スレッシュホールドの出力が悪すぎて、テッサラクトが悪い出力を引き起こす可能性があります。

スレッシュホールドのため、4番目の画像はおそらく失敗します(黒色背景、灰色がかった背景と白い文字の3色です)、しきい値は(黒色背景、灰色がかった背景)の間にある可能性があります。

一般的に、Tesseractは白黒のイメージを望んでいます。より良い結果を得るには、画像の前処理が必要な場合があります。

最初の画像(結果が「04」)の場合、ボックスの結果(認識された文字を含むボックスのchar +座標)を表示してみてください。 "0"は、4×4の小塊のような小さな人工物である可能性があります。

関連する問題