はじめに
タイトル通りですが…そういうニーズが発生しました。
画像をいちいち目で確認していくのは、大変な労力がかかります…。
この手のことは、やはりPythonでやるものではないか?という先入観の元、調べていたのですが…。
TesseractというOCR (Optical Character Recognition/Reader、光学的文字認識) エンジンがあるとのことで、まずそれを試してみることに。
日本語で書くと「テッセラクト」ですかね。
環境はWindows7、Cygwinを使用しております。
まずはインストール
こちらを参考にしております。
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
まとめ
というわけで、あっさり画像認識ができました。
でも実際の写真に含まれる数字を抽出しようとすると…。
うまくいきません(´・ω・`)
(出力先のテキストが空っぽ…)
時間ができたら、もう少し戦ってみることにします。