用imagemagick和tesseract-ocr破解简单验证码
Tesseract是Ray Smith 于1985到1995年间在惠普布里斯托实验室开发的一个OCR引擎,曾经在1995 UNLV精确度测试中名列前茅。但1996年后基本停止了开发。2006年,Google邀请Smith加盟,重启该项目。目前项目的许可证是Apache 2.0。
该项目目前支持Windows、Linux和Mac OS等主流平台。但作为一个引擎,它只提供核心功能,没有界面。
有兴趣参加该项目的同学,可以加入:http://groups.google.com/group/tesseract-dev/,或者与Smith联系。
下载工具:imagemagick + tesseract-ocr
Tesseract-ocr据说辨识程度是世界排名第三,可谓神器啊。
准备工作:
1.安装tesseract-ocr
1 |
sudo apt-get install tesseract
|
2.安装imagemagick
1 |
sudo apt-get install imagemagick
|
3.安装rmagick
1 |
sudo apt-get remove --purge librmagick-ruby-doc librmagick-ruby1.8
|
2 |
sudo apt-get install libmagick9-dev ruby1.8-dev
|
3 |
sudo gem install rmagick
|
先试一个简单的:
1 |
require 'rubygems'
|
2 |
require 'rtesseract'
|
3 |
img = RTesseract. new ( "tmp/test.jpg" )
|
4 |
img.to_s.sub(/\s+$/, "" ) # => "3R8Z"
|
很成功,但这个太简单了。一般破解复杂点的验证码处理步骤是先用imagemagick灰度化,灰度反转,提高对比度,二值化等。然后再用ocr去识别。ocr识别黑白图片效果比较好些。
这个的验证码:
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"
|
这个还是简单,再复杂一点的,这个验证码:
有黑色边框,有背景色,文字稍微扭曲。
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%以上,扭曲太严重的识别率就很低了。有轻微噪点的就得自己写去噪算法了。。
破解图片验证码限制的一般思路:
http://www.williamlong.info/archives/347.html
相关推荐
识别验证码VB源码 识别验证码VB源码 识别验证码VB源码
c#识别验证码c#识别验证码c#识别验证码c#识别验证码c#识别验证码c#识别验证码c#识别验证码c#识别验证码
在本篇文章里小编给大家分享的是关于Java 如何使用 OCR 技术识别验证码实现自动化登陆的相关知识点内容,需要的朋友们学习下。
主要介绍了使用C#的aforge类库识别验证码实例,aforge类库是一个非常强大的类库,包括计算机视觉与人工智能、图像处理、神经网络、遗传算法、机器学习、机器人等领域,需要的朋友可以参考下
验证码识别 智能识别验证码 c# vb.net php
获取验证码图片,不是识别验证码!获取验证码图片,不是识别验证码!获取验证码图片,不是识别验证码!获取验证码图片,不是识别验证码!获取验证码图片,不是识别验证码!获取验证码图片,不是识别验证码!获取验证码图片,不是...
OCRServer识别验证码.zip
ocr识别验证码工具,能够自动识别验证码
DELPHI本地识别验证码 易语言 OCR DLL
java识别验证码 仅限字母数字 附带bmp图片 验证码图片位置随机变动
一份c#源码,可以自动识别绝大部分的图片验证码 winform,c#,自动识别验证码。 .............
一个用VB实现的识别验证码的例程,调用动态链接库
jmeter使用ocrserver工具自动识别验证码配置
识别验证码程序源代码,附带脚本化的运行机制代码,纯手工打造,感谢网络同行的帮助
车牌识别 验证码识别
jmeter识别验证码,jmeter识别验证码,jmeter识别验证码
基于深度学习的物体识别验证码破解方法.pdf
本文介绍了python使用tensorflow深度学习识别验证码 ,分享给大家,具体如下: 除了传统的PIL包处理图片,然后用pytessert+OCR识别意外,还可以使用tessorflow训练来识别验证码。 此篇代码大部分是转载的,只改了很少...
用C#实现了对验证码的识别与读取,开发环境是VS2005.
NULL 博文链接:https://zheng12tian.iteye.com/blog/1979876