我们用易语言做软件的时候,有时会需要用验证码登陆软件,为了给客户使用方便,有没有在用户使用的时候自动输入验证码免去手动输入的麻烦,答案是有的,这就需要验证码的识别,有的平台是靠打码来实现的,那么今天我们不讲打码,讲一下这款次世代验证码识别软件。
(一)建立工程文件和项目文件
次时代验证码识别系统可以分别建立工程工具和项目文件。
其中,项目文件既是对应验证码的设置文件,包括了验证码识别所需的项目配置、滤镜库和字模库。一个项目对应一个单独的验证码。
工程文件是对项目文件的打包,是为管理项目文件而设立的。一个工程文件可以包括多个项目文件,也可以不包括任何项目文件。项目文件必须包含在工程文件内。系统默认建立了一个名为“default”的工程文件。
使用次世代验证码识别系统的第一步就是建立一个验证码识别工程文件。
这一步通常情况下十分容易,点击菜单“工程管理”——“新建工程”即可打开一个保存文件窗口,输入你想要的工程文件名,然后确定就建立了一个验证码识别工程文件。软件会自动把该文件设置为当前的工作工程文件。
然后点击菜单“项目管理”——“新建项目”,即可打开一个保存文件窗口,输入你想要的项目文件名,然后确定就建立了一个验证码识别项目文件。软件会自动把该文件设置为当前的工作项目文件。
(二)验证码图像下载链接的设置
当我们建立了一个验证码识别工程,接下来我们所要做的就是验证码图像下载链接的设置。这要分两种情况。
1)如果该链接是固定的,那么很简单,把链接填入最上面的那个长条形的编辑框即可。
2)如果链接不固定,也就是链接需要先在某个网页里面获取,则需要设置“获取图形高级设置”区域的内容。
该区域的各项设置解释如下:
地址:验证码所在的网页的地址。这个地址应该是固定的。
来路:有些网站需要检验网页的”Referer”,也就是这个网页是从哪个网页转入的,通常这里可以不填。
正则表达匹配网址:本软件内部用正则表达式提取验证码地址,这里填写的就是所需要的正则表达式。
匹配结果重新组合:如果用正则表达式获取的结果并非最终结果(通常都不是)那么这里可以将结果与其他文本重新组合以得到最终的验证码下载链接地址。
设置这里的内容需要一些正则表达式的基础。如果你懂得火车头采集器的使用方法,相信这对你不会造成困难,如果确实不会呢,你也完全可以自己手动把验证码图像下载回来,然后用本软件的“读入图像”功能载入,效果是一样的。
PS:你可以在地址栏直接输入本地文件目录,即可让软件读取本地图片。点击“下载图像”时,软件会自动按顺序读入指定目录内的图片,并可循环读取。
切记输入的必须是目录,这个目录内最好不要有除图片之外的其他格式的文件。
(三)使用滤镜处理图片
当我们设置好了验证码图像的下载链接,接下来我们要做的就是用软件内置的滤镜处理图像,处理的目的是去掉验证码图像的背景,噪声,干扰点,干扰线等,并把图片转成黑白二色图像,以便软件的识别。
关于滤镜的详细情况我们另行介绍,这里我们先点击“下载图像”按钮,把验证码图像下载回来再说。
结果如下图所示。因为还没有进行处理,所以“处理图像”和“原始图像”完全一致。请注意,“处理效果放大显示”区域显示的是处理图像的效果。
关于如何选择恰当的滤镜,很难用简单的几句话说清楚,但是依照我们的经验,对于大多数的验证码图像而言,其实直接使用“图像二值化”已经足够,这里我们选择使用“指定图像阈值”这个滤镜,阈值选择默认的127,看看处理的效果如何?
可以看到,背景已经被清除,但干扰点很多,而且两条干扰线也还存在着。这是因为我们为了显示次世代验证码系统的威力,特意选择了一个无法完全去除的验证码图像来做演示。对于大多数的验证码识别系统而言,这种验证码由于干扰线无法清除,图像很难分割,所以一般都无法有效识别。而次世代验证码识别系统可以在不分割图像的前提下有效识别验证码,这是该系统的优势和魅力所在。
大家可以自行测试我们免费提供的各个验证码识别工程文件的滤镜处理效果,可以看到,我们虽然提供了门类众多的滤镜,但对于大多数验证码而言,其实只要一两个滤镜就足够了。
(四)如何制作字模库?
当我们用滤镜处理好了图像,我们接着要着手的就是制作字模库了。
所谓字模库其实一些黑白的小图片,每张图片包含且仅包含了一个字符的图像数据。
制作字模库的要点就是把我们所需要的图片从已处理图片中分割出来。
次世代验证码识别系统提供了简单方便的制作手段。
我们先看看制作和管理字模库的窗口界面。
这个窗口的布局很简单,左上部分是图片处理区域,左下部分是字模存放区,右上角是输入字模对应的字符用的,右边中间的几个选项,而右下角是功能按钮。
当我们打开这个窗口时,主窗口的图片会直接出现在这里的图片处理区域,图片当然也是放大的,放大倍数同样可以调整。如果你觉得当前图片不适合制作字模,你也可以点击右下角的“下载图像”按钮,直接从验证码链接地址下载一个新的图像,这个图像会自动处理,使用的滤镜与主窗口相同。
选择合适图片的原则是各个字符各自分离,没有粘连,如上图所示就是一张合适的图片,因为它所表示的四个字符都是分离的。
选好图片以后,我们要把需要分割是字符用方框表示出来,这里可以使用手动分割,也可以自动切割。手动的话,点击“手工分割”,鼠标光标会变成十字形,再次点击会恢复原状,当鼠标是十字形的时候,我们在合适的地方点下鼠标左键,不放开并拉出一个方框,直到方框能容纳我们所需要的部分时,放开鼠标左键,一个蓝色的矩形就会把图像的某部分包括起来。这时我们把鼠标移到这个蓝色框的内部,双击鼠标,蓝色框内部分图像就会被切割下来,并单独显示在图像显示区域。
而自动分割就简单了,只要点击了“自动分割”按钮,软件会自动把各个独立的像素图用蓝色方框标识出来。效果如下图所示。我们只要双击某个蓝色框,就可以把它单独提取出来。
切下来的图像未必能符合我们的要求,因为可能包含了干扰点或干扰线,我们需要手动把这些东西去掉,方法很简单,把鼠标光标移到需要去除的某个像素点上(这里一个小的白色或黑色方块就代表一个像素点,如果看不清楚,可以点击“显示网点”按钮打开网点,则各个像素的边界会被清楚的表示出来),点击鼠标右键,这个点的颜色会反转,原来是黑色的会变成白色,反之白色的成为黑色,用这种方法去除掉所有的干扰点。下图是其中的一个字模的图像。
这样是不是就可以了呢?不完全是,我们还需要去掉这个图像可能存在的白边。所谓白边,就是指图像四周没有包含任何黑色点的一条横或竖的线条,对于我们的字模来说,这些白边必须去掉,方法很简单,点击“切成白边”即可。
到这里一个字模就算制作完成了,我们需要点击“添加全图”把它加入到字模库,字模数据会出现在窗口的左下角,同时右上角会出现这个字模的图像,我们需要“对应字符”那里,输入这个图像对应的字符,这里是“0”,回车,相应的数据就会被存储。
以上是一个字模的制作过程,当然,我们需要的不只一个字模,就算是纯数字验证码,我们也至少需要0~9十个字模,而对于复杂的验证码,相应的字模数量可能高达数百。
制作字模是非常重要的步骤,需要我们很好的耐心。
(五)图形滤镜说明
次时代验证码识别系统为用户提供了十大类三十多个图形处理滤镜,涉及了图形处理的方方面面,功能强大而使用方便,搞清楚这些滤镜的作用对于验证码识别十分重要。
以下按类别分别对这些滤镜进行说明。
一、图形缩放
这个类别只有一个滤镜,就是图形缩放滤镜,这个滤镜的作用是对验证码图形进行缩放操作。虽说是缩放,但实际上只有缩小图形的功能。这是考虑到对验证码图形进行放大没有意义而设置的。
这个滤镜主要用于某些尺寸过大的验证码图形。验证码图形太大,制作字模库很费劲,识别时所需时间太长,适当的缩小验证码图形,可以大大提高识别的速度。
二、裁剪图像
这个类别也只有一个滤镜。这个滤镜的功能是对验证码图像进行裁剪,可以用来调整验证码图像,去除没有字符图像的部分,提高识别的速度和准确性。
三、图像滤波
这个类别有五个滤镜,这些滤镜的作用都是对图像进行滤波,过滤掉图像中存在的噪点和干扰线之类。这些滤镜中作用较明显的是“中值滤波”和“去除细线条”。具体的作用视不同的图像而定,可以自己测试选用。
四、线性滤镜
这个类别有七个滤镜,这些滤镜的作用是对图像进行调整,突出某些图像元素,或过滤图像中的白噪声,其中的“锐化”、“轮廓”、“边缘”等较为常用。
五、清除背景
这个类别包含两个滤镜,分别按“颜色”和“亮度”去除 图像中的某些像素。这两个滤镜的工作原理是遍历图像中的所有像素,保留部分像素,而将其他的像素颜色置为白色。举例来说,“按颜色大于20000”去除背 景,就是把图像中所有颜色值大于20000的像素都置为白色,而小于等于20000的像素颜色不变。其余的类推。
六、像素分离
这个类别也包含两个滤镜,跟“清除背景”类相似,也是 分别按“颜色”和“亮度”去除图像中的像素。不同的是,这两个滤镜,先对图像的像素按颜色或亮度进行统计,然后排序,保留同一颜色或亮度数量最多的几种颜 色或亮度,并把其他的像素置为白色。准确的使用可以用来分离背景或前景颜色或亮度十分复杂的图像,并把字符对应的像素完整的提取出来。
七、颜色处理
这个类别的两个滤镜主要用来对图像的颜色进行统一的处理。“转为灰度图”就是把验证码图像转成256级灰度图。“底片效果”则可以将图像的颜色翻转过来。如果某些验证码图像背景为黑色而前景为白色,则可以用“底片效果”翻转一下。
八、图像二值化
这个类别包含四个滤镜。这大概是使用最频繁的类别了。 基本上任意一个验证码都应该用这个类别的滤镜处理下,或作为图像处理的一个步骤。这个类别的作用就是把图像转成黑白二色图。对于多数的验证码图像,其实使 用这一类滤镜中的某一个滤镜就够了。下面对这四个滤镜分别进行介绍。
1.所有非白色像素变黑
这个滤镜简单的将验证码图像中所有不是白色的像素都置为黑色。
2.指定图像阈值
这个滤镜需要一个参数,就是所谓的阈值。使用时,该滤镜对图像的像素按阈值进行分类,亮度小于阈值的置为白色,大于等于阈值的则置为黑色。这是最常用的滤镜。
3.图像中值+差值
这个滤镜与上面那个类似,但不是直接指定阈值,而是制定一个差值。使用时,先测量出图像的亮度平均值,再将这个均值与差值进行相加,得到的数值作为阈值。将差值置为负值可以在均值上减去差值。这适用于图像平均亮度有较大变化的图像。
4.自动二值化
这个滤镜也是按阈值处理的,但这个滤镜内置了图像的阈值算法,对图像的不同部位使用不同的阈值,省去了人工指定阈值的麻烦,对于特定的验证码图像有很好的效果。
九、黑白图处理
这类滤镜用于后期处理,请在使用第八类滤镜后再用这类滤镜,因为这些滤镜只能处理黑白图像。下面分别介绍里面的各个滤镜。
1.抽取骨架
这个滤镜可以将图像线条细化,将粗线条变成只剩中心的细线条,大大减少字符图像包含的像素数目。这对特定的验证码图像非常有用。
2.腐蚀
这个滤镜将图像的线条剥去一层,就好像将图像腐蚀了一样。因此得名“腐蚀”。这可以去除图像之间的“小桥”,使不同的字符分离开来。
3.膨胀
这个滤镜的作用与“腐蚀”相反,图像的线条会变得更厚,就好像图像膨胀了一样。
4.开运算
开运算其实就是对图像先腐蚀再膨胀。
5.闭运算
闭运算是开运算的反演,对图像先膨胀后腐蚀。
6.缩水
这个滤镜也是用来缩小图像的。但与图像缩放不同的是,这个滤镜不会造成线条的断裂。如果处理过后的验证码图像单个字符面积太大,像素“密度”太低,它可以将面积缩小,“密度”提高,使用得当可以显著减少字模库的数量。
十、“亮度/对比度”
这两个滤镜用来调整图像的亮度和对比度。使用很简单,就不详细介绍了。