imagemagick tesseract-ocr破解简单验证码


Tesseract-ocr据说辨识程度是世界排名第三,可谓神器啊。

准备工作:

1.安装tesseract-ocr

Java代码 收藏代码
  1. sudoapt-getinstalltesseract

2.安装imagemagick

Java代码 收藏代码
  1. sudoapt-getinstallimagemagick

3.安装rmagick

Java代码 收藏代码
  1. sudoapt-getremove--purgelibrmagick-ruby-doclibrmagick-ruby1.8
  2. sudoapt-getinstalllibmagick9-devruby1.8-dev
  3. sudogeminstallrmagick

先试一个简单的:

Ruby代码 收藏代码
  1. require'rubygems'
  2. require'rtesseract'
  3. img=RTesseract.new("tmp/test.jpg")
  4. img.to_s.sub(/\s+$/,"")#=>"3R8Z"

很成功,但这个太简单了。一般破解复杂点的验证码处理步骤是先用imagemagick灰度化,灰度反转,提高对比度,二值化等。然后再用ocr去识别。ocr识别黑白图片效果比较好些。

这个是人民网的验证码:

Ruby代码 收藏代码
  1. img=MiniMagick::Image.new("tmp/people.jpg")
  2. img.colorspace("GRAY")#灰度化
  3. image=RTesseract.new(img.path)
  4. image.to_s.sub(/\s+$/,"")#=>"254369"

这个还是简单,再复杂一点的,这个是4399.com的验证码:

有黑色边框,有背景色,文字稍微扭曲。

Ruby代码 收藏代码
  1. img=MiniMagick::Image.new("tmp/4399.jpg")
  2. img.crop("#{img[:width]-2}x#{img[:height]-2}+1+1")#去掉边框(上下左右各1像素)
  3. img.colorspace("GRAY")#灰度化
  4. img.monochrome#二值化
  5. image=RTesseract.new(img.path)#ocr识别
  6. image.to_s.sub(/\s+$/,"")#=>"5692"

像上面这样简单的识别率几乎能达到80%以上,扭曲太严重的识别率就很低了。有轻微噪点的就得自己写去噪算法了。。

还有一些验证码看起来很变态但是是纸老虎。像当当的。刷新了几次发现结果在1-20之间,选中一个数暴力破解每次也有1/20正确的概率。

还有139的:。答案就12种1-4A-Da-d。而且不区分大小写。选中一个字母每次有1/6的概率命中。

你可能感兴趣的:(ImageMagick)