Captcha解析日記#1
ロシア人がSushi ForumのCaptchaをクラックしまくってきてうざいので、Captchaについて知るためにCaptchaクラックの練習することにした。
自分で機械学習させるみたいな手法は疲れそうなので普通にopencv派生?プロジェクトのtesseract-ocrを使って、文字認識することにした。前処理を俺が試行錯誤して頑張るみたいなスタンス。なので歪んだ画像とかは初めから諦めた。
とりあえずシンプルにcaptchaですらない数字の連番画像をやってみる
以下連番画像生成コード
require 'RMagick' img = Magick::Image.new(512, 64) ary = [] 10.times{ ary << (rand() * 10).to_i } draw = Magick::Draw.new draw.annotate(img, 50, 50, 50, 50, ary.join(" ")){ self.fill = 'black' self.pointsize = 30 } img.write("../captcha/0.jpg")
これが実際に生成された画像
これをtesseractで文字列化してみる。tesseractのインストールはだいたいこんなかんじでヤッた。
# leptonicaのインストール $ wget http://leptonica.googlecode.com/files/leptonica-1.69.tar.bz2 $ tar xvfz ./leptonica-1.69.tar.bz2 $ tar xvfj ./leptonica-1.69.tar.bz2 $ cd ./leptonica-1.69 $ ./configure --prefix=/usr/local $ make $ sudo make install # tesseractのインストール $ wget http://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.02.tar.gz $ tar xvfz ./tesseract-ocr-3.02.02.tar.gz $ cd ./tesseract-ocr $ ./configure --prefix=/usr/local $ make $ sudo make install # 言語ファイル(ENGLISH)を持ってくる $ wget http://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.01.eng.tar.gz $ tar xvfz ./tesseract-ocr-3.01.eng.tar.gz $ sudo cp -rv ./tesseract-ocr/tessdata/* /usr/local/share/tessdata/
これでPATHにtesseractコマンドがあるのでこれをさっき生成した画像に対して実行します
$ export LD_LIBRARY_PATH=/usr/local/lib $ export TESSDATA_PREFIX=/usr/local/share/ $ tesseract ./0.jpg 0
0ってやると0.txtってのが生成される(ここダサいですね、0.txtってやると0.txt.txtが生成されちゃう)
出力されたのは "8330738588" だった。ちゃんと認識できてますね。
http://kymt.me/src/captcha/0.txt