Tesseract OCR 3.05 のインストールと新機能
スポンサーリンク
2月16日付でオープンソースのOCRエンジンである Tesseract OCR の3.05がリリースされています。
2月中に記事にしようと思いつつ結局3月になってしまいました。
Ubuntu 17.04 の Feature Freeze に間に合わせたいという要望が出た結果、唐突にリリースされたようです*1。
実際のところ、Ubuntu 17.04 に採用されるのかどうかは不明です。
変更点
ざっくりいうと一番のメインはTSV出力。あとは諸々のバグ修正。HTML形式の出力*2についても改善しているようです。あとはバグ対応など。
以下、リリースノートからのざっくり訳。
- hOCR 出力 における改善(微調整)
- 新しい出力オプションとしてTSVを追加
- バージョン 3.04.00における
AnalyseLayout()
メソッドのABI非互換を修正 - text2image tool : すべてのOpenType リガチャが有効に(この機能にはPango 1.38以降が必要)
- Training tools :
assert
関数をtprintf()
とexit(1)
に置き換え - Cygwin 環境における互換性問題を修正
- マルチページのTIFFファイル処理の改善
- 埋め込みpdfフォントについての改善 (pdf.ttf)
- コマンドラインからOCRエンジンモード指定するオプションを追加(
--oem
オプションの追加)) tesseract
コマンドの、オプション指定形式を ‘-psm’ から ‘–psm’ (ハイフン2つ)に変更- 新しいC APIの追加と古いAPIの削除( for orientation and script detection )
- ビルドに必要なautoconf のバージョンを 2.59 に変更
- 不要なコードの削除
- 多数のコンパイラの警告に対処
- メモリリークおよびリソースリーク*3を修正
- ‘Cube’ OCR エンジンのバグ修正
- openCL 関連のバグを修正
- CMake によるビルドに対応
- Windows環境向けに CPPAN supportを追加
オプションの指定方法ですが、従来と同じく-psm
でもエラーにはなりません。将来的には--psm
のようにハイフン2つに移行するはず。
また、--psm
オプション*4に指定できる値が追加されています(詳細はtesseract -h
で確認)。
text2image
コマンドのmac環境におけるバグは修正されたかと思いきや、4系からのバックポートの余波でリグレッションしているので要注意*5。
各種ラッパーの対応状況
すんなり対応したのはJava/Android 系ぐらいで全然進んでいないようです。TSV出力を使わないのであれば、tesseract
コマンドを呼び出すタイプのライブラリは普通に動くと思います。
新機能
新機能であるTSV出力を試してみます。認識結果をタブ区切りテキストとして出力する機能という認識です。普通の文書よりは表とか本の目次のような画像データ向き。
$ tesseract -v tesseract 3.05.00 leptonica-1.74.1 libjpeg 8d : libpng 1.6.28 : libtiff 4.0.7 : zlib 1.2.8
手頃な画像が見つからないので適当な画像で試します。
電子書籍版の『[改訂第7版]LaTeX2ε美文書作成入門』のp.225の表の一部を切り抜いたもの(実際は幅640pxに拡大)。
実際にtesseract
コマンドで試すには、コマンドラインの末尾にtsv
を追加して実行。
$ tesseract -l eng resize_table.tiff stdout tsv 2> /dev/null level page_num block_num par_num line_num word_num left top width height conf text 1 1 0 0 0 0 0 0 640 146 -1 2 1 1 0 0 0 55 11 30 119 -1 3 1 1 1 0 0 55 11 30 119 -1 4 1 1 1 1 0 55 11 30 16 -1 5 1 1 1 1 1 55 11 30 16 79 pbk 4 1 1 1 2 0 55 45 30 16 -1 5 1 1 1 2 1 55 45 30 16 79 pbk 4 1 1 1 3 0 55 79 30 17 -1 5 1 1 1 3 1 55 79 30 17 78 phk 4 1 1 1 4 0 55 113 30 17 -1 5 1 1 1 4 1 55 113 30 17 79 pbk 2 1 2 0 0 0 220 45 18 12 -1 3 1 2 1 0 0 220 45 18 12 -1 4 1 2 1 1 0 220 45 18 12 -1 5 1 2 1 1 1 220 45 18 12 66 it 2 1 3 0 0 0 220 113 18 12 -1 3 1 3 1 0 0 220 113 18 12 -1 4 1 3 1 1 0 220 113 18 12 -1 5 1 3 1 1 1 220 113 18 12 79 it 2 1 4 0 0 0 303 8 209 118 -1 3 1 4 1 0 0 303 8 209 118 -1 4 1 4 1 1 0 303 8 147 20 -1 5 1 4 1 1 1 303 8 97 15 78 Bookman— 5 1 4 1 1 2 402 8 48 20 74 Light 4 1 4 1 2 0 303 43 186 18 -1 5 1 4 1 2 1 303 43 186 18 75 Bookman—Lighfltalic 4 1 4 1 3 0 303 76 155 15 -1 5 1 4 1 3 1 303 76 155 15 67 Baum-Dem! 4 1 4 1 4 0 303 110 209 16 -1 5 1 4 1 4 1 303 110 209 16 72 Boahmul-Dzmfltaflc
ちょっと認識ミスト取りこぼしが発生してますが、一列目の一行目のセルから順に出力されています(最後の列が認識したテキスト)。 拡大倍率としきい値処理をちゃんとやればちゃんと認識してくれるはずですが、とりあえず確かこんな感じだったはず。
それぞれの列ですが、level
とpar_num
というのはよくわかりませんが、ヘッダのconf
は確からしさ、あとはそのまま。
TSV出力させるために必要なのはtessedit_create_tsv
というパラメータなので、さらに挙動をコントロールすることも可能です。
上記のコマンドラインで指定しているtsv
の実態は、tessdata/configs
ディレクトリ配下にあるtsv
という設定ファイルです。
$ cat /usr/local/share/tessdata/configs/tsv tessedit_create_tsv 1 tessedit_pageseg_mode 1
ある程度複雑なレイアウトの画像からテキストを認識する場合に有効だと思います。
各種OS向けパッケージ
Linux
Arch Linux はすでにパッケージが提供されています。
githubのリリースページで配布されているアーカイブは以前と異なり、configure
スクリプトが含まれないので./autogen.sh
を実行する必要がある点に注意。もしくはcmake
を使うことも可能。
Ubuntu 17.04 に採用されるのかと思いきや、17.04 Beta 1 の時点では3.04系のままのようです。
Arch Linux
記憶違いでなければ新バージョンリリースの翌日だか翌々日にはパッケージが提供されていたはず。
$ sudo paceman -S tesseract $ sudo paceman -S tesseract-data-{eng,jpn}
他の言語についてはpacman -Ss tesseract-data
で検索してインストール。なお、向き判定のosd.traineddata
ファイルは(Arch Linux のパッケージの場合)、本体と一緒に/usr/share/tessdata
にインストールされる。
Ubuntu 16.04
バイナリパッケージは提供されていないのでソースからインストール。 Leptonica についてはバージョン 1.74系が必要です。
まずは必要なライブラリを一式インストールする。
sudo apt install autoconf automake libtool sudo apt install autoconf-archive sudo apt install pkg-config sudo apt install libpng12-dev sudo apt install libjpeg8-dev sudo apt install libtiff5-dev sudo apt install zlib1g-dev sudo apt install libleptonica-dev
学習用のツールが必要なら下記もインストールしておく。
sudo apt install libicu-dev sudo apt install libpango1.0-dev sudo apt install libcairo2-dev
せっかくなのでcmake
を使いたいところだが、CMakeLists.txt
というファイルにinstall
ターゲット用の記述がないのでmake install
できない……。
Leptonica のインストール
Ubuntu 17.04用のパッケージをビルドし直すのもありかもしれないが、上書きしてほしくはないのでソースコードからビルドする。
Releases · DanBloomberg/leptonica · GitHub
$ tar zxf leptonica-1.74.1.tar.gz $ cd leptonica-1.74.1/
ソースアーカイブを展開すると、`autobuild`というスクリプトがあるのでまずこいつを実行。
$ ./autobuild $ ./configure $ make -j2 $ sudo make install $ sudo ldconfig
/usr/local
配下にインストールされるはず。
Tesseract のインストール
$ tar zxf tesseract-3.05.00.tar.gz $ cd tesseract-3.05.00.tar.gz
以前は不要だったような気がするが、./autogen.sh
を実行してconfigure
スクリプトを生成。
$ ./autogen.sh $ LDFLAGS="-L/usr/local/lib" CFLAGS="-I/usr/local/include" ./configure --with-training-tools $ make $ sudo make install $ sudo ldconfig
学習用のツールが不要な場合はconfigure
スクリプトの、--with-training-tools
は必要ない。
$ tesseract --version tesseract 3.05.00 leptonica-1.74.1 libjpeg 8d (libjpeg-turbo 1.4.2) : libpng 1.2.54 : libtiff 4.0.6 : zlib 1.2.8
macOS
Homebrew はプルリク投げてみた結果、コメントを削除してマージされた。MacPports は3.04のまま。
以下はHomebrew の場合。
$ brew update $ brew install tesseract --with-training-tools
既存の学習済みの言語データしか使わないのであれば--with-training-tools
は不要。
途中でglib
がらみでエラーになる場合は、表示されるメッセージの通りにする。
Error: You must `brew link glib` before tesseract can be installed
以下のようにbrew link
コマンドを実行してから上記のコマンドを再度実行する。
$ brew link glib
標準では英語とテキストの方向判別データしかダウンロードされないので、/usr/local/share/tessdata
配下にそれぞれの言語別のデータファイルを(3.04用)ダウンロードしてコピーする(後述)。
このパッケージではtesstrain.sh
関連ファイルはインストールされないので必要であればソースアーカイブから適当な場所にコピーする。
バグ対策
mac環境固有のバグ対策。
text2image
を実行する、あるいはtesstrain.sh
を使う場合は、環境変数PANGOCAIRO_BACKEND
に値としてfc
をセットする。
export
コマンドでもいいし、コマンドの先頭にPANGOCAIRO_BACKEND=fc
を付加していい。
参考:
$ PANGOCAIRO_BACKEND=fc ./training/tesstrain.sh --lang jpn --langdata_dir ../github_tesseract/langdata/ --training_text ../github_tesseract/langdata/jpn/jpn.training_text --fonts_dir /Library/Fonts/
それぞれのファイルのパスは環境に応じて修正。
なお、mac環境ではtesstrain.sh
をエディタで編集してmktemp
をgmktemp
に置き換える必要あり。
Windows
公式ページからリンクされているのは今のところアルファ版であるバージョン4.0になっています。
ドイツの大学の方がビルドしたWindows 向けの開発版バイナリが以下より入手できるようです(3.05devと4.0dev)。ご利用は自己責任で。
“training tool"に関してはビルドした張本人がWindowsバイナリを使用していないようなので他の環境で。
Cygwin 版の方がトータルで見るとまともかもしれません。
それぞれの言語別のデータファイル
パッケージ管理ツール経由で取得できる場合はそちらから入手。Homebrew の場合は全部まとめてダウンロードするか、英語と向き判別用のデータだけの2択…。
[2017/03/11 追記]
公式ページに各バージョン(3.03rcを除く)向けのダウンロード用のリンクが記載されたページがあるので必要ならそこからダウンロード。
Data Files · tesseract-ocr/tesseract Wiki · GitHub
[追記ここまで]
GitHub - tesseract-ocr/tessdata at 3.04.00
リポジトリにある最新版は4.00用のファイルなので、3.04.00
タグのツリーから取得する。
あるいは、言語コードが明らかな場合はwget
でURL直打ち。
$ wget https://github.com/tesseract-ocr/tessdata/raw/3.04.00/jpn.traineddata
jpn
の部分を必要な言語に置き換えれば他の言語も取得できます。
ソースからビルドした場合は、/usr/local/share/tessdata
にコピー。それ以外の場合はおそらく/usr/share/tessdata
*6。
もしくは、環境変数 TESSDATA_PREFIX
にtessdata
ディレクトリの一つ上の階層のディレクトリを指定する。
まとめ
もう少しまともな検証用の画像を用意してみたいと思いますがひとまずここまで。
認識精度については3.04系と比較して特に改善していない印象です。バージョン4系に期待しましょうとしか。
何はともあれiOS向けのラッパーの安定板が新規リリースされて欲しいと思う今日この頃です。
それではまた。