CMCC-EDU 模拟登陆中的验证码识别
文章地址:http://blog.csdn.net/u011535382/article/details/48210643
本文是成都地区CMCC-EDU登陆时候的验证码识别过程分析,完整的登陆过程分析在 这里。
1.验证码识别难度分析
经过对比观察发现,CMCC-EUD的验证码其实很二的,其中每个数字的出现位置是固定的,每个数字每次出现的形状也是一样的,只有少量的噪点可以通过分区和二值化处理来消除。
可以将图片看成是44*20的一个矩阵,只要能够把它每个数字标准的形式存储下来,再将整个验证码分为四个区域,逐一比较,找出差异度最小的就实现了。
2.标准数字矩阵的建立
由于每个数字可以看成是 13*9 的矩阵,需要将他们转化为二值并储存在二维数组中作为每次比较的标准。先通过ps将图片裁剪成 13*9 分辨率的文件,再由软件对比识别。
这是二值化前的效果:
其中彩色转化为灰度的计算方式为 gray = R*0.11+G *0.59 + B*0.3;灰度转二值的阀值取为 128,这样实际的的效果最好。再将识别出来的图像矩阵存储到文本文件 stand.txt 中方便以后编程的使用。
二值化后的效果:
4.验证码的识别思路
1、将待验证的图片分为四个区域;
2、选择一个区域数字识别;
3、将10个标准数字矩阵和待识别区做异或操作,统计差异最小的那个数就是识别出来的数num;
4、若四个区域都识别完,返回识别结果,若没有,转到步骤2。
5.具体实现代码
/*
验证码识别函数
参数: 包含验证码图片的 CImage 对象
返回值: 识别结果的 CString */
CString Distinguish(CImage &image)
{CString strResult;//每张验证码分为四个区域for(int temp= 0; temp<=3; temp++){bool pixelArray[13][9] = {0};int numL = 11*temp+2; //x像素坐标的左边起点int numR = numL + 9; //x像素坐标的右边起点int resultNum = 0;//对一个图像进行扫描二值化 存储在 pixelArrayfor (int y=2; y<15; y++){for (int x=numL; x<numR; x++){COLORREF colorRef = image.GetPixel(x,y);//RGB同时扩大100倍 转化为灰度值int gray = GetRValue(colorRef)*11+GetGValue(colorRef)*59+GetBValue(colorRef)*30;if (gray>=12800){pixelArray[y-2][x-numL] = true;}else{pixelArray[y-2][x-numL] = false;}}}//对一个区域的数字进行识别//将10个标准数字与目标数字矩阵比较int mincount = 117;for (int num =0; num<10; num++){int count = 0;for (int y=0; y<13; y++){for (int x=0; x<9 ;x++){//统计差异的个数if (standNum[num][y][x]&&pixelArray[y][x]){count++;}}}if (count<mincount){mincount = count;resultNum = num;}}//将识别出来的数字转化为CStringCString strFormat;strFormat.Format("%d", resultNum);strResult += strFormat;}return strResult;
}
6.验证码识别效果
经过300多张图片的测试,成功率为 100% (主要是图片太简单)。
CMCC-EDU 模拟登陆中的验证码识别相关推荐
- java使用Selenium模拟登陆58(验证码登陆密码登陆)若快平台识别文字点击验证码
文章目录 写在前面 配置环境 Selenium入门 使用Selenium登陆58 若快平台识别文字点击验证码 附: By对象中的 xpath & cssSelector获取方式** 不打开浏览 ...
- python中selenium(模拟登陆)+pytesseract(自动识别验证码)应用例子之查询住房公积金
这里以查询深圳住房公积金为例(http://gjj.sz.gov.cn/fzgn/zfcq/) from selenium import webdriver # 模拟浏览器操作 from PIL im ...
- 模拟登陆 - 破解12306验证码
12306模拟登陆demo: 用selenium来进行模拟登陆操作,主要是这个验证码部分. https://kyfw.12306.cn/otn/resources/login.html 这个验证码解决 ...
- 以豆瓣网为例,模拟登陆爬虫以及验证码处理
在利用scrapy框架爬各种网站时,一定会碰到某些网站是需要登录才能获取信息. 最近在学天善智能课堂韦玮老师的课程,python数据挖掘与分析实战 ,通过自己部分的代码和借鉴老师的项目,多次试验改进调 ...
- python爬虫爬网站数据登录_使用webdriver+urllib爬取网页数据(模拟登陆,过验证码)...
urilib是python的标准库,当我们使用Python爬取网页数据时,往往用的是urllib模块,通过调用urllib模块的urlopen(url)方法返回网页对象,并使用read()方法获得ur ...
- 使用webdriver+urllib爬取网页数据(模拟登陆,过验证码)
urilib是python的标准库,当我们使用Python爬取网页数据时,往往用的是urllib模块,通过调用urllib模块的urlopen(url)方法返回网页对象,并使用read()方法获得ur ...
- python重定向cookie_模拟登陆中 302 重定向和 cookies 的一些困惑
我想写一个查询话费和流量的爬虫,关键是实现模拟登陆的这个部分. 在登陆过程中,点击登陆之后,登陆表单会 post 到一个地址(这一步浏览器不显示),然后会 302 跳转到登陆成功的页面. 我现在想得到 ...
- 网络爬虫中的验证码识别
网络爬虫遇到的验证码 在写网络,爬虫时,遇到很多网站存在验证码的情形,有其是比较烦的是,爬取数据的每一页都有验证码,如果只有登陆时,存在验证码,这个很好解决,只需将验证码获取后手动输入就行. 但对于每 ...
- selenium模拟登陆时截取验证码
模拟登陆时,经常会遇到有验证码的问题,那么就需要把验证码给截取下来. 如下为截取验证码程序,该程序的原始地址为:http://www.cnblogs.com/donaldlee2008/p/53045 ...
最新文章
- 开源项目event-stream被注入恶意代码,盗取区块链钱包助记词
- Cpp拾零(to be continued)
- Mac系统的终端显示git当前分支
- 中央暗示:07年别急买房
- 用python绘制图形_python绘制图形
- AmazeUI基本样式
- 服务器性能指标(一)——负载(Load)分析及问题排查
- WGCNA分析,简单全面的最新教程(在线做,但也需要懂原理)
- oracle 压力测试工具benchmarksql
- Nginx 配置实现web解析php代码 过程记录
- matlab编辑rayfile光源文件,rayfile网盘功能详解 rayfile网盘安装步骤及安装注意事项...
- lol新加坡服务器怎么修复,英雄联盟差点被新加坡服翻译“毁了”,7张图片看到想要吐血...
- C#:获取Web.config中数据库连接地址
- 一个简单的js作用域题目(原创)
- 栈和队列常用函数详解
- 计算机word英语词汇大全,计算机专业英语词汇缩写大全
- VSTOOutlook发邮件时To中和中按照名字首字母排序
- IMU标定——椭球拟合
- HTML DOM 导航
- 软件测试基础篇(1)