R で日本語 OCR (tesseract)

今回実際に必要になった例だが、大量の伝票画像を電子化 (文字化) して、そこから情報を得るようなケースを考えてみたい。
伝票のヘッダー・明細や、項目の位置などは DNN を使ってあらかた学習できるかもしれないが、問題なのは、そこから文字を読み取る作業だ。

MNIST のサンプルなど、文字認識はいまや使い古された画像認識の手法だが、アルファベットや数字とは違い、日本語の場合、漢字も含め相当な数の文字があるため、一から教師あり画像を準備してトレーニングするのは (実際のビジネスでは) 現実的ではないからだ。

そこで、今回、tesseract の R のパッケージを使うことを検討してみた。

使い方

使い方は簡単だ。(今回は、Mac または PC 上の環境を想定する。)
まず、R コンソールなどから、tesseract のパッケージ (バイナリ) をインストールする。

install.packages("tesseract")

既定のバイナリには英語のデータしか入っていないので、Github から日本語の Trained データを落とせば良いが注意がある。
現在 Github にある最新は tesseract 4 のデータだが、CRAN のリポジトリにある tesseract 1.4 パッケージ (R のパッケージ) は tesseract 3.0X がベースになっているので (つまり、tesseract 4 ではない)、tesseract 3.04 ベースの Trained データを落としてくる必要があるのだ。
このため、現在は、以下の通り Branch を指定してダウンロード (Clone) する。

git clone --branch 3.04.00 https://github.com/tesseract-ocr/tessdata.git

下図の通り、各言語ごとの .traineddata がダウンロードされるので、この中の jpn.traineddata を、tesseract のインストール・ディレクトリである %userprofile%\Documents\R\win-library\3.4\tesseract\tessdata にコピーする。

以上で準備完了だ。

今回は Windows や Mac 上でのセットアップ方法だが、本番運用などで Linux に環境を作る際には下記を参照してほしい。

https://github.com/ropensci/tesseract

プログラミング

今回は、下図のサンプル画像を読み込ませよう。

下記の通り、R を使って、日本語用の Trained データ (エンジン) をロードし、これで OCR を行えば良い。

library(tesseract)
tseng <- tesseract(language = "jpn")
text <- ocr(
  "C:\\tmp\\sample.png",
  engine = tseng)
cat(text)

実行結果は、一見、良い感じだ。(下図参照)
今回学習済みデータ (.traineddata) をダウンロードして使ったが、オープンソースなので元データのカスタマイズなども可能らしい。

が、しかし、、、

いろいろやってみたが、今回のような機械で出力した伝票のようなケース (大きさも均一で、一定精度以上のフォント画像) には使えるが、精度の問題で、フリーな手書きの認識などにはまだ耐えられない感じだ。

例えば、文字の大きさ (解像度) を変えると認識率が大きく変わってしまうので、上記の例も、画像サイズによっては誤った結果が返ってくるので注意が必要だ。
また、下図のような手書きのデータもひらがなの「すばる」をまったく認識してくれない状況だった。(解像度を変えると、このひらがなの箇所の結果がいろいろ変化する状況。。。)

日本語については、現状はまだ用途を限定して使う感じだ。(英語の精度はすこぶる良いが)

 

広告