现在网站的验证码有很多,典型的有以下几种:
1.滑块验证码
2.文字点选验证码
3.基本数字字符验证码
问题分析第一种验证码,需要定位缺少部分的位置。这个位置本来计划用模板匹配方法进行匹配的,但是在测试过程中实在是不准确,没办法,只能换个思路了。想着这个不需要十分精确的位置,而且场景单一,我根本不需要那个裁剪出来的滑块,那么直接用目标检测这个缺损区域不是更简单吗?
第二种验证码,图像顺序识别顺序图片也就是一个OCR,可以简单用OCR识别解决,需要解决的是图片样本不够多,需要找到一种类似的生成办法生成样本。现在要解决的选那些汉字作为样本。你本身无法知道验证码里面的汉字有多少个。最后只能先用常用汉字生成来测试看看。由于点选汉字还有颜色,还需要给不同汉字加上不同的颜色,颜色的话就用取色器采集样本中出现的几种。最后根据识别出来的文字点选目标图中的汉字返回坐标即可
第三种验证码和第二种是类似的识别方法。第三种验证码那么字符真的是缺胳膊掉腿的。你还没办法认全这么个字符。只能挑了一些可以认得的字符进行样本提取。背景的话百度上也能找到,百度识图还是好操作的。
pipeline1.数据
对于第一种验证码,数据大概有400多张图片,由于其场景简单,又有明显的阴影区域,因此识别数据量应该是足够的。
对于第二种验证码,主要是汉字数量太多,因此需要准备出现的基本汉字,然后进行样本图片的生成。最后使用了github上的captcha方式模拟验证码。点选图片背景百度上可以找到,然后需要把基本汉字生成楷体,并进行大小和方向的旋转。
第三种同上。由于英文字母相对于汉字来说,要简单得多,因此这里采用的是将每一个样本的英文字母裁剪下来,得到26个字母和10个数字的图片集合,然后随机选择4个进行粘贴在背景图片(百度上可以搜索到)上。
2.训练
训练可以参考之前的文章,关于训练yolov4和训练lprnet的文章。这里简单说一下,第一个选择了yolov4-tiny进行训练,第二个检测目标选择yolov4-custom进行训练,字符识别选择lprnet,最后一个选择lprnet进行训练。
这里图片尺寸比较统一,因此训练起来就比较简单。
3.预测
darknet的预测其实非常简单的,通过作者的ctype的python接口或者直接用c 接口预测。后面将介绍一下python调用c 和c的一些内容。
最后说一下,pybind11比ctype好用,而且生成动态库实用。
本文完