AndroidでTesseractを使用する その4 文字認識編2

文字認識編では、getUTF8Text()関数によって認識した文字列が取り出せると書きましたが、この文字列は半角スペースによって語が区切られています。しかし、ノイズが乗ってしまった場合であるとか、日本語のような単語の区切りがない語を扱う場合には、単純に半角スペースで区切ったものと、認識範囲を取得するで使用したgetBoxRects()関数による矩形と、一対一で対応させることができなくなります。

そこで、getUTF8Text()関数ではない、他の関数を使うことになります。

tess-twoには、ResultIteratorというクラスが用意されています。これはその名前の通り、認識結果を取り出すイテレータのクラスです。では、このクラスを使ったコードの例を下に挙げてみます。

2行目でlevelという変数に何かを与えていますが、これは、イテレーションの単位です。RIL_WORDなら語単位、RIL_TEXTLINEなら行単位、RIL_SYMBOLなら文字単位となります。

あとは、イテレータを回すだけですが、hasNextにあたる関数がないので、itr.next(level)の値がnullになるまで、do-whileで回すようにしました。なお、next関数によってイテレータのヘッドが1つ動くので、ループの終了判定は最後に持って行くと綺麗に書くことが出来ます。

さてこれで、認識した語と認識した位置を取得することが出来ました。最後に、文単位で矩形を分けるコードを書いてみたいと思います。