はじめに
タイトル通りですが…そういうニーズが発生しました。
画像をいちいち目で確認していくのは、大変な労力がかかります…。
この手のことは、やはりPythonでやるものではないか?という先入観の元、調べていたのですが…。
TesseractというOCR (Optical Character Recognition/Reader、光学的文字認識) エンジンがあるとのことで、まずそれを試してみることに。
日本語で書くと「テッセラクト」ですかね。
まずはインストール
こちらを参考にしております。
github.com
まずはapt-cygにて検索をかけます。
$ apt-cyg searchall tesseract libtesseract-ocr_3 tesseract-ocr-deu tesseract-ocr-devel tesseract-ocr-eng tesseract-ocr-fra tesseract-ocr-ita tesseract-ocr-nld tesseract-ocr-por tesseract-ocr-spa tesseract-ocr-vie tesseract-ocr tesseract-training-core tesseract-training-deu tesseract-training-eng tesseract-training-fra tesseract-training-ita tesseract-training-nld tesseract-training-por tesseract-training-spa tesseract-training-util tesseract-training-vie
すると出てきますね…ぞろぞろと。
メインどころであろう、下記パッケージをインストールしてみます。
$ apt-cyg install tesseract-ocr
すると長いログが出る出る…依存性のあるパッケージが次々とインストールされているようです。
整理してみると、こんな感じでした。
※cygwinは抜いてます。
※一部再帰的になっていますが気にしない方向で。
tesseract-ocr ├ libgcc1 ├ libleptonica_5 │ ├ libgif4 │ │ └ libX11_6 │ │ └ libxcb1 │ │ ├ libXau6 │ │ └ libXdmcp6 │ ├ libjpeg8 │ ├ libpng16 │ │ └ zlib0 │ ├ libtiff6 │ │ ├ libjbig2 │ │ ├ libjpeg8 │ │ ├ liblzma5 │ │ ├ libstdc++6 │ │ └ zlib0 │ ├ libwebp5 │ └ zlib0 ├ libstdc++6 ├ libtesseract-ocr_3 │ ├ libgcc1 │ ├ libleptonica_5 │ └ libstdc++6 └ tesseract-ocr-eng └ tesseract-ocr
これを見る感じ、画像形式はjpg, gif, png, tiffには対応できていそう。
言語パッケージはデフォルトは英語だけみたいですね。
バージョン情報を確認してみます。
$ tesseract --version tesseract 3.04.01 leptonica-1.73 libgif 4.1.6(?) : libjpeg 8d (libjpeg-turbo 1.4.2) : libpng 1.6.24 : libtiff 4.0.6 : zlib 1.2.8 : libwebp 0.4.4
うん、入ってますね。
実際に使ってみる
というわけで、実際にお試しです。
適当にペイントソフトで作成した画像で、コマンドを叩いてみます。
コマンドはWikiにもある通りです。
tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile...]
・第一引数:画像
・第二引数:出力ファイル名
を最低限渡せばよさそうです。
$ tesseract NumberImage.png out Tesseract Open Source OCR Engine v3.04.01 with Leptonica Error in pixGenHalftoneMask: pix too small: w = 197, h = 76 $ $ cat out.txt 49612
読み取れてるー!!
エラーが出てきますが、画像の解像度(幅、高さ(px))が低い場合に出るようです。
github.com
まとめ
というわけで、あっさり画像認識ができました。
でも実際の写真に含まれる数字を抽出しようとすると…。
うまくいきません(´・ω・`)
(出力先のテキストが空っぽ…)
時間ができたら、もう少し戦ってみることにします。