トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

LinuxでのTesseract/OCRopusのインストール

キーワード
最終更新時間:2009年01月16日 01時39分43秒

Linux(Fedora 9)でのTesseract/OCRopusのインストール手順。リリース版ではなく、Subversionから最新のソースを取得してインストールする。基本的にはInstall (Subversion)(OCRopus)にあるようにすればよい。なお、CentOS 5.2(gcc-4.1)では手順通りに簡単に作業が進むが、Fedora 9(gcc-4.3)ではかなりたくさんのパッチ当て作業が必要で、大変。

必要なライブラリのインストール

Tesseract/OCRopusのインストールに必要なライブラリ類をインストールする。まずはパッケージ管理システム(yum)でインストールできるものを。

  • libjpeg
  • libjpeg-devel
  • libpng
  • libpng-devel
  • libtiff
  • libtiff-devel
  • SDL
  • SDL-devel
  • SDL_image
  • SDL_gfx
  • aspell
  • apell-*(aspell用辞書。OCRで必要な言語のぶんだけ入れてもいい)

といったところをインストールする。

Tesseractのインストール

基本的にはTesseractSvnInstallationにあるようにすればよい。

適当なディレクトリ(/usr/local/src)で

svn checkout http://tesseract-ocr.googlecode.com/svn/trunk/ tesseract-ocr
cd tesseract-ocr
./runautoconf
./configure
make
make install

といったようにしてインストールする。configureに特にオプションは必要ないだろう。

 gcc-4.3でのパッチ当て作業

Fails to build with gcc-4.3 - Issue 90 - tesseract-ocrSome tesseract's staff for Linuxにあるように、Fedora 9などで採用されているgcc-4.3では以下のようなエラーが出てコンパイルがうまくいかない。

make[3]: ディレクトリ `/usr/local/src/tesseract-ocr/viewer' に入ります
g++ -DHAVE_CONFIG_H -I. -I..     -g -O2 -MT scrollview.o -MD -MP -MF .de ps/scrollview.Tpo -c -o scrollview.o scrollview.cpp
scrollview.cpp: In member function ‘SVEvent* SVEvent::copy()’:
scrollview.cpp:62: error: ‘strlen’ was not declared in this scope
scrollview.cpp:63: error: ‘strncpy’ was not declared in this scope
scrollview.cpp: In static member function ‘static void* ScrollView::MessageReceiver(void*)’:
scrollview.cpp:89: error: ‘strlen’ was not declared in this scope
scrollview.cpp:107: error: ‘strncpy’ was not declared in this scope
scrollview.cpp: In static member function ‘static void* ScrollView::StartEventHandler(void*)’:
scrollview.cpp:302: error: ‘INT_MAX’ was not declared in this scope
scrollview.cpp: In member function ‘char* ScrollView::ShowInputDialog(const char*)’:
scrollview.cpp:689: error: ‘strlen’ was not declared in this scope
scrollview.cpp:690: error: ‘strncpy’ was not declared in this scope
scrollview.cpp: In member function ‘char* ScrollView::AddEscapeChars(const char*)’:
scrollview.cpp:795: error: ‘strchr’ was not declared in this scope
scrollview.cpp:800: error: ‘strncpy’ was not declared in this scope
scrollview.cpp:807: error: ‘strlen’ was not declared in this scope
scrollview.cpp:807: error: ‘strncpy’ was not declared in this scope
make[3]: *** [scrollview.o] エラー 1
make[3]: ディレクトリ `/usr/local/src/tesseract-ocr/viewer' から出ます
make[2]: *** [all-recursive] エラー 1
make[2]: ディレクトリ `/usr/local/src/tesseract-ocr/viewer' から出ます
make[1]: *** [all-recursive] エラー 1
make[1]: ディレクトリ `/usr/local/src/tesseract-ocr' から出ます
make: *** [all] エラー 2

これを解決するには、上記Issueで公開されているパッチを当てる(手作業でも書き換えられる程度)。

--- a/viewer/svmnode.cpp
+++ b/viewer/svmnode.cpp
@@ -27,6 +27,7 @@
 #include "svmnode.h"
 
 #include <iostream>
+#include <cstring>
 
 #include "scrollview.h"
 
