用imagemagick和tesseract-ocr破解简单验证码
0
Tesseract是Ray Smith于1985到1995年间在惠普布里斯托实验室开发的一个OCR引擎,曾经在1995 UNLV精确度测试中名列前茅。但1996年后基本停止了开发。2006年,Google邀请Smith加盟,重启该项目。目前项目的许可证是Apache 2.0。
下载工具:imagemagick + tesseract-ocr
先试一个简单的:
该项目目前支持Windows、Linux和Mac OS等主流平台。但作为一个引擎,它只提供核心功能,没有界面。
有兴趣参加该项目的同学,可以加入:http://groups.google.com/group/tesseract-dev/,或者与Smith联系。
下载工具:imagemagick + tesseract-ocr
Tesseract-ocr据说辨识程度是世界排名第三,可谓神器啊。
准备工作:
1.安装tesseract-ocr
sudo apt-get install tesseract2.安装imagemagick
sudo apt-get install imagemagick3.安装rmagick
sudo apt-get remove --purge librmagick-ruby-doc librmagick-ruby1.8 sudo apt-get install libmagick9-dev ruby1.8-dev sudo gem install rmagick
先试一个简单的:
require 'rubygems' require 'rtesseract' img = RTesseract.new("tmp/test.jpg") img.to_s.sub(/\s+$/, "") # => "3R8Z"
很成功,但这个太简单了。一般破解复杂点的验证码处理步骤是先用imagemagick灰度化,灰度反转,提高对比度,二值化等。然后再用ocr去识别。ocr识别黑白图片效果比较好些。
这个的验证码:
img = MiniMagick::Image.new("tmp/people.jpg") img.colorspace("GRAY")#灰度化 image = RTesseract.new(img.path) image.to_s.sub(/\s+$/, "") # => "254369"这个还是简单,再复杂一点的,这个验证码:
有黑色边框,有背景色,文字稍微扭曲。
img = MiniMagick::Image.new("tmp/4399.jpg") img.crop("#{img[:width] - 2}x#{img[:height] - 2}+1+1") #去掉边框(上下左右各1像素) img.colorspace("GRAY") #灰度化 img.monochrome #二值化 image = RTesseract.new(img.path) #ocr识别 image.to_s.sub(/\s+$/, "") #=> "5692"
像上面这样简单的识别率几乎能达到80%以上,扭曲太严重的识别率就很低了。有轻微噪点的就得自己写去噪算法了。。
还有一些验证码看起来很变态但是是纸老虎。像当当的。刷新了几次发现结果在1-20之间,选中一个数暴力破解每次也有1/20正确的概率。
还有139的:。答案就12种1-4A-Da-d。而且不区分大小写。选中一个字母每次有1/6的概率命中。
转自:http://hooopo.iteye.com/blog/993538