LoginSignup
3
9

More than 3 years have passed since last update.

[iOS]Tesseract OCRで認識させた日本語の情報を取得する

Last updated at Posted at 2020-05-03

※ これは 2018/4/8,16 に個人ブログへ投稿した内容をまとめて転記したものです。

Google が出資しているという文字認識 API の iOS 用ラッパー、 Tesseract OCR iOS を使って文字認識をさせてみた備忘録です。
環境: macOS HighSierra, MacBook Pro 2016, XCode9.3

準備

本体のリポジトリはここ。ただし、 CocoaPods から読ませるので、直接 Clone しない。
CocoaPods が入ってない場合は、まず CocoaPods をインストール
終わったら下記の記事を参考にインストールしていく。
Xcode 7.0 + Swift2 でTesseract-OCR-iOSを使う(追記あり) - 今日も微速転進

動かしてみる

テストコードは公式 Wiki の方を使用した。シミュレータで動かす分にはこちらのほうがシンプルで良い。
上の記事でも言っているとおり、 BridgingHeader はいらないので惑わされないように1
Tesseract OCR iOS の中身は Tesseract3.03 らしく、最新2の学習データ (tessdata) は使えない。
Github で公開されている 3.04 か、 Wiki からそれ以前のものを選んで使う。

英語版 (eng.tessdata) は 3.04 そのままでも動くが、日本語版 (jpn.tessdata) は 3.04 を使うとエラーが出る。

read_params_file: parameter not found: allow_blob_division

これを解決するために、下記に従って学習データ内のパラメータを変更するのだが、このときビルドに使うソースは3.04を使うこと
4.00 だと加工後の tessdata を読み込んでくれない。

それから、 ./configure にパラメータをつけると私の環境では失敗してしまったので、パラメータをなくしたら上手くいった。
これはこの記事を読みながら事前に

brew link icu4c --force

しておいたからかも。

./autogen.sh
./configure
make
sudo make install
make training
sudo make training-install

なお、一度 4.00 をインストールしてしまったときは、 make したディレクトリで

sudo make uninstall
sudo make training-uninstall

したらアンインストールできた…気がする。

日本語を認識させてみる

日本語を認識させて結果の情報を取得してみました。

ソース

Swift 初心者なので、 API リファレンスを見ながら、 Xcode に言われるがまま書いたソースはこちら

結果

入力
20180416230659.png

出力
20180416234126.png

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

技術的なメモ

認識結果とその表示

let box = block.boundingBox(atImageOf: actualImageRect.size)

Tesseract では元画像のサイズを 1×1 としたときの相対位置で対象 (文字) の座標を認識しているようです。
なので、デバイスの画面に収まるように画像を自動レイアウトした場合は、レイアウト後のサイズを取得し、それを atImageOf に指定して変換してもらう必要があります。
レイアウト後の画像の実サイズを取得する Extension、UIImageView.ContentClippingRect は下記より。
How to find an aspect fit image’s size inside an image view

Extensionって最高ですね…!

文字のまとまり

let blocks = tesseract.recognizedBlocks(by: G8PageIteratorLevel.symbol)

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

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

paragraph: 段落
20180416234231.png

textline: 行
20180416234249.png

word: 語。やはり英語前提でスペース区切りで認識されていそう。
20180416234301.png

symbol: 文字
20180416234316.png


  1. リンクが通らなくて1時間くらい悩んだ。 

  2. 2018/4/8 時点で master は 4.00 

3
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
9