上一篇 / 下一篇  2007-01-20 09:30:36

查看( 9 ) / 评论( 0 ) / 评分( 0 / 0 )
以工行验证码为例:
https://mybank.icbc.com.cn/icbc/perbank/verifyimage.jsp?randomKey=1131106901245147136
我从网上下载了数十图片,并对其进行比较
  对比后发现图片中有一黑色框框,原本图片为66*20,除去框后变为64*18,其中共有4个数字,也就是说每个图片的大小大概是16*18象素,这样,我们就可以将一个大图,分成4个小图来辨认。

我们要解决的是:
1、每个数字后有杂线,如何去掉杂线
2、就算是同一数字样子也大为不同,大大防碍了计算机判断,如何判断数字的图片是什么数字

具体来谈:
1、分析:如何去掉杂线
  在这里在下引入一个概念:二值化:就是将一个东西进行一种处理,使其在处理后只具有两种情况,即类似(是/非)、(黑/白)、(1/0)、(好/坏)、(阴/阳)。
  因为这里是计算机中,所以我们采用0、1是最简单有效的。
  我在这里做了一个假设:假设图片中的颜色有一个临界值,在临界值两边的颜色,背景、杂线属于其中之一,而有效的数字则是另一类,二者用0、1表示,则可以达到图片的二值化。
  在不断的取色实验(将图片载入Fireworks或Photoshop中,并对单点进行取色)中,我发现比颜色&Hff555555浅的颜色都是背景和杂线,而比其深的都是数字本身。

(具体二值化方法本人将在下一章中介绍)
  由此,我们就将杂线去除了,杂线、背景都显示为0,而数字则显示为1。如果不明白我可以举个例子。
  读其中图片数为1623的:

在我做过二值化后则变为
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000001111100000000
011111100000000000000000000000000000000111111000001100011
000000001000111000000000000001100000000000001111111100000
1000001100000010000011000000000001111100000000000011110000
10000010000011000000000000110000000000000111000000000000111
000000000000000001100000000000110000000000000011100000000000
1110000000000000000001000000000001100000000000000011100000000
00011100111100000000000110000000111100000000000000000111000000
000001111111111000000000100000000000001100000000000000011100
00000000011110001111000000010000000000000001100000000000000
11100000000000111000001110000001000000000000000011000000
000000001110000000000011100000111000001000000000000000
001100000000000000111000000000001110000011100001000000000
000000000110000000000000011100000000000011000001110000111
1111100001000001100000000000000011100000000000011100011100
0001111111100001000011000000000000000011100000000000001111
1111000000000000000000111110000000000000001111111000000000
0001111100000000000000000000000000000000000
  你对于这段01代码也许摸不着头脑,可是,经过以下分析后,你就会知道上代码是怎么回事了:
  由于一个0或1是代表一个象素点,而图片是64*18象素的。所以查一下上面01集合(当然,我们的记事本中有这个功能,我不会一个一个的查了,呵呵),我们的点大概是1152,计算1152我们会发现,哦原来是这样:1152=64*18。
  事情就是这么简单,下面我们将这0、1集合,按64列18行排一下
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000111110000000001111110000000
0000000000000000000000000111111000001100011000000001000111000000
0000000011000000000000011111111000001000001100000010000011000000
0000011111000000000000111100001000001000001100000000000011000000
0000000111000000000000111000000000000000001100000000000110000000
0000000111000000000001110000000000000000001000000000001100000000
0000000111000000000001110011110000000000011000000011110000000000
0000000111000000000001111111111000000000100000000000001100000000
0000000111000000000001111000111100000001000000000000000110000000
0000000111000000000001110000011100000010000000000000000110000000
0000000111000000000001110000011100000100000000000000000110000000
0000000111000000000001110000011100001000000000000000000110000000
0000000111000000000000110000011100001111111100001000001100000000
0000000111000000000000111000111000001111111100001000011000000000
0000000111000000000000011111111000000000000000000111110000000000
0000011111110000000000001111100000000000000000000000000000000000

  可以看出吗?隐隐约约有1623(由1组成的)。到此为止,我们已将图片转为数字了^-^。

2、分析如何判断数字
  以我多年来的经验,用以下方法就可以了,将图片先分为4份,即4个数字,先取其一进行二值化,与事先储存的01代码比较一下,若大致相同即可以判断相同。
  如动网论坛其标准图片与验证码中图片的相似度可以达到95%左右,也就是说,两图片对比,只要有95%以上相同就可以进行判断出正确的数字。
  我称以上方法为“物理比较法”,其准确性很高,但若数字形状有变化,那么此方法就无力回天了。
  在此种情况下,我提出另一种方法:逻辑比较法
  其实理论上“逻辑比较法”对于人来说要比“物理比较法”容易,因为人是判断数字是以它的形状而不是和一个标准的数字进一点一点的比较,看它们的相似度相差多少。
  数字的逻辑比较法,请详见《逻辑比较法及其应用》章节

