OCR

参考にした資料

オープンソースで作るスマホ文字認識アプリ
http://www.slideshare.net/youheiyamaguchi/ss-12902286

Tesseract ocr
http://www.slideshare.net/takmin/tesseract-ocr

NHocrを使った日本語文字認識を使ってみる
http://g86.dbcls.jp/~yag/wordpress/archives/1351

Project-O2 home page
http://www.imglab.org/p/O2/index-j.html

nhocr
OCR engine for Japanese language
https://code.google.com/p/nhocr/

Capture2Text
http://sourceforge.net/projects/capture2text/

NHocrを使用してC#からOCRする
http://blog.livedoor.jp/unker/archives/1068511.html

Tesseractも有名みたいだけれどNHocrが日本語認識出来そうなのでこれを試せないか調べて見た。

                                                • -

NHocrのテスト環境の作成

あんまりLinuxに慣れていないのでWindowsでまずテストしてみる。

Windows用の NHocrが見つかった。
https://github.com/matthewn4444/win-nhocr

統合開発環境としてVS2012が必要
http://go.microsoft.com/?linkid=9816772

../include
../Release
等のフォルダ指定が必要だった。win-NHocrの作者の環境では不要なんだろか。。

FreeType2が必要
http://jaist.dl.sourceforge.net/project/freetype/freetype2/2.5.0/freetype-2.5.0.1.tar.bz2
解凍してVS2012で問題無くビルドが出来る。素晴らしい。。

出来あがったコマンドの実行方法

> nhocr.exe -o result.txt oneoneo.pbm -line

pbmファイルとか作るのはWindowsユーザーにとっては面倒かもしれない。bmpとかpngにも最初から対応してたら良いのに。

環境変数の指定

> set NHOCR_DICDIR=B:\projects\others\win-nhocr\Dic\numbers
> set NHOCR_DICCODES=num

辞書ファイルの作成方法

win-nhocrでは辞書ファイル作成コマンドは入っていないので本家のNHocrを利用

$ wget http://www.imglab.org/p/O2/archives/O2-tools-2.00.tar.gz
$ tar xvzf O2-tools-2.00.tar.gz
$ cd O2-tools-2.00
$ ./configure --prefix=/home/test/O2
$ make install
$ cd ../
$ wget https://nhocr.googlecode.com/files/nhocr-0.21.tar.gz
$ tar nhocr-0.21.tar.gz
$ cd nhocr-0.21
$ ./configure --with-O2tools=/home/test/O2 --prefix=/home/test/nhocr
$ make install
$ cd ~/nhocr/sbin

インストールが終わったらコマンドを実行して辞書ファイルを作る。
方法はnhocrのREADMEに書かれているのでこんな風にして実行した。
拡張子がttfじゃなくてttcだとうまく認識してくれるのか心配だったけれど大丈夫みたいだ。
makecharがきっとFreeTypeを使っているんだろうなぁ。

$ ./makechar -font MSGOTHIC.TTC cctable-num Font_1.img
$ ./makevec -F PLM Font_1.img Font_1.vec
$ ./makedic -F PLM -o PLM-num.dic Font_1.vec
LinuxWindows用のバイナリの作成には失敗

Windows用のバイナリも、
sudo apt-get install mingw32
して、
configure に --host=i586-mingw32msvc オプションを指定すれば作成出来るらしいんだけれど、
make でエラーが出る。
MinGWはWinsockを使うようになっていて、Linux BSD socketのヘッダ(sys/socket.h)とかを使うようになっていないのが原因っぽい。cygwinなら作れるかも。。
Socket使うサンプルプログラムが後から追加されたんだろうか?
とりあえず辞書ファイルさえ作れればwin-NHocrで実行出来るので作成した辞書ファイルをWindowsにscpでコピーして利用可能。
http://www.geocities.jp/beruponu/OCR/NHocr_dic/numbers.zip

雑感

オープンソースのNHocrを使えば日本語OCRがお手軽に試せるけれど、元画像をうまく認識&加工して材料の画像を用意する必要があるし、ユーザーに合わせた辞書の作成等もうまく行わないと認識精度が上がらないだろう。

しかしマウスだと文字をうまく書けないので、Androidの携帯とかタブレットでこれを使ったアプリがOSSであれば良いな。。ん?OCRだから画面になぞった文字を認識するんじゃなくて画像から認識するんだったか。まぁでも携帯デバイスで使えた方がお手軽で良い。認識系の処理は比較的重いだろうからWEBサービス化するのが確かに良いっちゃ良いかも。でも回線が無いと駄目だしなぁ。

http://www.tabroid.jp/app/business/2012/11/com.nullproduct.imagereader.html
http://mediadrive.jp/products/etma/

AndroidアプリってWindowsと同じで数が多いけれど、評判が無い変なとこが提供してるソフトだと悪さをしないか心配になってしまう。OSSのが安心だけれど商売っ気が無いので金儲けする為の情熱が注がれていない事が多く、一般ユーザーにとっては使いにくい。