用imagemagick和tesseract-ocr破解简单验证码
用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的概率命中。
下载jTessBoxEditor用于修改box文件
下载地址:http://download.csdn.net/detail/a443475601/5896893 里面自带java运行库,安装后 然后启动命令行 java -jar jTessBoxEditor.jar即可打开
为了方便 tif文面命名格式[lang].[fontname].exp[num].tif
lang是语言 fontname是字体
比如我们要训练自定义字库 chi 字体名:黑体
那么我们把tif文件重命名 chi.黑体.exp0.tif
把多个.tif文件合并成一个.tif文件合并成一个.tif文件
下面开始训练字库:
下面第一条命令与上图功能一样,产生.box文件
1、E:\Tesseract-ocr\tesseract.exe chi.黑体.exp0.tif chi.黑体.exp0 batch.nochop makebox
运行以上命令也会产生一个box文件。产生box文件的过程是必须的,也是最重要的,没有box文件以下的内容都无法进行。
需要记住的是生成的.box要和这个.tif文件同在一个目录下。
2、文字校正。运行jTessBoxEditor工具,打开chi.黑体.exp0.tif文件(必须将上一步生成的.box和.tif样本文件放在同一目录),如上图所示。可以看出有些字符识别的不正确,可以通过该工具手动对每张图片中识别错误的字符进行校正。校正完成后保存即可。
2、产生字符特征文件
tesseract chi.黑体.exp0.tif chi.黑体.exp0 nobatch box.train
这一步将会产生 chi.黑体.exp0.tr文件和一个 chi.黑体.exp0.txt文件,txt文件貌似没什么用,看看而以。
3、计算字符集
unicharset_extractor chi.黑体.exp0.box
这一步会产生一个unicharset字符集文件.
4、定义字体特征文件,---Tesseract-OCR3.01以上的版本在训练之前需要创建一个名称为font_properties.txt的字体特征文件
手工建立一个文件font_properties.txt
内容如:黑体 0 0 0 0 0
注意:这里 必须与训练名中的名称保持一致,填入下面内容 ,这里全取值为0,表示字体不是粗体、斜体等等。
5、聚集字符特征
1) shapeclustering -F font_properties.txt -U unicharset chi.黑体.exp0.tr 注意:如果font_properties不加扩展名.txt,可能会报错
2) mftraining -F font_properties.txt -U unicharset -O chi.unicharset chi.黑体.exp0.tr
使用上一步产生的字符集文件unicharset,来生成当前新语言的字符集文件chi.unicharset。同时还会产生图形原型文件inttemp和每个字符所对应的字符
特征数文件pffmtable。最重要的就是这个inttemp文件了,他包含了所有需要产生的字的图形原型。
3)cntraining chi.黑体.exp0.tr
这一步产生字符形状正常化特征文件normproto。
6、把目录下的unicharset、inttemp、pffmtable、shapetable、normproto这五个文件前面都加上chi.
7、执行combine_tessdata chi.
然后把chi.traineddata放到tessdata目录
必须确定的是第2、4、5、6行的数据不是-1,那么一个新的字典就算生成了.
8、用新的字库对图片进行分析
tesseract test.tif output -l chi
内容会写到output.txt文件中,这个文件与测试图片在同一个目录下
识别问题:
1、一个字分成2部分识别,如:好,会认为女 子,如何解决???
用imagemagick和tesseract-ocr破解简单验证码的更多相关文章
- tesseract ocr训练 pt验证码
识别率有问题A大概率识别为n,因此需要训练,这里讲一下 如何训练 参考 java代码里边直接使用tess4j,是对tesseract的封装,但是如果要训练,还是需要在进行安装tesseract-ocr ...
- 使用ImageMagick和Tesseract进行简单数字图像识别
使用ImageMagick和Tesseract进行简单数字图像识别 由于直接使用 tesseract 进行识别,识别率很低, ImageMagick 安装.配置及使用: 平台:winXP 1. 安装I ...
- python+selenium十三:破解简单的图形验证码
此方法可破解简单的验证码,如: 注:中文识别正在寻找办法 安装: 1.python3 2.Pillow 3.pytesseract 4.tesseract-ocr 下载地址:https://pa ...
- Python&selenium&tesseract自动化测试随机码、验证码(Captcha)的OCR识别解决方案参考
在自动化测试或者安全渗透测试中,Captcha验证码的问题经常困扰我们,还好现在OCR和AI逐渐发展起来,在这块解决上越来越支撑到位. 我推荐的几种方式,一种是对于简单的验证码,用开源的一些OCR图片 ...
- 转:关于使用ImageMagick和Tesseract进行简单数字图像识别
据说Tesseract可是世界排名第三的OCR神器,2010年又更新了3.0版本.Tesseract原先是HP写的,现在Open Source了. 下面介绍怎么用Tesseract配合ImageMag ...
- Tesseract OCR简单实用介绍
做字符识别,不能不了解google的Tesseract-OCR,但是如何在自己的工程中使用其API倒是语焉不详,官网上倒是很详尽地也很啰嗦地介绍如何重新编译生成适合自己平台的lib和dll,经过近些天 ...
- Python脚本破解图形验证码(tesserocr和pytesseract)
在学习之前,我们先了解OCR.tesseract.tesserocr.pytesseract和opencv这几个跟图片处理有关的库. OCR(Optical Character Recognition ...
- 【转】TensorFlow练习20: 使用深度学习破解字符验证码
验证码是根据随机字符生成一幅图片,然后在图片中加入干扰象素,用户必须手动填入,防止有人利用机器人自动批量注册.灌水.发垃圾广告等等 . 验证码的作用是验证用户是真人还是机器人:设计理念是对人友好,对机 ...
- 简单验证码识别 tessnet2
今天突然间对识别验证码感兴趣,于是网上搜了一下 最简单的是引用tessnet2.dll,然后通过它来识别,代码如下 private void button1_Click(object sender, ...
随机推荐
- Hello BaiduMap
百度提供了地图的API,可以在android手机上用,这里其实只要参考百度给的文档就好了.因为api不断在更新,所以网上的博客感觉还是不太好,直接看官网的文档比较靠谱 这里照着百度文档上面提供的文档我 ...
- android聊天,存储聊天记录sqlite
项目中有聊天模块,需要用到打开activity的时候初始化聊天记录的情况.大致情况如下: 辅助类:ChatSQLiteHelper 在第一次时会调用oncreate方法(判断的标准是schedul ...
- 多线程学习之AsyncOperation实现线程间交互
1.首先我们要实现如下图的效果: a.主线程A运行方法段1时创建子线程B b.然后子线 ...
- linux 下安装 nginx
安装nginx版本为1.7.5 一.下载nginx 官方地址:http://www.nginx.org/ 下载地址:http://nginx.org/download/ Nginx官网提供了三个类型的 ...
- 修改tomcat 启动45秒
当我们需要增加Tomcat的启动时间,修改方法如下:
- 【POJ】【2096】Collecting Bugs
概率DP/数学期望 kuangbin总结中的第二题 大概题意:有n个子系统,s种bug,每次找出一个bug,这个bug属于第 i 个子系统的概率为1/n,是第 j 种bug的概率是1/s,问在每个子系 ...
- asynDBCenter(修改)
asynDBCenter加入数据库心跳,其实是没有找到更好的方法,看看和以前有什么不同 mongo数据库重练,暂时没有找到好办法,只能这样定时访问 bool asynDBCenter::init(bo ...
- jQuery+css+div--一些细节详解
(一).首先.让我们认识一下最基本普通的alert()弹出框!(改变alert()提示弹出框的样式) 我们在写html或是jsp页面的时候,谁都不希望自己精心设计,且非常美观的页面颜色布局被破坏掉吧! ...
- 【技术贴】解决Eclipse中SVN图标不显示
在用Eclipse做开发的时候,用到了svn版本控制器,这天当我打开Eclipse的时候,发现项目里面的所有文件前的版本号以及状态图标都不显示了,即所有的svn图标不显示了,这是怎么回事,关掉Ecli ...
- 【设计模式六大原则5】迪米特法则(Law Of Demeter)
定义:一个对象应该对其他对象保持最少的了解. 问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大. 解决方案:尽量降低类与类之间的耦合. 自从我们接触编程开始 ...