工行验证码自动识别》(邹健)二相关推荐

  1. Python自动打码,DdddOcr通用验证码自动识别库

    在Python爬虫中,或者使用POST提交的过程中,往往需要提交验证码来验证,除了人工打码,付费的api接口(打码接口),深度学习识别验证码,当然还有适合新人使用的OCR验证码识别库,简单的验证码是可 ...

  2. 验证码机制之验证码自动识别

    介绍 当验证码设计不存在逻辑层面的问题时,就要涉及到与验证码机制本身的正面对抗,也就是验证码识别技术这里的验证码主要是指图片验证码. 验证码自动识别就是指通过自动化的技术对图片验证码中的字符或公式等内 ...

  3. php ocr识别验证码,tesserocr 简单验证码自动识别

    简单文字验证码自动识别方法 前言 概述:OCR光学字符识别可以将验证码转换为电子文字,tesserocr是Python的一个OCR识别库,但是是对tesserect做的一层pythonAPI封装.我们 ...

  4. 12306登陆窗体验证码自动识别

    这个是12306网站更新前测试可用的,但是现在改变url之后不能获取验证码了,不过这只是时间问题,相信花点时间是可以找到新的url的,只是所有的url都要更改,比较麻烦...现在12306网站从动态验 ...

  5. 易语言post之4399登录注册+验证码自动识别

    简介 本篇文章将教你如何运用易语言中的POST实现4399的登录注册及验证码的自动识别 需要用到的工具 易语言  抓包工具(fiddler或浏览器f12)   ocr.dll 精易模块 原理:提交信息 ...

  6. cv2 inrange灰度图_基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析...

    title: [python]基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析 type: categories copyright: true categories ...

  7. opencv 轮廓放大_基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析...

    title: [python]基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析 type: categories copyright: true categories ...

  8. web网站验证码自动识别

    验证码自动识别 在很多WEB网站登录的时候,都需要输入验证码,Python提供了一些库(例如常用的OCR库)来识别和使用在线图片中的文字. 将图像翻译成文字一般被称为光学文字识别(Optical Ch ...

  9. 我做的邹健老师的sql练习题(含答案)

    我做的邹健老师的sql练习题(含答案) --试题1.2(表的建立及原题请参考邹健老师的专栏:http://blog.csdn.net/zjcxc/) (注:邹健老师的专栏有部分答案有问题) SELEC ...

最新文章

  1. Ubuntu 下类似 Xshell 工具、更换阿里源
  2. SAP MM Reset预留单上的Deletion Flag?
  3. git-flow 流程 备忘清单
  4. 2020年,数据中心的绿色技术演进与创新
  5. 信道分类、信道复用技术、CSMA/CD 协议、PPP 协议、MAC 地址、局域网、以太网、交换机、虚拟局域网
  6. IOC 容器初始化小结
  7. linux cgi命令,Linux之cgi实现系统主机监控
  8. Tomcat+nginx+keepalived+memcached实现双VIP负载均衡及Session会话保持
  9. Linux 驱动头文件说明
  10. java需求分析和设计,附面试题
  11. 全球地名中英文对照表(S)
  12. Java Web程序设计——图书管理系统
  13. Ubuntu下VSCode使用等宽字体设置
  14. Python提取PDF简历中的信息,写入Excel
  15. Panabit镜像功能配合wireshark抓包的方法
  16. systemd、upstart和system V
  17. 从户外露营到登陆火星,火星玩家电核装备让太空黑科技成为现实
  18. 链路聚合技术及其配置
  19. 图片怎么变成html链接,HTML图片怎么超链接
  20. 如何接入银联在线支付网关

热门文章

  1. CLEARTEXT communication to v.juhe.cn not permitted by network security polic
  2. React 深度学习:invariant
  3. 说说IOPS的重要指标
  4. vue el-col固定位置并且最前显示
  5. QQ物联打造H5里的“3D全景漫游”秘籍
  6. MIT开源协议,多端适用的租房小程序,带完整的管理员后台
  7. 如何将skp文件中的模型导入到UE4中
  8. ImmunoChemistry丨艾美捷NIR-FLIVO 690游离染料对照试验说明书
  9. 武汉大学转专业计算机,武汉大学的转专业须知
  10. 验证码生成器google kaptcha