読者です 読者をやめる 読者になる 読者になる

Tesseract OCR 3.05 のインストールと新機能

Mac OCR tesseract Arch Linux Ubuntu

2月16日付でオープンソースOCRエンジンである Tesseract OCR の3.05がリリースされています。

2月中に記事にしようと思いつつ結局3月になってしまいました。

github.com

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

手頃な画像が見つからないので適当な画像で試します。

f:id:atuyosi:20170308033249p:plain

電子書籍版の『[改訂第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

ちょっと認識ミスト取りこぼしが発生してますが、一列目の一行目のセルから順に出力されています(最後の列が認識したテキスト)。 拡大倍率としきい値処理をちゃんとやればちゃんと認識してくれるはずですが、とりあえず確かこんな感じだったはず。

それぞれの列ですが、levelpar_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用のパッケージをビルドし直すのもありかもしれないが、上書きしてほしくはないのでソースコードからビルドする。

ソースアーカイブgithubから入手する。

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をエディタで編集してmktempgmktempに置き換える必要あり。

Windows

公式ページからリンクされているのは今のところアルファ版であるバージョン4.0になっています。

ドイツの大学の方がビルドしたWindows 向けの開発版バイナリが以下より入手できるようです(3.05devと4.0dev)。ご利用は自己責任で。

github.com

“training tool"に関してはビルドした張本人がWindowsバイナリを使用していないようなので他の環境で。

Cygwin 版の方がトータルで見るとまともかもしれません。

Cygwin Package Search

それぞれの言語別のデータファイル

パッケージ管理ツール経由で取得できる場合はそちらから入手。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タグのツリーから取得する。

f:id:atuyosi:20170307165236p:plain

あるいは、言語コードが明らかな場合は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_PREFIXtessdataディレクトリの一つ上の階層のディレクトリを指定する。

まとめ

もう少しまともな検証用の画像を用意してみたいと思いますがひとまずここまで。

認識精度については3.04系と比較して特に改善していない印象です。バージョン4系に期待しましょうとしか。


何はともあれiOS向けのラッパーの安定板が新規リリースされて欲しいと思う今日この頃です。

それではまた。

*1:非互換云々とメンテナの労力を問題にしていたのは一体なんだったのか

*2:使っていないのでよくわかりません

*3:ファイルハンドラなどの解放もれ

*4: Page Segmentation mode

*5:環境変数ひとつで回避可能

*6:Ubuntuの公式パッケージは違う配置だったはず('/usr/share/tesseract-ocr/tessdata/‘)