--- a/viewer/svutil.cpp
+++ b/viewer/svutil.cpp
@@ -38,6 +38,8 @@
 
 #include <iostream>
 #include <string>
+#include <cstring>
+#include <cstdlib>
 
 const int kBufferSize = 65536;
 const int kMaxMsgSize = 4096;
--- a/viewer/scrollview.cpp
+++ b/viewer/scrollview.cpp
@@ -35,6 +35,8 @@
 #include <algorithm>
 #include <vector>
 #include <string>
+#include <cstring>
+#include <climits>
 
 #include "svutil.h"

実際に、2008年9月18日にダウンロードしたリビジョン187のソースについて、上記のパッチを当てることでFedora 9でのコンパイルができた。

Editline(libedit)ライブラリのインストール

なんかわからないけど必要らしいので。http://www.thrysoee.dk/editline/にある最新のlibedit-200xxx.tar.gzをダウンロードし、適当なディレクトリに置き、以下のようにする。

tar xzvf libedit-20080712-2.11.tar.gz
cd libedit-20080712-2.11
./configure
make
make install

OCRopus-externalのインストール

OCRopusの拡張ライブラリを先にインストールする。適当なディレクトリで以下のようにする。

svn checkout http://ocropus.googlecode.com/svn/external ocropus-external
cd ocropus-external
ls
./   .svn/  EXTERNAL/     leptonlib-ocropus/  tolua-ocropus/
../  DIST/  fst-ocropus/  lua-ocropus/

このような状態で、EXTERNALとDIST以外のディレクトリでconfigure, make, make installをおこなう。

 各拡張ライブラリへのgcc-4.3用のパッチ当て

OCRopus-externalの各ライブラリでも、上のTesseractの場合と同様に、gcc-4.3に関するエラーが出る。パッチはないようだが、先のものと、無関係な他のプログラムのgcc-4.3用のパッチを見るに、やはり

#include <cstring>
#include <cstdlib>

といったヘッダをincludeするようにしないといけないようだ。エラーが出るディレクトリ内の全てのソースに上の2行を追加する。

OCRopusのインストール

OCRopusは、jamという支援ツールを使ってコンパイルするようなので、事前にyumなどでjamをインストールするか、jamそのものをコンパイルしてインストールしておく。

まず、OCRopusの最新のソースをSubversionでダウンロードする。

$ svn co http://ocropus.googlecode.com/svn/trunk/ ocropus

そしてconfigureを実行する。

$ cd ocropus
$ ./configure

すると、以下のようなメッセージが表示される。ようは、「あとはjam使ってね。コンパイル後の動作確認は下のコマンドで」というもの。

OK! Now you can build OCRopus by typing "jam".
If compilation will be successful, you can try this:
ocrocmd/ocrocmd data/pages/alice_1.png | tee output.html

jamでコンパイルする。

$ jam

すると自動的にコンパイルがおこなわれるはず。完了したら、メッセージどおり動作テストをしてみる。

$ ocrocmd/ocrocmd data/pages/alice_1.png | tee output.html

これで問題がなければ、OCRopusをインストールする。

$ jam install

OCRopusの使いかた

上の動作テストではocrocmdを使っているが、筆者が確認したバージョンではパスの指定などが異なり正しく動作しないので、以下のようなコマンドで操作する。

$ ocroscript /usr/local/share/ocropus/scripts/rec-tess.lua hoge.png |tee ocropus_output.html

上のコマンドを一般化して書くと、

$ ocroscriptコマンド 設定スクリプト OCRしたい画像

となる。使いかたについて詳しくは、OCRopus Wikiを参照されたい。

NHocrについて

Tesseract / OCRopusではデフォルトでは日本語の認識ができない。筆者は日本語を認識させるための学習を試みたことがあるが、けっこうホネである。

NHocrは、東北大の後藤英昭先生が開発している、フリーの日本語OCRである。現在では、OCRopusとNHocrを組み合わせて日本語の認識ができるWebサービスが運営されている。このサービスには、cURLなどのコマンドラインWebクライアントを用いて

$ curl -F userfile=@/path/to/file/file.bmp -F outputformat=txt -F outputencoding=utf-8 http://appsv.ocrgrid.org/cgi-bin/weocr/nhocropus.cgi

などとして認識結果を受けとることも可能なので、自作アプリケーションに組み込むことも容易である。