Tesseract OCR iOSで認識させた文字の情報を取得する

前回の続きです。
ndanah.hatenablog.com

日本語の認識まではできたので、認識結果の情報を取得してみました。
APIリファレンスをみつつ、全てはXcodeの導きのままに…

ソース


結果

入力
f:id:ndanah:20180416230659p:plain

出力
f:id:ndanah:20180416234126p:plain

あえてちょっと斜めにしてみましたが、いい感じに認識していますね!

技術的なメモ

認識結果とその表示
let box = block.boundingBox(atImageOf: actualImageRect.size)

Tesseractでは元画像のサイズを1×1としたときの相対位置で対象(文字)の座標を認識しているようです。
なので、デバイスの画面に収まるように画像を自動レイアウトした場合は、レイアウト後のサイズを取得し、それをatImageOfに指定して変換してもらう必要があります。
レイアウト後の画像の実サイズを取得するExtension、UIImageView.ContentClippingRectは下記より。
www.hackingwithswift.com
Extensionって最高ですね…!初めてSwiftって便利だと思った。

文字のまとまり
let blocks = tesseract.recognizedBlocks(by: G8PageIteratorLevel.symbol)

G8PageIteratorLevelで認識結果のまとまりの大きさを指定できます。
意味深な定数名が付いていますが、もちろん日本語の形態素解析をして云々なんてしていないので、一通り試してみました。

block:ブロック。段落を複数認識したら、そのまとまりということかな?
f:id:ndanah:20180416234131p:plain

paragraph:段落
f:id:ndanah:20180416234231p:plain

textline:行
f:id:ndanah:20180416234249p:plain

word:語。やはり英語前提でスペース区切りで認識されていそう。
f:id:ndanah:20180416234301p:plain

symbol:文字
f:id:ndanah:20180416234316p:plain