bilibili的验证码识别的改进分割方法

针对之前的bilibili的验证码破解,遇到2个字符粘连的情况没法处理,有建议说用个聚类来分应该ok,我也想了一些分割的办法,今天来试一试看看。

现在打算尝试2个方案:
1、我自己的想法,粘连的2个字符的分割线从1/3到2/3遍历(分割线可能在1/3到2/3处的任何地方),分割线把连在一起的2个字符分开,然后把分开的2个字符拿去喂分类器得到2个置信度,取最小置信度。遍历完后,最小置信度最大的分割线就认为是最好的分割线,因为该分割线分开的2个字符得到了最好的识别。

于是就写了一个,试了一下分割结果如下,但是效果并不好:
10
13
14

分析了一下原因,觉得应该是训练样本只有验证码的有限样本,而并没有非验证码的样本。也就是说分类器只能区分一个字符是哪个验证码,而不擅长区分一个字符是不是验证码,这就导致了得到的最小置信度根本不可信,分割线也就肯定不准了。

2、聚类,用k-means聚类
聚类用欧氏距离,根据像素的位置来做聚类,拿这张验证码来举例:
__0005

分割是不成功的:

15

对于前两个字母做了一个kmeans聚类,可以看到的确分开了字符,当然了这是效果比较好的情况:
16

17

还有试了几个别的粘连的情况:
80

81

82

90

91

92

70

71

72

总结一下:kmeans聚类还是勉强可以把字符分开的,只是质量不太稳定,识别率也有了一定的提高。但是用kmeans分割后的字符识别率是比较低的,因为分割直接导致了字符的边缘受损,样本里没有这样的类型,以下是原来没法处理的粘连的识别结果(有的分割出来识别效果并不好):
r0

r1

r2

r3

r4

r5

以上

发表评论

电子邮件地址不会被公开。 必填项已用*标注