1.本技术属于验证码识别技术领域,更具体地说,涉及一种倾斜汉字点选验证码识别方法。
背景技术:2.验证码是网站用于防止恶意攻击的重要手段,验证码的形式多种多样,汉字点选验证码就是其中一种优秀的设计,相比较传统的输入字符型验证码,汉字点选验证码安全性高,同时对用户十分友好。
3.汉字点选验证码在有效防止恶意攻击的同时,也对没有恶意的自动化程序造成了极大的影响,使原本可以自动化的流程被迫分离开,降低了工作效率。同时,也为了评估汉字点选验证码的安全性,往往需要设计相应的验证码识别方法来对抗测试。
4.已有的点选验证码识别技术只适用于常规的不倾斜的文字,尚未对带倾斜角度的汉字点选验证码识别提出有效解决方案。
5.因此,提出一种倾斜汉字点选验证码识别方法,以提高汉字点选验证码的识别准确率,为验证码识别测试和无恶意的自动化程序提供参考解决方案。
技术实现要素:6.本技术的目的在于针对上述问题,提出一种倾斜汉字点选验证码识别方法,该方法能够有效矫正一定角度范围内的汉字倾斜,并最大程度利用验证码标题中的已知条件,有效提高文字识别的准确率。
7.为实现上述目的,本发明所采取的技术方案为:
8.一种倾斜汉字点选验证码识别方法,包括:
9.获取验证码图片,进行目标检测得到图片中所有汉字的位置矩形框;
10.以得到的矩形框作为自适应前后景分割的依据进行前后景分割,将前后景分割得到的含有汉字的前景相加,得到仅含有汉字前景的验证码图片;
11.对仅含有汉字前景的验证码图片按矩形框位置进行裁剪,裁剪出每个汉字对应的子图,将子图转为二值图像,检测出二值图像的轮廓并得到对应的最小外接矩形框;
12.对每个子图的外接矩形框,计算相邻两条边的斜率,换算为倾斜角度,分别根据所得到的倾斜角度对子图进行角度纠正,将子图原图及纠正后的两个子图作为待识别子图;
13.对每个汉字的三个待识别子图,分别采用文字识别模型进行识别,得到每个待识别子图识别为每个候选汉字的概率,从中选取概率最大值对应的待识别子图,将验证码图片中所有汉字选取出的待识别子图及其识别为每个候选汉字的概率,组成概率矩阵;
14.在概率矩阵中循环使用查找最大值并删除所在行列的方式得到文字位置矩形框和候选汉字的最佳匹配结果。
15.进一步的,所述进行目标检测得到图片中所有汉字的位置矩形框,采用yolox来进行目标检测。
16.进一步的,所述以得到的矩形框作为自适应前后景分割的依据进行前后景分割,采用opencv中的grabcut前后景分割算法。
17.进一步的,所述将子图转为二值图像,检测出二值图像的轮廓并得到对应的外接矩形框,采用opencv轮廓检测方法。
18.进一步的,所述分别采用文字识别模型进行识别,所采用的文字识别模型为paddleocr。
19.进一步的,所述以得到的矩形框作为自适应前后景分割的依据进行前后景分割,将前后景分割得到的含有汉字的前景相加,得到仅含有汉字前景的验证码图片,还包括:
20.如果分割出的前景面积占比小于优选的概率10%,则判断汉字前景被误当作背景而被去除,这种情况下,放弃分割结果,采用原图作为含有汉字前景的验证码图片。
21.本技术提出了一种倾斜汉字点选验证码识别方法,与现有点选验证码识别方法相比,矫正了验证码中的倾斜汉字,提高了汉字点选验证码的识别准确率。
附图说明
22.图1为本技术倾斜汉字点选验证码识别方法流程图。
23.图2为本技术分割后的汉字前景图。
24.图3为本技术最小外接矩形框出二值图像轮廓的图。
25.图4为本技术汉字倾斜角度示意图。
26.图5为候选纠正子图识别结果概率列表。
27.图6为最终识别结果列表。
具体实施方式
28.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅用以解释本技术,并不用于限定本技术。
29.在一个实施例中,如图1所示,提出了一种倾斜汉字点选验证码识别方法,包括:
30.步骤s1、获取验证码图片,进行目标检测得到图片中所有汉字的位置矩形框。
31.在需要进行验证码验证时,会弹出倾斜汉字点选界面,提示用户按照提示顺序点选界面上的汉字,在用户点选后提交点选后的验证码图片。
32.然后,对验证码图片进行目标检测,例如采用yolox来进行目标检测,获取到验证码图片中所有倾斜汉字的矩形框位置信息。
33.本实施例中,用n来表示验证码图片中所有汉字的数量,从而通过目标检测,得到n个汉字的矩形框位置向量:box=[box1,box2,...,boxn],其中第i个矩形框表示为:boxi=[x
i1
,y
i1
,x
i2
,y
i2
],(x
i1
,y
i1
)表示矩形框的左上角顶点坐标,(x
i2
,y
i2
)表示矩形框的右下角顶点坐标。
[0034]
步骤s2、以得到的矩形框作为自适应前后景分割的依据进行前后景分割,将前后景分割得到的含有汉字的前景相加,得到仅含有汉字前景的验证码图片。
[0035]
本实施例采用opencv中的grabcut前后景分割算法,循环n次,依次对每个汉字矩形框位置boxi进行前后景分割,即将矩形框位置boxi作为算法输入参数进行前后景风格,分
割后保留汉字前景,记为grabcutimgi,把n次分割后的前景相加,得到只有n个汉字前景的验证码图片grabcutimg:
[0036][0037]
在一个具体的实施例中,所得到的含有倾斜汉字前景的验证码图片如图2所示。
[0038]
步骤s3、对仅含有汉字前景的验证码图片按矩形框位置进行裁剪,裁剪出每个汉字对应的子图,将子图转为二值图像,检测出二值图像的轮廓并得到对应的最小外接矩形框。
[0039]
本实施例对于含有倾斜汉字前景的验证码图片,裁剪出每个汉字矩形框对应的子图boximg=[boximg1,boximg2,...,boximgn],转为二值图像,然后使用opencv轮廓检测方法得到二值图像的轮廓。
[0040]
再使用最小外接矩形框住轮廓点,如图3所示,得到外接矩形的四个点坐标rect=[rect1,rect2,...,rectn],其中第i个外接矩形表示为:recti=[[x
i1
,y
i1
],[x
i2
,y
i2
],[x
i3
,y
i3
],[x
i4
,y
i4
]],[x
i1
,y
i1
],[x
i2
,y
i2
],[x
i3
,y
i3
],[x
i4
,y
i4
]分别表示四个顶点的坐标。
[0041]
步骤s4、对每个子图的外接矩形框,计算相邻两条边的斜率,换算为倾斜角度,分别根据所得到的倾斜角度对子图进行角度纠正,将子图原图及纠正后的两个子图作为待识别子图。
[0042]
本实施例,使用三种不同角度angle=[angle1,angle2,angle3]的子图作为待识别子图。
[0043]
具体的,如图4所示,找到四个点中左、下两个点,计算其所在直线的斜率k=-1/((y1-y2)/(x1-x2)),再换算成角度angle1=arctan(k)*180/π,同样,右、下两个点所在直线对应的角度为angle2,并且存在关系angle1=angle2+90
°
,然后分别对boximg旋转指定角度即可得到两个待识别子图。
[0044]
第三个待识别子图是子图原图,即angle3=0
°
。
[0045]
步骤s5、对每个汉字的三个待识别子图,分别采用文字识别模型进行识别,得到每个待识别子图识别为每个候选汉字的概率,从中选取概率最大值对应的待识别子图,将验证码图片中所有汉字选取出的待识别子图及其识别为每个候选汉字的概率,组成概率矩阵。
[0046]
本实施例中,假设验证码提示包括m(m《=n)个汉字word=[word1,word2,...,wordm],作为候选汉字。
[0047]
针对每一个矩形框,得到三种不同角度的待识别子图后,分别输入到文字识别模型paddleocr识别,从模型输出中得到分别对应于候选汉字m个字的概率:
[0048]
answer=[answer1,answer2,answer3](answeri=[probability1,probability2,...,probabilitym])。
[0049]
例如,候选汉字有三个,分别是肉、夹、饼。在三个候选汉字的概率表中选择包含最大概率的那个答案:
[0050]
bestanswer=answeri,max[max(answer),max(answer2),max(answer3)]∈answeri。
[0051]
因为它最大概率能够对应候选汉字中的某个字,如图5所示,最大概率用粗体标记,概率数组bestanswer用下划线标记,这样,每个boximg就对应了一个最佳矫正角度和一
个候选汉字的概率数组bestanswer,n个boximg对应一个n*m的概率矩阵mat。
[0052]
在mat中选出一个概率最大值,所在行列(i,j)即确定了对应小图boximgi及候选汉字wordj,然后从mat中删除第i行第j列,重复m次即得到了最佳匹配结果。
[0053]
如图6所示,第一轮最大概率为第二行第二列的0.94733,意味着第二张图对应第二个候选汉字,随后删除第二行和第二列,第二轮最大概率为第三行第一列的0.85409,意味着第三张图对应第一个候选汉字,随后删除第三行和第一列,第三轮只剩下一个第一行第二列的0.00072,意味着第一张图对应第二个候选汉字。
[0054]
根据得到的匹配结果,按照候选汉字中汉字word的顺序,确定所需要点选的汉字矩形框位置box的顺序。
[0055]
本实施例中,“grabcut”是一种交互式图像分割算法,用一个矩形框标注前景位置,即可进行自动分割。对于少数背景复杂的场景,可能存在分割效果不如预期的情况,表现为汉字前景也被误当作背景而被去除,通过分割出的前景面积占比可以判断这种情况是否发生,这种情况下,放弃grabcut分割,保留原图。
[0056]
例如,如果分割出的前景面积占比小于优选的概率10%,则判断汉字前景被误当作背景而被去除,这种情况下,放弃分割结果,采用原图作为含有汉字前景的验证码图片。
[0057]
本实施例中,“二值图像”指的是先由三通道图像转为单通道灰度图,然后把所有不为0的像素都置为255。
[0058]
本实施例中,“轮廓检测”和“最小外接矩形”是opencv已有方法,但两个方法的衔接需要手动对多层次轮廓点进行汇总。
[0059]
以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。