基于CNN的可实际应用的图片验证码识别平台介绍

这是一个图片字符型验证码识别平台;

本文主要:

一、简单介绍图片验证码识别平台;

二、介绍训练模型(识别图片验证码) :详细介绍从获取验证码原始数据、打标签、特殊处理到训练出模型的过程,解释什么是训练;

三、平台工作原理:介绍平台对图片(验证码)的处理过程;


一、简单介绍图片验证码识别平台:

(1)一个图片验证码识别平台,提供接口,接收base64编码图片,识别,返回结果;

(2)基于卷积神经网络( Convolutional Neural Network, CNN );

(3)Python语言编写;

(4)基于Tensorflow框架;

(5)运行于Gunicorn服务器;

(6)示意图:

基于CNN的可实际应用的图片验证码识别平台介绍_第1张图片

解释:图片验证码经base64编码后,发送到验证码识别平台(PCP),平台返回识别结果;


二、训练模型:

1、获取原始数据

即是到目标网站获取足够多需要识别的验证码图片,用于接下来的训练;

基于CNN的可实际应用的图片验证码识别平台介绍_第2张图片


2、对图片验证码打标签(有监督学习)

对获取到的大量原始验证码图片需要正确标记:每个图片验证码对应的正确字符;标记完后还需要核对,确保正确,否则会非常影响训练的准确性;

这一步最耗费时间和精力;

基于CNN的可实际应用的图片验证码识别平台介绍_第3张图片

目前打标签的过程:

(1)写一段代码,使用现有的OCR库,对一部分图片(如1000张)进行初次识别;

(2)然后进行人工修改、打标签;

(3)最后人工核对;得到了1000张正确打好标签的验证码图片;

(4)重复(1)~(3)步,如,得到了2000张正确打好标签的验证码图片;——当然,可以一直如此重复,直到得到所需要的图片数量;

(5)另:把此2000张图片进行训练,如准确率能有0.7以上,那么可用此训练的模型识别原始(未打标签)的图片——即是替换(1),OCR的成功率非常低;

(6)得到所需要的打好标签的图片数量,如1万张;


3、进行模型训练

把标记好的图片验证码输入写好的AI程序中,进行训练;

一般要求准确率达到0.98;

对于训练来说,理想的情况是:输入的数据越多(打好标签的图片)、训练的次数越少,如此得到的模型越好,可以用下面的公式表达:

acc = Ax + By

A、B: 权重;x: 图片;y: 次数;acc: 准确率;


上面的1~3步,就是训练模型的一般过程;

存在问题:需要大量的打好标签的图片,耗时费力;

所以,一般采用针对不同的验证码图片进行特殊处理的方法:切割大法;

切割法操作如下(大致思路,因为每个验证码特征不同,处理方法会不同):

如有验证码图片:

同一种验证码,模式都会是固定的,针对上面的验证码可以这样切割:

得到:

然后合成一张图片:

最后,训练、识别都是针对:

其实,就是将拥有特殊、多字符的验证码图片转为简单、少字符的图片;

如此一来:

只需要训练识别0-9数字;

打标签数量大大减少,300张;

打标签难度也大大减少,仅需要输入数字;


再如,此种验证码:

直接切割4个单独字符的图片:

然后,训练、识别都是针对单个字符图片进行,难度也大大降低,准确率大大提高;

打标签的数量也大大减少;

一些数据:由于此图片,底色有绝对的干扰,测试中发现,直接训练的话,3000张图片进行训练,准确率也只有区区0.1%;

利用切割方法,只用1000张图片,切割得到4000张单独字符的图片,训练8100次,准确率即可达到0.995;


简单解释一下什么是训练,这是一个数学问题:

先看基本的函数,如:y = 2x + 1,输入x=1,输出y=3;这是已经知道函数对应关系f = 2x + 1;

再看高阶一点的数学,如:已知 y = 2x + 1,y = 3,求x;从输出,反推输入,同样也是知道函数对应关系f = 2x + 1;

再进阶一步,就接触到机器学习了,函数对应关系f ,我们不知道,但是知道了x、y的值(x就是验证码图片、y就是对应的标签),求对应关系f;

如果是简单的,已知函数f的形式,如:y = ax + b;只要两组(x, y)即可求得a、b;从而求得f;

如果是完全不知道函数的形式,那么就需要构造函数,f 可能是 2x + 1、3x + 3、x^2 + 1等等无数种情况;仅有两组(x, y)是无法得出f的;但是如果有大量的(x, y),就能通过“逼近计算”方法,不断调整公式权重,近似求得函数f —— 这就是训练过程;


三、平台工作原理:

简单介绍平台对图片(验证码)的处理过程;

示意图:

基于CNN的可实际应用的图片验证码识别平台介绍_第4张图片

解释:

图片验证码通过base64编码后,通过提供的API发送到验证码识别平台;

平台获取图片的宽高,然后进入判别器1:根据针对此验证码配置的属性,决定是否要切割图片(若要切割,切割的尺寸是多大);

如果发现有两种不同的验证码尺寸一样,那么需要进入判别器2:根据图片特征对图片进行分类;

经过判别器1和判别器2,可以确定此图片验证码对应的是哪个训练模型(用于最终的识别)、是否要切割、切割成多大;

最后,把图片切割成预定的大小,选择对应的模型,进行识别,返回结果;


以上就是利用AI识别验证码的简单介绍;

完毕;

你可能感兴趣的:(基于CNN的可实际应用的图片验证码识别平台介绍)