携程验证码识别 -- 精度商用
- 携程验证码的样式
- 目前携程的验证码分类
- 验证码分类图片展示
- 数据集的收集和打码
- 方案选择
- 识别效果
- 接口试用方式
- 效果交流方式
携程验证码的样式
目前携程的验证码分类
- 缺口拖拽类型: 验证码包含两张图片,一张是缺口部分,一张是背景底图,需要将缺口图片拖拽到背景中缺口的对应位置;
- 图形点选类型:验证码包含两张图片,一张是上面部分题目(请点击下面的****),一张是下面的背景图片,背景图片中散落着一些形状类型,需要将上面部分的图形,完美匹配下面的目标;
- 文字点选类型:验证码包含两张图片,一张是上面部分题目(请点击下面的****),一张是下面的背景图片,背景图片中散落着一些文字类型,需要将上面部分的文字,完美陪陪下面的目标;
验证码分类图片展示
import requests
url = "https://frp-cup.top:63320/predict"
payload={'nMsgType': '200',
'sU': 'hello_verify',
'sP': 'hello_verify',
'sS': '0',
'Category': '100',
'SubCategory': '0'}
files=[
('img_upper',('0_0.png',open('前面小图片.png','rb'),'image/png')),
('img_bottom',('0_1.png',open('后面大图片.png','rb'),'image/png'))
]
headers = {}
response = requests.request("POST", url, headers=headers, data=payload, files=files)
print(response.text)
import requests
url = "https://frp-cup.top:63320/predict"
payload={'nMsgType': '200',
'sU': 'hello_verify',
'sP': 'hello_verify',
'sS': '0',
'Category': '100',
'SubCategory': '989'}
files=[
('img_upper',('0_0.png',open('前面小图片.png','rb'),'image/png')),
('img_bottom',('0_1.png',open('后面大图片.png','rb'),'image/png'))
]
headers = {}
response = requests.request("POST", url, headers=headers, data=payload, files=files)
print(response.text)
import requests
url = "https://frp-cup.top:63320/predict"
payload={'nMsgType': '200',
'sU': 'hello_verify',
'sP': 'hello_verify',
'sS': '0',
'Category': '100',
'SubCategory': '898'}
files=[
('img_upper',('0_0.png',open('前面小图片.png','rb'),'image/png')),
('img_bottom',('0_1.png',open('后面大图片.png','rb'),'image/png'))
]
headers = {}
response = requests.request("POST", url, headers=headers, data=payload, files=files)
print(response.text)
数据集的收集和打码
当前的数据集,部分是采用爬取的方式进行拉取的,部分是通过效果合成的,目前的量级大概在k级别,对于使用,效果足够了,在收集的过程中,可以发现对于整体的复杂对,携程并没有做太过复杂的变换,可能觉得即使做太过复杂的变换,对于想成功登陆的,也没有质的提升;
方案选择
在整个识别的过程中:
- 拖拽验证码:可以使用常规的图像算法来匹配,通过对外轮廓的特征处理,也能够达到比较好的效果,当然也可以使用目标检测的方式来进行解决,这样多了打码的环节;
- 文字点选标题:对于文字点选标题,目前有两种方案来进行选择,一种是将几个汉字作为模型输出的末端,直接进行Softmax,这样比较简单粗暴,实际效果需要验证,但是在观察的时候,对于标题的汉字不是固定的,所以采用这种方式有点麻烦(字体的数量也比较多),所以折中可以选择CRNN的方式进行处理,在处理的过程中,汉字的排列相对比较紧密,这个问题需要特别处理下;
- 图形点选标题:对于图形点选标题,目前也有两种方案进行选择,一种是将图形看做汉字来进行处理,采取和上面的一样的方式来进行处理,一种是通过常规图像处理的方式来进行处理,也能达到比较好的效果;
- 文字点选区域、图形点选区域:这两部分区域可以直接采用目标检测的方式去做;
识别效果
目前关于这三类的验证码识别率平均能达到95%+;
接口试用方式
接口已经开放,调用方式详见 github … …
https://github.com/MaverickMuzi/CertificateIdentification