web-dev-qa-db-ja.com

pytesseract&PILによるテキスト認識の精度の向上

だから私は画像からテキストを抽出しようとしています。また、画像の品質とサイズが良くないため、結果が不正確になります。 PILでいくつかの機能強化やその他のことを試しましたが、それは画像の品質を悪化させるだけです。

誰かがより良い結果を得るために画像の強化を提案できますか?画像のいくつかの例:

two

three

10
sprksh

提供されている画像の例では、テキストは視覚的に非常に高品質です。問題は、OCRが不正確な結果をもたらすのはなぜですか。

この回答のさらなるテキストで与えられた結論を説明するために、与えられた画像を実行してみましょう

enter image description here

正八胞体を通して。 Tesseract OCRの結果の下:

"fhpgearedmomrs©gmachom"

次に、画像のサイズを4回変更し、しきい値を適用します。私はGimpで手動でサイズ変更としきい値処理を行いましたが、適切なサイズ変更方法とPILのしきい値を使用すると、確実に自動化できるため、拡張後、取得した拡張画像と同様の画像が得られます。

enter image description here

Tesseract OCRを介して実行される改善された画像は、次のテキストを提供します。

「fhpgearedmotors©gmail.com」

これは、画像を拡大すると、提供されているテキスト画像の例で100%の精度を達成するのに役立つことを示しています。

画像を拡大するとOCRの精度が向上するのは奇妙に思えるかもしれませんが、OCRは、印刷メディアのスキャンをテキストに変換し、設計上300dpiのテキスト画像を期待するために開発されました。これは、一部のOCRプログラムが結果を改善するためにテキストのサイズを自分で変更せず、拡大によって達成できる画像のより高いdpi解像度を期待する小さなフォントでうまくいかない理由を説明しています。

ここに Tesseract FAQ on github.com 上記のステートメントを証明することからの抜粋:

[妥当な精度のための最小テキストサイズがあります。ポイントサイズだけでなく解像度も考慮する必要があります。精度は10ptx 300dpiを下回り、8pt x300dpiを急速に下回ります。簡単なチェックは、キャラクターのエックスハイトのピクセルを数えることです。 (X-heightは小文字のxの高さです。)10pt x 300dpiでは、x-heightsは通常約20ピクセルですが、これはフォントごとに大幅に異なる場合があります。エックスハイトが10ピクセル未満の場合、正確な結果が得られる可能性はほとんどありません。約8ピクセル未満の場合、ほとんどのテキストは「ノイズ除去」されます。]

7
Claudio