こんにちは、アルバイトの上野です。今回はOCRを使って画像中のテキストを文字として取り出すtesseractというオープンソースについて紹介します。

インストール

まずはbrewでインストールします

$ brew install tesseract

次のコマンドで対応している言語を確認できます

$ tesseract --list-langs 
List of available languages (3):
eng
osd
snum

日本語が入ってないので日本語の学習済みモデルを入れる必要があります。

公式ドキュメントによるとGithub https://github.com/tesseract-ocr/tessdata_best から jpn.traineddataとjpn_vert.traineddataをダウンロードする必要があるそうです。

ただし、実はこの学習済みモデルよりUbuntuのapt-getコマンドでインストールするjpn.traineddataの方が精度がいいです。

Macではapt-getは使えないので直接https://packages.ubuntu.com/focal/tesseract-ocr-jpnの「tesseract-lang ソースパッケージをダウンロード:」から圧縮ファイルをダウンロードして展開するとjpn.traineddataとjpn_vert.traineddataが手に入ります。

学習済みモデルが手に入ったら、brew listでtesseractに関連するパスを表示します

$ brew list tesseract
/usr/local/Cellar/tesseract/4.1.1/bin/tesseract
/usr/local/Cellar/tesseract/4.1.1/include/tesseract/ (19 files)
/usr/local/Cellar/tesseract/4.1.1/lib/libtesseract.4.dylib
/usr/local/Cellar/tesseract/4.1.1/lib/pkgconfig/tesseract.pc
/usr/local/Cellar/tesseract/4.1.1/lib/ (2 other files)
/usr/local/Cellar/tesseract/4.1.1/share/tessdata/ (38 files) 

ここから学習済みモデルのディレクトリを探します。この中だと最後のtessdataがそれに該当。

$ ls /usr/local/Cellar/tesseract/4.1.1/share/tessdata
configs			osd.traineddata		tessconfigs
eng.traineddata		pdf.ttf                 snum.traineddata

中を見るとtraineddataと拡張子が書かれたファイルがあるのがわかります。これが学習済みモデルのファイルです。ここに先ほどダウンロードしたjpn.traineddataとjpn_vert.traineddataを入れます。

$ tesseract --list-langs
List of available languages (4):
eng
jpn
osd
snum

対応言語にjpnが追加されてるのがわかります。

Tesseractの使い方

日本語判定にはオプション-lでjpnを指定し、次のコマンドで実行できます。

$ tesseract input_file output_file -l jpn

output_fileに”-“(ハイフン)を入れると標準出力に表示されます

今回は次の画像をtesseractで文字認識してみます

まずは、通常の方法でGithub https://github.com/tesseract-ocr/tessdata_best からダウンロードしたjpn.traineddataを入れてやってみます。

$ tesseract image.png - -l jpn 

Tesseract (テッ セラ クト ) は 光学 文字 認識 の エン ジン 。 名 称 の Tesseract と は 四 次 元 超 立 方 体 の 意 で ある 。

多様 な オペ レー ティ ング シス テム 上 で 動作 する オー プン ソー スソ フト ウェ ア で あり 、Apache License 2.0 の 下 で 配布 され て いる 。 文
字 認 識 を 行う ライ ブラ リ と 、 そ れ を 用 いた コマ ンド ライ ン イ ンタ ー フ ェ イ ス を 持つ 。 バ ー ジ ョ ン 4.0 か ら は 、 従 来 の 認識 エン ジン に 加
え 、LSTM ベ ー ス の ニュ ー ラ ルネ ットワーク に よる 認識 エン ジン が 搭載 され て いる 。

次にUbuntuのパッケージサイトhttps://packages.ubuntu.com/focal/tesseract-ocr-jpnからダウンロードしたjpn.traineddataを入れて同じコマンドを打ちます。

こちらは無駄な空白や改行が入ってないことがわかります。

$ tesseract image.png - -l jpn

Tesseract (テッセラクト) は光学文字認識のエンジン。 名称のTesseractとは四次元超立方体の意である。

多様なオペレーティングシステム上で動作するオープンソースソフトウェアであり、Apache License 2.0 の下で配布されている。 文
字認識を行うライブラリと、それを用いたコマンドラインインターフェイスを持つ。バージョン4.0からは、従来の認識エンジンに加
え、LSTMベースのニューラルネットワークによる認識エンジンが搭載されている。
Pocket