Python から OCRソフト Tesseract を利用する
Python から Tesseract を利用するための python モジュールが以下のサイトにおいて公開されている。
python wrapper class for tesseract OCR (Linux & Mac & Cygwin)
http://code.google.com/p/python-tesseract/
プログラム例はこんなに短い!
# -*- coding: utf-8 -*- #from __future__ import print_function import tesseract api = tesseract.TessBaseAPI() api.SetOutputName("outputName"); api.Init(".","eng",tesseract.OEM_DEFAULT) api.SetPageSegMode(tesseract.PSM_AUTO) mImgFile = "eurotext.jpg" mBuffer=open(mImgFile).read() result = tesseract.ProcessPagesBuffer(mBuffer,len(mBuffer),api) print "result(ProcessPagesBuffer)=",result
Tesseract のバージョン
tesseract 3.00 の環境において python-tesseract モジュールを build すると,「publictypes.h (だったかな?) が見つからない」と怒られる。このファイルは tesseract 3.01 (まだリリース前?)に含まれているため,svn を用いて取得しなければならない。具体的には,http://code.google.com/p/tesseract-ocr/wiki/ReadMe にて説明されているように,以下のコマンドで取ってこれる。
svn checkout http://tesseract-ocr.googlecode.com/svn/trunk/ tesseract-ocr-read-only
また,以下に述べるように,Ubuntu ではレポジトリ "ppa:nutznboltz/tesseract" を設定することで,3.01 相当の tesseract を入手可能なようだ。
python-tesseract モジュールのインストール
python-tesseract のコンパイル方法を説明しているページ http://code.google.com/p/python-tesseract/wiki/HowToCompilePythonTesseract に沿ってインストール作業を進める。
以下はインストール時のログである。
最初に,パッケージを利用した tesseract のインストール:
$ sudo add-apt-repository ppa:nutznboltz/tesseract $ sudo apt-get update $ sudo apt-get install tesseract-ocr-dev leptonica python-all-dev swig ........................ ........................ ........................ python-all-dev (2.7.1-0ubuntu5) を設定しています ... leptonica (1.68-1~ppa3~natty1) を設定しています ... tesseract-ocr-eng (3.0.0+svn581-1~ppa2~natty1) を設定しています ... tesseract-ocr (3.0.0+svn581-1~ppa2~natty1) を設定しています ... tesseract-ocr-dev (3.0.0+svn581-1~ppa2~natty1) を設定しています ...
上記で明らかなように,言語データは "english" のみインストールされる "jpn (Japan)" 言語データは 3.00のソースから引っ張ってくればよいのかな?(未調査)
(忘れないようにメモ) leptonica は,tesseract にて JPG や PNG を扱えるようにするために必要なソフトウェアである。
次に python-tesseract のコンパイルとインストール:
$ python config.py $ python setup.py clean include path=/usr/include Current Version : 0.6 running clean $ python setup.py build include path=/usr/include Current Version : 0.6 running build running build_py file tesseract.py (for module tesseract) not found file tesseract.py (for module tesseract) not found running build_ext building '_tesseract' extension swigging tesseract.i to tesseract_wrap.cpp swig -python -c++ -I/usr/include/tesseract -I/usr/include -I/usr/include/leptonica -o tesseract_wrap.cpp tesseract.i /usr/include/tesseract/publictypes.h:73: Warning(462): Unable to set dimensionless array variable creating build creating build/temp.linux-i686-2.7 gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I. -I/usr/include/tesseract -I/usr/include -I/usr/include/leptonica -I/usr/include/python2.7 -c tesseract_wrap.cpp -o build/temp.linux-i686-2.7/tesseract_wrap.o cc1plus: warning: command line option "-Wstrict-prototypes" is valid for Ada/C/ObjC but not for C++ gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I. -I/usr/include/tesseract -I/usr/include -I/usr/include/leptonica -I/usr/include/python2.7 -c main_dummy.cpp -o build/temp.linux-i686-2.7/main_dummy.o cc1plus: warning: command line option "-Wstrict-prototypes" is valid for Ada/C/ObjC but not for C++ main_dummy.cpp: In function ‘int readBuf(const char*, l_uint8*)’: main_dummy.cpp:51:21: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I. -I/usr/include/tesseract -I/usr/include -I/usr/include/leptonica -I/usr/include/python2.7 -c fmemopen.c -o build/temp.linux-i686-2.7/fmemopen.o creating build/lib.linux-i686-2.7 g++ -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions build/temp.linux-i686-2.7/tesseract_wrap.o build/temp.linux-i686-2.7/main_dummy.o build/temp.linux-i686-2.7/fmemopen.o -lstdc++ -ltesseract_api -llept -o build/lib.linux-i686-2.7/_tesseract.so $ $ sudo python setup.py install include path=/usr/include Current Version : 0.6 running install running build running build_py copying tesseract.py -> build/lib.linux-i686-2.7 running build_ext running install_lib copying build/lib.linux-i686-2.7/tesseract.py -> /usr/local/lib/python2.7/dist-packages copying build/lib.linux-i686-2.7/_tesseract.so -> /usr/local/lib/python2.7/dist-packages byte-compiling /usr/local/lib/python2.7/dist-packages/tesseract.py to tesseract.pyc running install_egg_info Writing /usr/local/lib/python2.7/dist-packages/python_tesseract-0.6.egg-info $
(メモ) tesseract パッケージの install 時に「python2.6-dev が要る」と言われてインストールしたが,python-tesseract のインストール 先は python2.7 の dist-package だった(python のシンボリックリンク先が python2.7 になっているから?)。まぁ,いいか。
とりあえず,上記の方法で python-tesseracrt モジュールをインストールでき,サンプルプログラムも動いた。付属の eurotext.jpg (ユーロ圏の文字集合)の読み取りも良好(これは tesseract の能力だが・・・)。
残された課題は,日本語の言語データは tesseract 3.00 のやつを持ってくればよいのか? という問題のみ。