简单验证码的模板匹配实现

2011-12-31 00:00:00于志良
电脑知识与技术 2011年26期


  摘要:验证码是伴随自动提交程序的出现而出现的,其初衷是预防恶意程序的大量登录,随着互联网IT技术的不断发展,验证码已成为网站和网民交互的一个特征。国内外都有对验证码的设计和识别的研究,该文以一类常见验证码为例进行了实际的识别实现。
  关键词:验证码;模板;实现
  中图分类号:TP393文献标识码:A 文章编号:1009-3044(2011)26-6375-02
  验证码是论坛等网站用以阻止自动提交程序恶意行为的人机区分技术,其设计和使用直接涉及到互联网的正常浏览体验。在信息化社会这个背景下,随互联网IT技术的不断发展,验证码的发展是非常迅速的。现在各种论坛、博客、投票等程序都带有验证码功能。
  目前,网络流行的验证码有很多种,从人工和机器识别两个角度分析,主要有以下4类:1)人工难以识别、机器容易识别;2)人工容易识别、机器容易识别;3)人工难以识别、机器难以识别;4)人工容易识别、机器难以识别;
  验证码识别技术的研究,其目的就是设计并应用IV类验证码。但是国内实际使用的验证码中,尚无特别符合标准IV的实例[1]。
  国内对验证码识别的研究较少,文献2将神经网络算法引入验证码识别技术中;文献3提出了简单的基于字符形状的验证码识别技术;文献4探讨了一种基于外部轮廓的数字验证码识别方法;文献5提出了一种加权模板的构造方案。本文以常见的直立、有杂色的验证码为例进行实际的识别实现,这种验证码图片内的字母及数字分布均匀,图片背景一般为纯色,目前在大量论坛及网页游戏、个人网上银行中应用。
  1 研究方法
  通常验证码的识别需要涉及图像处理和人工智能、模式识别、机器视觉的基本知识。图像处理一般指针对数字图像的某种数学处理,如投影、钝化、锐化、细化、边缘检测、二值化、压缩等等。二值化:一般图片都是彩色的,按照逼真程度可能很多级别。为了降低计算复杂度,方便后续的处理,在不损失关键信息的情况下,能将图片处理成黑白两种颜色;细化:找出图像的骨架,图像线条可能是很宽的,通过细化将宽度将为1,某些地方可能大于1。不同的细化算法,可能有不同的差异,比如是否更靠近线条中间,比如是否保持联通行等;边缘检测:主要是理解边缘的概念。边缘实际上是图像中图像像素属性变化剧烈的地方。可能通过一个固定的门限值来判断,也可能是自适应的。门限可能是图像全局的,也可能是局部的。简单验证码的识别对象如图1所示。
  其识别过程包括图像采集、预处理、识别几个方面,具体对应以下4个步骤:1)取出字模;2)二值化;3)计算特征;4)对照样本。
  2 技术实现
  以VB6.0为开发平台,用WebBrowser控件载入带有简单类型验证码的网页、imagebox控件保存验证码图片。使用doAuen()函数复制验证码图片并保存到本地,调用doClear()、doComp()方法生成验证码,调用doPost()方法提交。
  图像采集过程使用for each语句遍历WebBrowser1.Document.All,将tagName转换为大写字母与“IMG”匹配,以其id与验证码图片匹配。Vb提供了createControlRange()方法用于非文本元素选择区域,该方法返回一个controlRange集合,有add()方法用于添加元素,execCommand()方法用来对当前页面或选定区域或指定区域执行命令[6]:
  Set ctrl = WebBrowser1.Document.body.createControlRange()
  ctrl.Add (Dov)
  ctrl.execCommand ("Copy")
  Dov元素为验证码图片元素。execCommand 方法需要一个字符串参数指示所要进行的操作,此参数可以是任意能执行的参数关键字,Copy参数将选定区域复制到剪贴板。
  SavePicture 语句可以从对象或与其相关的Picture 、Image控件属性中将图形保存到文件中,完成图像的采集,其语法有两个参数,第一个参数为产生图形文件的 PictureBox 控件或Image 控件;第二个参数是文件路径:
  SavePicture Clipboard.GetD