分分28官网|分分28开奖网

实验:[工具应用]利用Tesseract-OCR实现验证码识别
作者:强官涛   类型:测试开发    类别:实验   日期:2018-01-18    阅读:3349 次   消耗积分:4 分





实验简介


光学字符识别(OCR,Optical Character Recognition)是指对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程。OCR技术非常专业,一般多是印刷、打印行业的从业人员使用,可以快速的将纸质资料转换为电子资料。


Tesseract的OCR引擎最先由HP实验室于1985年开始研发,至1995年时已经成为OCR业内最准确的三款识别引擎之一。Tesseract目前已作为开源项目发布在Google Project,其最新版本3.0已经支持中文OCR,并提供了一个命令行工具。


验证码是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式。由于验证码可以由计算机生成并评判,但是必须只有人类才能解答,所以回答出问题的用户就可以被认为是人类。


但是在我们的测试开发过程中,难免会存在需要使用到验证码的时候,所以本实验则主要利用Java通过封装Tesseract-OCR命令和调用Tess4J两种方式,实现验证码的识别。



实验目的


(1) 理解验证码的工作原理和应用场景。

(2) 熟练使用Tesseract-OCR的命令完成对一张图片验证码的识别。

(3) 使用Java调用Tesseract-OCR的命令完全图片的验证码自动化处理。

(4) 使用Tess4J完成验证码的识别处理。

(5) 利用Java通过封装完成对一个站点的验证码自动化识别处理。



实验流程


1. 关于验证码


验证码是防止程序对一个站点发起自动化请求的很重要的一种手段,特别是实现登录的过程,向站点提交数据的过程等,我们必须有一种机制防止自动化程序向网站发起请求。


所谓道高一尺,魔高一丈。验证码和破解验证码就在双方的拉锯战中越来越厉害,越来越难以破解。目前的验证码通常的种类及特点如下:


(1) 最基础的英文验证码:纯粹的英文与数字组合,白色背景,这是最容易实现OCR识别的验证码。

(2) 字体变形的英文验证码:可以通过简单的机器学习实现对英文与数字的识别,准确率较高。

(3) 加上扰乱背景线条的验证码:可以通过程序去除干扰线,准确率较高。

(4) 中文验证码:中文由于字体多样,形状多变,数量组合众多,实现起来难度较大,准确率不高。

(5) 中文字体变形验证码:准确率更低。

(6) 中英文混合验证码:非常考验OCR程序的判断能力,基本上识别起来非常有难度。

(7) 提问式验证码:这是需要OCR结合人工智能才能实现,目前基本上无法识别。

(8) GIF动态图验证码:由于GIF图片是动态图,无法定位哪一帧是验证码,所以难度很大。

(9) 划动式验证码:虽然程序可以模拟人的操作,但是具体拖动到哪个位置很难处理。

(10) 视频验证码:目前OCR识别还未实现。

(11) 手机验证码:手机验证码实现自动化是很容易的,但是手机号码不那么容易获得。

(12) 印象验证码:目前无解。


20180118_115702_548.png 

 

我们可以看到上述形形色色的验证码,目前用纯粹的技术手段是很难处理验证码问题的。所以,也有很多人看到这件事情的价值,专门雇佣大量人员帮助客户实现人工打码,把它变成了一门生意。


2. Tesseract-OCR基础使用


(1) 下载Tesseract-OCR,官方网站为:http://sourceforge.net/projects/tesseract-ocr-alt/files/ 

(2) 安装Tesseract-OCR,建议安装在不包含空格的路径里,不要安装在默认的Program Files文件夹。比如笔者的安装路径为:C:\Tools\Tesseract-OCR 

(3) 在环境变量中添加TESSDATA_PREFIX变量,值为OCR安装目录:C:\Tools\Tesseract-OCR

(4) 准备一些英文和数字的验证码,可以带背景干扰线。比如将此验证码图片保存在D:\Other\VerifyCode目录中。

(5) 打开CMD命令行程序,执行如下命令,即可将识别到的验证码内容输出到一个.txt文本文件中。


C:/Tools/Tesseract-OCR/tesseract.exe D:/Other/VerifyCode/myverifycode.jpg

D:/Other/VerifyResult/output

 

我们来看看具体的运行效果:


20180118_115710_722.png 

 

我们可以看到,tesseract.exe是执行识别的主命令,后面跟的第一个参数为指定验证码图片所在的路径和文件名,第二个参数为识别结果的输出路径,此处指输出到文件D:/Other/VerifyResult/output.txt中,但是我们不需要在后面特别添加.txt后缀。


(6) 如果我们想实现中文的验证,则需要下载中文训练字库文件,文件名为:chi_sim.traineddata,将该文件下载到电脑后,保存至C:\Tools\Tesseract-OCR\tessdata文件夹中。

(7) 识别中文验证码时只需要在正常命令后面添加l chi_sim”指定训练字库文件即可。


C:/Tools/Tesseract-OCR/tesseract.exe 验证码所在路径 结果输出路径 -l chi_sim


事实上,Tesseract-OCR默认使用的是英文字库,字库名称为eng.traineddata,我们也可以下载更多的字库来对其识别的准确率进行扩展。


版权所有,转载本站文章请注明出处:蜗牛学院在线课堂, http://www.mountsinaibaptistchurch.org/note/80
上一篇: 实验:[工具应用]利用SoupUI实现协议级接口测试
下一篇: 实验:对象识别原理->JavaScript操作Web窗体对象
提示:登录后添加有效评论可享受积分哦!