深度学习识别汉字点选验证码

背景

国家企业信用信息公示系统查询时使用极验验证码,大概率为第三代汉字语序点选识别。

查询资料发现可使用深度学习进行汉字定位及分类。

参考资料

实践后效果:

使用的框架、算法及工具:

踩坑

汉字定位和分类学习详尽的实践步骤参考资料中都有说明,这里不再叙述。这里记录下实践过程中踩的坑及一些特殊处理。

darknet环境

  1. 坑1:不要使用cpu训练
  2. windows/linux推荐使用 AlexeyAB/darknet,专门定制。
    • VS2017 + VC++2015 v140工具集
    • CUDA9.0坑2: 10.0 在win10 nvidia gtx 1080 ti上报 cuda error:no error,==!答案搜都搜不到,耽搁许久尝试降级才成功)
    • OpenCV 3.4.0
    • cuDNN7.1

分类样本

  1. 坑3:使用手工标注汉字分类样本500张1h后发现刚不住,可使用打码平台,多进程8w张3h搞定。

  2. 坑4:分离1.3k汉字训练后验证100张发现准确率同样为85%!无需更多样本分离更多汉字。

  3. 坑5:人工打码准确率不能奢望,又花费1h对词频小于10的茫茫多汉字进行修正(脚本在仓库)。

yolo训练

  1. 坑6:过拟合!loss稳定即可结束,否则过拟合造成结果失真。

语序识别

  1. 发现验证码图片底部会有正确语序

    坑7:但多跑几个验证码发现底部汉字会有残缺情况,导致ocr识别少字或错字,增加ocr进行语序识别需修改破解含语序问题的点击验证码中语序识别算法。100张准确率可提升至90%,识别速度大幅降低。

模拟点击

  1. 坑8:使用selenium的ActionChains进行模拟点击发现正确点选确定后验证失败,应该是极验进行了轨道判断,需要模拟人工滑动轨迹后点击。从100%失败的直接点击到30%成功的折线轨迹最后进化到99%成功easing轨迹。

重要目录说明

1
2
3
4
5
6
7
darknet
jiyan # 定位
jiyan_classify # 分类
python # 破解
gxst # 爬虫
cfg # 配置文件
weights # 权重