本发明涉及图像识别领域,尤其涉及一种字符型验证码自动识别方法、终端设备及存储介质。
背景技术:
随着互联网反爬取技术的不断发展,人机校验成为数据采集领域的一个绕不过去的坎。一般情况下,数据采集方可以利用分布式数据采集系统以及代理ip在单位时间内对多个目标网站进行高并发的访问,来达到高效采集的目的。但是,当目标网站引入字符型图片验证码人机验证技术来反爬取时,数据采集程序便无法再自动获取到目标网站的内容。
在现有技术中,主要有三种方式可以绕过字符型图片验证码人机验证反爬的封禁:①控制请求目标资源的频率,限制同一ip在单位时间内对同一域名下url的访问次数;②使用ip代理池,通过调用大量代理ip在不触发网站字符型图片验证码人机验证机制的情况下限制单ip在单位时间内对同一域名下url的访问次数,模拟对目标网站的正常访问;③通过技术手段实现对字符型图片验证码的自动识别,从而实现目标数据源的自动获取。对于前两种方式虽然能有效地绕过验证,但是由于需要限制单位时间内的访问频率,且现有代理ip资源不足的情况下,是无法实现对有验证机制网站高效、快速并及时的采集;所以,通过技术手段实现对字符型图片验证码的自动识别再配合大量代理ip,即可模拟对该类型网站的正常人为访问,达到高效、快速并及时地采集目标数据的目的。
因此,在针对有字符型图片验证码反爬机制的网站爬取领域,亟需一种对技术领域专业性要求较低,且能够实现对字符型图片验证码的高命中率识别的技术,从而保证爬虫数据爬取的高效性、稳定性。
技术实现要素:
为了解决上述问题,本发明提出了一种字符型验证码自动识别方法、终端设备及存储介质。
具体方案如下:
一种字符型验证码自动识别方法,包括以下步骤:
s1:采集字符型验证码图片并对其进行标注后组成训练集;
s2:构建卷积神经网络模型,通过训练集对卷积神经网络模型进行训练,使得训练后的最终模型的识别准确率大于准确率阈值;
s3:当接收到字符型验证码图片时,将字符型验证码图片转换成二进制文件流后,输入最终模型进行识别,输出识别结果。
进一步的,步骤s1中字符型验证码图片的采集包括以下步骤:
s111:采集字符型验证码图片并存储至待标注文件夹;
s112:对待标注文件夹中存储的所有字符型验证码图片的尺寸大小和完整性进行校验,将校验失败的图片从待标注文件夹内删除;
s113:对待标注文件夹中的所有图片进行二值化处理后,将图片的文件名命令为图片唯一标识码。
进一步的,步骤s1中标注的过程包括以下步骤:
s121:随机读取待标注文件夹下的一张图片并发送至显示页面进行显示;
s122:当接收到图片的标注信息后,判断中间标注结果文件夹内是否存在该图片,如果存在,进入s123;否则,将该图片存入中间标注结果文件夹内,并将接收到的标注信息和标注次数添加至该图片的文件名内,进入s125;
s123:判断中间标注结果文件夹内存储的该图片的文件名中标注信息与接收到的标注信息是否相同,如果是,进入s124;否则,删除中间标注结果文件夹内存储的该图片,进入s125;
s124:判断标注次数是否为标注次数阈值,如果是,将接收到的标注信息作为该图片的最终标注信息,将图片存储至已标注文件夹内,并将最终标注信息添加至该图片的文件名内,同时删除待标注文件夹内的该图片,进入s125;否则,将该图片的文件名内的标注次数加1,进入s125;
s125:判断待标注文件夹是否为空,如果是,结束,否则,返回s121。
进一步的,步骤s3中字符型验证码图片的接收方式为:构建基于flask框架的用于接收字符型验证码图片的web接口,通过该web接口接收字符型验证码图片的二进制文件流。
进一步的,步骤s3中包括:当接收到字符型验证码图片的二进制文件流后,将其还原为图片后,对图片的尺寸大小和完整性进行校验,如果校验未通过,则返回未通过校验的提示;如果校验通过时,对图片进行二值化处理后,通过最终模型进行识别,并返回识别结果。
一种字符型验证码自动识别终端设备,包括处理器、存储器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本发明实施例上述的方法的步骤。
一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例上述的方法的步骤。
本发明采用如上技术方案,解决了在数据采集过程中目标网站有字符型图片验证码人机验证机制时,爬虫无法自动识别验证的问题,保障数据采集程序的高效性及稳定性,对数据采集程序的高效稳定采集能够起到重要作用。
附图说明
图1所示为本发明实施例一的流程图。
图2所示为该实施例中卷积神经网络模型的示意图。
具体实施方式
为进一步说明各实施例,本发明提供有附图。这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理。配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点。
现结合附图和具体实施方式对本发明进一步说明。
实施例一:
本发明实施例提供了一种字符型验证码自动识别方法,如图1所示,其为本发明实施例所述的字符型验证码自动识别方法的流程图,所述方法包括以下步骤:
s1:采集字符型图片并对其进行标注后组成训练集。
(1)由于搜狗微信文章搜索是典型的带有字符型图片验证码人机验证的网络站点,因此该实施例中以搜狗微信文章搜索为例,来对搜狗微信文章的公开数据进行大规模采集,则对字符型验证码图片的采集具体包括以下步骤:
s111:采集字符型验证码图片并存储至待标注文件夹。
该实施例中将100000张事先下载保存好的搜狗微信文章搜索的人机验证页面的字符型验证码图片导入待标注文件夹。
s112:对待标注文件夹中存储的所有字符型验证码图片的尺寸大小和完整性进行校验,将校验失败的图片从待标注文件夹内删除。
校验失败即不符合设定的尺寸大小或图片不完整。
s113:对待标注文件夹中的所有图片进行二值化处理后,将图片的文件名命令为图片唯一标识码,该实施例中设定唯一标识码为当前时间戳,在其他实施例中也可以设定为其他值,如随机唯一编码,在此不做限制。
通过对图片进行二值化处理后再输入机器学习模型进行训练学习,可以降低后续机器学习的样本复杂度。
(2)标注的过程包括以下步骤:
s121:随机读取待标注文件夹下的一张图片并发送至显示页面进行显示;
s122:当接收到图片的标注信息后,判断中间标注结果文件夹内是否存在该图片,如果存在,进入s123;否则,将该图片存入中间标注结果文件夹内,并将接收到的标注信息和标注次数添加至该图片的文件名内,进入s125;
s123:判断中间标注结果文件夹内存储的该图片的文件名中标注信息与接收到的标注信息是否相同,如果是,进入s124;否则,删除中间标注结果文件夹内存储的该图片,进入s125;
s124:判断标注次数是否为标注次数阈值(该实施例中为2),如果是,将接收到的标注信息作为该图片的最终标注信息,将图片存储至已标注文件夹内,并将最终标注信息添加至该图片的文件名内,同时删除待标注文件夹内的该图片,进入s125;否则,将该图片的文件名内的标注次数加1,进入s125;
s125:判断待标注文件夹是否为空,如果是,结束,否则,返回s121。
通过上述标注方式,每一张图片将会以随机出现的方式被标注共3次,只有当3次标注结果均相同时,才将标注信息作为该图片的最终标注信息,提高了标注的准确性。
s2:构建卷积神经网络模型,通过训练集对卷积神经网络模型进行训练,使得训练后的最终模型的识别准确率大于阈值。
该实施例中构建的卷积神经网络模型如图2所示,包括三次(卷积、池化、降采样、线性整流函数)计算,然后进行(全连接、降采样、线性整流函数)计算,再进行(全连接、softmax回归)计算,最后将计算结果输出至模型中保存。
由于模型用于识别字符验证码,那么模型输出应为字符,即为数字0~9和字母a~z,其中字母不区分大小写。
通过将训练集中的各样本输入卷积神经网络模型后,得到模型的识别结果,根据识别结果的字符准确率(识别正确字符数/总识别字符数)、图片准确率(图片识别正确数/总识别图片数)和准确率阈值的大小关系,对模型中的各参数进行调整,使得最终识别到的准确率大于准确率阈值。准确率阈值本领域技术人员可以根据需求进行设定。
如果想要进一步提升模型识别的准确率,可以进一步加大训练样本的数量进行二次训练。
s3:当接收到字符型验证码图片时,将字符型验证码图片转换成二进制文件流后,输入最终模型进行识别,输出识别结果。
字符型验证码图片的接收方式为:构建基于flask框架的用于接收字符型验证码图片的web接口,通过该web接口自动接收字符型验证码图片的二进制文件流。
当接收到字符型验证码图片的二进制文件流后,将其还原为图片后,对图片的尺寸大小和完整性进行校验,如果校验未通过,则返回未通过校验的提示;如果校验通过时,对图片进行二值化处理后,通过最终模型进行识别,并返回识别结果。
该实施例中返回未通过校验的提示时,对应发送http-415应答状态码,返回识别结果时,对应发送http-200应答状态码,提示本次请求识别有效。
本发明实施例一解决了在数据采集过程中目标网站有字符型图片验证码人机验证机制时,爬虫无法自动识别验证的问题,保障数据采集程序的高效性及稳定性,对数据采集程序的高效稳定采集能够起到重要作用。
实施例二:
本发明还提供一种字符型验证码自动识别终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本发明实施例一的上述方法实施例中的步骤。
进一步地,作为一个可执行方案,所述字符型验证码自动识别终端设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述字符型验证码自动识别终端设备可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,上述字符型验证码自动识别终端设备的组成结构仅仅是字符型验证码自动识别终端设备的示例,并不构成对字符型验证码自动识别终端设备的限定,可以包括比上述更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述字符型验证码自动识别终端设备还可以包括输入输出设备、网络接入设备、总线等,本发明实施例对此不做限定。
进一步地,作为一个可执行方案,所称处理器可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述字符型验证码自动识别终端设备的控制中心,利用各种接口和线路连接整个字符型验证码自动识别终端设备的各个部分。
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述字符型验证码自动识别终端设备的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据手机的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例上述方法的步骤。
所述字符型验证码自动识别终端设备集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)以及软件分发介质等。
尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。
1.一种字符型验证码自动识别方法,其特征在于,包括以下步骤:
s1:采集字符型验证码图片并对其进行标注后组成训练集;
s2:构建卷积神经网络模型,通过训练集对卷积神经网络模型进行训练,使得训练后的最终模型的识别准确率大于准确率阈值;
s3:当接收到字符型验证码图片时,将字符型验证码图片转换成二进制文件流后,输入最终模型进行识别,输出识别结果。
2.根据权利要求1所述的字符型验证码自动识别方法,其特征在于:步骤s1中字符型验证码图片的采集包括以下步骤:
s111:采集字符型验证码图片并存储至待标注文件夹;
s112:对待标注文件夹中存储的所有字符型验证码图片的尺寸大小和完整性进行校验,将校验失败的图片从待标注文件夹内删除;
s113:对待标注文件夹中的所有图片进行二值化处理后,将图片的文件名命令为图片唯一标识码。
3.根据权利要求1所述的字符型验证码自动识别方法,其特征在于:步骤s1中标注的过程包括以下步骤:
s121:随机读取待标注文件夹下的一张图片并发送至显示页面进行显示;
s122:当接收到图片的标注信息后,判断中间标注结果文件夹内是否存在该图片,如果存在,进入s123;否则,将该图片存入中间标注结果文件夹内,并将接收到的标注信息和标注次数添加至该图片的文件名内,进入s125;
s123:判断中间标注结果文件夹内存储的该图片的文件名中标注信息与接收到的标注信息是否相同,如果是,进入s124;否则,删除中间标注结果文件夹内存储的该图片,进入s125;
s124:判断标注次数是否为标注次数阈值,如果是,将接收到的标注信息作为该图片的最终标注信息,将图片存储至已标注文件夹内,并将最终标注信息添加至该图片的文件名内,同时删除待标注文件夹内的该图片,进入s125;否则,将该图片的文件名内的标注次数加1,进入s125;
s125:判断待标注文件夹是否为空,如果是,结束,否则,返回s121。
4.根据权利要求1所述的字符型验证码自动识别方法,其特征在于:步骤s3中字符型验证码图片的接收方式为:构建基于flask框架的用于接收字符型验证码图片的web接口,通过该web接口接收字符型验证码图片的二进制文件流。
5.根据权利要求1所述的字符型验证码自动识别方法,其特征在于:步骤s3中包括:当接收到字符型验证码图片的二进制文件流后,将其还原为图片后,对图片的尺寸大小和完整性进行校验,如果校验未通过,则返回未通过校验的提示;如果校验通过时,对图片进行二值化处理后,通过最终模型进行识别,并返回识别结果。
6.一种字符型验证码自动识别终端设备,其特征在于:包括处理器、存储器以及存储在所述存储器中并在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1~5中任一所述方法的步骤。
7.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现如权利要求1~5中任一所述方法的步骤。
技术总结