验证码识别/纯本地验证模块/没有调用接口

易语言 2020-04-26 18:29:15

1.先了解验证码(就先说我最先接触的 最简单的),最简单的验证码一般只有数字,上面的字一般是和背景色形成鲜明的对比 无论是字体高亮还是背景高亮 都能明显的看出验证码。而且上面的字都是同一种颜色,例如下图↓ 图中的4612都是蓝色
2.熟悉验证码结构后我们要有一个鲜明的思路来一步一步实现我们想要的结果 我的思路也是看视频学习别人的
1.----获取验证码图片-----从网络上 下载/采集 验证码图片 我的这个验证码库是以前一个人发了一个用接口识别的验证码例子 现在他的接口死了 正好我开始学 就用它的验证码库拿来学习
2.----二值化处理图片-----对验证码图片进行二值化处理(简单点说就是把图片变成黑白)
(2.1----二值化详细介绍-----这里我们来说一下二值化 二值化我的源码里也有 简单点说就是把图上每一个像素的颜色都挨个取出来跟我们设定的一个值对比如果比这个值大那么就给他换成白色,比这个值小那么就给他换成黑色,这样说能明白吧)
3.----分割处理后图片-----我这个源码是一步到位了,其实之前我是有让分割后的图片也显示出来的 有利于观察,最后搞好成品给删掉了.... 反正就是把每个字都分割出来 分割出4个方块就行 这样我们就得到4个黑白的数字背景是白色字是黑色的图片
4.----对比识别验证码-----对比识别也有好几种方法 这里我就介绍一种我自己最喜欢用的吧,字模对比,首先我们要做出来字模,先凑齐二值化并且分割好后的0-9数字的图片,然后一个一个记录,怎么记录?别急 这里教给你 我的思路是把这个只有一个数字的和黑白图片取出来然后把每个像素上的颜色都读出来 从坐标(0,0)然后(0,1)(0,2)(0,3).....一直到第二.三.四行继续(1,0)(1,1) 易语言坐标是从0开始的 一直到最后,如果说读出来的第一个像素是白色那么我们在一个文本里加入一个1,如果第二个是黑色那么我们在这个文本加入一个0以此类推最后你把这些0 1排列起来会发现所有的0连起来就是图片中黑色的那一部分。如果你那张图黑色部分是1那么这些0连起来就是1,懂了吧? 这一串由01组成的字串就是你图中数字的字模,把这一串字串保存下来,后面的我就不详细说了,从0-9每个的字串都保存下来,这样字模就制作好了,最后我们就要开始识别验证码了,就是对比,开始走我们的流程 1.获取验证码2.二值化处理3.分割成4张4.把分割后的第一张图片用上面的方法拼出它的由01组成的字串 然后跟我们之前保存好的0-9的字串一一对比如果和8的字串一样 那么这个第一个字就是8 后面就不用我多说了吧 4个都对比出来 然后把这4个弄到一起 这样我们就识别成功了!
ps:我的这个源码识别率很低 1是因为我也是刚刚开始学 2这还不算最简单的 这个验证码库的验证码背景色有点... 更简单的验证码是可以100%识别成功的 3有能力的人自己动手去做不要乱喷!