美文网首页技术
基于CNN的可实际应用的图片验证码识别平台介绍

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

作者: 欢喜明 | 来源:发表于2018-07-08 12:56 被阅读164次

    这是一个图片字符型验证码识别平台,已投入实际应用;

    本文主要:

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

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

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

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

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

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

    (3)Python语言编写;

    (4)基于Tensorflow框架;

    (5)运行于Gunicorn服务器;

    (6)示意图:

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

    二、训练模型:

    1、获取原始数据

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

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

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

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

    目前打标签的过程:

    (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 —— 这就是训练过程;

    三、平台工作原理:

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

    示意图:

    解释:

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

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

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

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

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

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

    完毕;

    题外话:有需要识别字符型图片验证码的可以找我喔,准确率可达98%以上;

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/jvxouftx.html