
今日は、Androidアプリケーションにテキスト認識オプション(OCR)を追加する方法を示します。
私たちのテストプロジェクトは、1つのアクティビティであり、その中に私も表彰されました。 合計アカウントの合計は200行のコードのみです。
重要な機能-OCRオプションはオフラインで動作します。 OCRは、.apkを約17MB増やします。
Tesseractはおそらく最も人気のある高品質の無料OCRライブラリであり、まだ更新されています。 Tesseractの作成者はGoogle開発者です。
TesseractはCで書かれていますが、tess-twoプロジェクトがあります。これは、TesseractをAndroidプラットフォームで使用するための既製のツールです。 ネイティブにコンパイルされたTesseractクラスにアクセスするためのJava APIを提供します。 あなたがする必要があるのは、あなたのbuild.gradleに tess-twoを追加することです:
dependencies { compile 'com.rmtheis:tess-two:5.4.1' }
さらに、tesseractには.traineddataファイルが必要です。 このファイルには、効果的な認識のためのデータ、単語の辞書などが含まれています。 ファイルは言語ごとに一意です。 ここで 、任意の言語の.traineddataをダウンロードできます。 独自の.traineddataファイルを作成することもできます。 これは、特定のテキストを認識する場合、または考えられる単語の独自の辞書を持っている場合に役立ちます。 理論的には、カスタマイズにより認識の品質が向上します。
Javaコードに移動する前に、 プロジェクトの英語のeng.traideddataファイルを必ず配置してください。 たとえば、 src \ main \ asset \ tessdataにあります。
認識を開始する前にtesseractを構成する必要があります。 これを行うには、2つのパラメーターを構成メソッド(init)に渡します-Androidデバイスのtessdataフォルダーへのパスと言語( "eng")。 .traideddataファイルではなく、tessdataフォルダーへのパスに注意してください。フォルダーの名前が異なる場合、コードは機能しません。 明らかに、このフォルダーを外部ストレージに作成し、eng.traideddataをそこに配置する必要があります。
私はビットマップから認識されたテキストを受け取るメソッドをもたらします:
import com.googlecode.tesseract.android.TessBaseAPI; //... private String extractText(Bitmap bitmap) throws Exception { TessBaseAPI tessBaseApi = new TessBaseAPI(); tessBaseApi.init(DATA_PATH, "eng"); tessBaseApi.setImage(bitmap); String extractedText = tessBaseApi.getUTF8Text(); tessBaseApi.end(); return extractedText; }
はい、非常に簡単です。
結果

推奨事項
1.サーバー側でOCRを実行することをお勧めします。 Javaプロジェクトがある場合-tess4j-TesseractのJNAラッパーを使用します。 認識品質は20〜30%高くなります。 バッテリーを消耗せず、.apkに負担をかけません。
2.認識する前に画像の前処理を使用します。 最も簡単な方法は、認識領域を減らすために、ユーザーにテキストのあるブロックを選択させることです。 これには、歪みの均等化、ノイズ除去、色補正が含まれます。
ソースコードはこちらから入手できます 。
以上です。