tesseract
を使用して数字のみを認識したい。問題は、数字と文字が混在しており、SetVariable("tessedit_char_whitelist", "0123456789")
を使用すると
すべてのシンボルに対して、tesseractは間違った数字を返します。
tesseract
が類似性の低いシンボルを省略するようにしきい値を設定できますか?
注:数字のみを認識するようにtesseract
を設定しているため、Oと0の間に混乱はありません。
tesseract FAQ ページで、数字のみを認識する方法が実際に回答されています。詳細についてはそのページを参照してください。ただし、バージョン3パッケージを使用している場合、構成ファイルは既にセットアップされています。コマンドラインで指定するだけです:
tesseract image.tif outputbase nobatch digits
しきい値については、どちらの意味かわかりません。入力が通常とは異なるフォントである場合は、入力のサンプルを使用して再トレーニングする可能性があります。別の方法は、tesseractのプルーニングしきい値を変更することです。両方のオプションはFAQにも記載されています。
Tesseract 3の場合、コマンドはより簡単ですtesseract imagename outputbase digits
による [〜#〜] faq [〜#〜] 。しかし、私にはあまりうまくいきません。
別のpsm
オプションを試して、-psm 6
は私の場合に最適です。
man tesseract
詳細については。
Tesseract 3の場合、FAQに従って構成ファイルを作成しようとします。
Init関数を呼び出す前、またはtessdata/configs/digits
というテキストファイルにこれを配置する前に:
tessedit_char_whitelist 0123456789
次に、コマンドtesseract imagename outputbase digits
を使用して動作します
0-9に一致させたい場合
tesseract myimage.png stdout -c tessedit_char_whitelist=0123456789
または、0-9にほぼ一致したいが、1つ以上の異なる文字を使用したい場合
tesseract myimage.png stdout -c tessedit_char_whitelist=01234ABCDE
私はそれを少し変えました(テスツーで)。たぶんそれは誰かに役立つでしょう。
したがって、最初にAPIを初期化する必要があります。
TessBaseAPI baseApi = new TessBaseAPI();
baseApi.init(datapath, language, ocrEngineMode);
次に、以下の変数を設定します
baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_LINE);
baseApi.setVariable(TessBaseAPI.VAR_CHAR_BLACKLIST, "!?@#$%&*()<>_-+=/:;'\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
baseApi.setVariable(TessBaseAPI.VAR_CHAR_WHITELIST, ".,0123456789");
baseApi.setVariable("classify_bln_numeric_mode", "1");
このようにして、エンジンは数字のみをチェックします。
Tesseractに数字のみを使用するように指示することができます。それが十分に正確でない場合、より良い結果を得るための最良のチャンスはトレーニングプロセスをトラフすることです: http://www.resolveradiologic.com/blog/2013/01/ 15/training-tesseract /
この機能はバージョン4ではサポートされていません。「-oem 0」を指定して-c tessedit_char_whitelist = 0123456789を使用すると、古いモデルに戻ります。
考えられる回避策:
@ amitdo で述べられているように