本文源自:http://hooopo.iteye.com/blog/993538
工具:imagemagick + tesseract-ocr
Tesseract-ocr据说辨识程度是世界排名第三,可谓神器啊。
准备工作:
1.安装tesseract-ocr
- sudo apt-get install tesseract
2.安装imagemagick
- sudo apt-get install imagemagick
3.安装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"
这个还是简单,再复杂一点的,这个是4399.com的验证码:
有黑色边框,有背景色,文字稍微扭曲。
- 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的概率命中。
ps:研究破解验证码不是为了搞破坏。请勿跨省追捕。
当然还有人工ocr:优优云打码等 这些是付费的居多
相关推荐
利用OCR识别验证码, 解决一次实际问题 (Node.js) 用户故事 (User Story) 最近因为牙齿不舒服, 打算通过网上预约挂号, 到附近医院的口腔科就诊. 打开网页注册帐号, 来到预约页面, 预约流程如下: 确定医生和时间段, ...
Java中也有类似的库,如`Java Advanced Imaging (JAI)`和`ImageMagick`进行图像处理,`Tess4J`作为Tesseract OCR的Java接口。Java的验证码识别流程基本与Python相同,主要区别在于使用的库和API。 1. **读取和...
而“工具”标签则暗示了可能涉及到了一些外部工具的使用,如curl、wget、OpenCV、ImageMagick和Tesseract。 在提供的文件列表中,只有一个名为“bmp”的条目,这可能是指验证码图片的格式。BMP是一种常见的位图图像...
验证码自动识别是一个常见的任务,尤其在自动化测试和爬虫领域中。PHP作为一款广泛应用的服务器端脚本语言,可以通过各种技术手段实现验证码的解析。在这个测试案例中,我们将探讨如何用PHP来实现实现验证码自动识别...
VB可以通过调用Tesseract OCR等开源库,或者使用第三方API如Google的Vision API来进行识别。 5. 错误修正:由于验证码图像的变形和噪声,识别结果可能会有误。因此,需要一些错误纠正策略,如模板匹配、统计分析或...
AutoIt是一种轻量级、强大的自动化脚本语言,主要用于Windows操作系统。它被广泛用于系统管理和自动化任务,包括处理图形用户界面(GUI)...通过对相关库和工具的掌握,我们可以构建高效且准确的验证码识别解决方案。