getUTF8Text関数を実行した後に、認識結果の詳細データを取得することができます。
今回は、どの範囲を文字として認識したかを取得します。
tess-twoでは、始めに文字が含まれていそうな行を認識し、その次に、その行にどのような語が含まれているかを認識しているようです。
文字の含まれていそうな行の範囲、もしくは、文字が含まれていそうな語の範囲を取得するには、getTextlines()関数、もしくは、getWords()関数を用います。ただし、これらの関数の戻り値はPixa型というtess-two独自のクラスなので、getBoxRects()関数によって、Rectのリストにするほうが便利かもしれません。
1 2 3 4 5 6 7 8 9 10 |
// Init modules TessBaseAPI tessOCRAPI = new TessBaseAPI(); tessOCRAPI.init(storagePath+"/tess-two/", "eng"); // Set Image tessOCRAPI.setImage(bitmap); String recognizedText = tessOCRAPI.getUTF8Text(); List<Rect> rectTextLines = tessOCRAPI.getTextlines().getBoxRects(); List<Rect> rectWords = tessOCRAPI.getWords().getBoxRects(); |
これによって取り出された範囲を、drawRect関数などを使用して視覚化したものが次の結果です。
線で囲まれているのが行の範囲、背景色の有る囲みが語の範囲です。このように表示すれば、どこが認識されたか分かりやすいですね。さて、範囲は分かりましたので、次は、その範囲にどの文字が含まれているかを、ちゃんと取得する方法を模索したいと思います。