简介
网易图标点选一直都是一个大难题,如上图所示。难点之一是图标变幻莫测,很难刷出有重复的图标,所以使用传统等等方式去标注、识别具有较大的难度。
经过我们大量的数据标注,终于完成了这款验证码的识别。
目前我们提供两种识别方:原图识别、截图识别。
1.1原图识别
需要通过图片链接下载原图如下,他的点击区大图和点击顺序小图在同一张图片中。点击的顺序是最下面小图区域第一行。
1.2原图识别代码
代码识别后最终返回的是点击坐标,大家可以根据坐标自由发挥。
import base64
import requests
import datetime
from io import BytesIO
from PIL import Image, ImageDrawt1 = datetime.datetime.now()#PIL图片保存为base64编码
def PIL_base64(img, coding='utf-8'):img_format = img.formatif img_format == None:img_format = 'JPEG'format_str = 'JPEG'if 'png' == img_format.lower():format_str = 'PNG'if 'gif' == img_format.lower():format_str = 'gif'if img.mode == "P":img = img.convert('RGB')if img.mode == "RGBA":format_str = 'PNG'img_format = 'PNG'output_buffer = BytesIO()# img.save(output_buffer, format=format_str)img.save(output_buffer, quality=100, format=format_str)byte_data = output_buffer.getvalue()base64_str = 'data:image/' + img_format.lower() + ';base64,' + base64.b64encode(byte_data).decode(coding)# base64_str = base64.b64encode(byte_data).decode(coding)return base64_str# 加载图片
img1 = Image.open(r'E:\Python\lixin_project\OpenAPI接口测试\test_img\54-3.jpg')
# 图片转base64
img1_base64 = PIL_base64(img1)# 验证码识别接口
url = "http://www.detayun.cn/openapi/verify_code_identify/"
data = {# 用户的key"key":"78t9jTqCbAnHFO0tbBDW",# 验证码类型"verify_idf_id":"54",# 点击区大图"img1":img1_base64,# 点击顺序小图"img2":"",
}
header = {"Content-Type": "application/json"}# 发送请求调用接口
response = requests.post(url=url, json=data, headers=header)# 获取响应数据,识别结果
print(response.text)
print("耗时:", datetime.datetime.now() - t1)
2.1截图识别
需要截取点击区大图,点击顺序小图两张,如下图所示
2.2截图识别代码
截图识别通用性更好,可以扩展到同类型所有验证码。代码识别后最终返回的是点击坐标,大家可以根据坐标自由发挥。一定要注意两张图片的顺序,不能反。
import base64
import requests
import datetime
from io import BytesIO
from PIL import Image, ImageDrawt1 = datetime.datetime.now()#PIL图片保存为base64编码
def PIL_base64(img, coding='utf-8'):img_format = img.formatif img_format == None:img_format = 'JPEG'format_str = 'JPEG'if 'png' == img_format.lower():format_str = 'PNG'if 'gif' == img_format.lower():format_str = 'gif'if img.mode == "P":img = img.convert('RGB')if img.mode == "RGBA":format_str = 'PNG'img_format = 'PNG'output_buffer = BytesIO()# img.save(output_buffer, format=format_str)img.save(output_buffer, quality=100, format=format_str)byte_data = output_buffer.getvalue()base64_str = 'data:image/' + img_format.lower() + ';base64,' + base64.b64encode(byte_data).decode(coding)# base64_str = base64.b64encode(byte_data).decode(coding)return base64_str# 加载点击区大图
img1 = Image.open(r'E:\Python\lixin_project\OpenAPI接口测试\test_img\54-1.jpg')
# 图片转base64
img1_base64 = PIL_base64(img1)
# 加载点击顺序小图
img2 = Image.open(r'E:\Python\lixin_project\OpenAPI接口测试\test_img\54-2.jpg')
# 图片转base64
img2_base64 = PIL_base64(img1)# 验证码识别接口
url = "http://www.detayun.cn/openapi/verify_code_identify/"
data = {# 用户的key"key":"78t9jTqCbAnHFO0tbBDW",# 验证码类型"verify_idf_id":"54",# 点击区大图"img1":img1_base64,# 点击顺序小图"img2":img2_base64,
}
header = {"Content-Type": "application/json"}# 发送请求调用接口
response = requests.post(url=url, json=data, headers=header)# 获取响应数据,识别结果
print(response.text)
print("耗时:", datetime.datetime.now() - t1)
想了解更多验证码识别,请访问:得塔云