网易易盾图标点选验证码识别代码

简介

网易图标点选一直都是一个大难题,如上图所示。难点之一是图标变幻莫测,很难刷出有重复的图标,所以使用传统等等方式去标注、识别具有较大的难度。

经过我们大量的数据标注,终于完成了这款验证码的识别。

目前我们提供两种识别方:原图识别、截图识别。

1.1原图识别

需要通过图片链接下载原图如下,他的点击区大图和点击顺序小图在同一张图片中。点击的顺序是最下面小图区域第一行。

1.2原图识别代码

代码识别后最终返回的是点击坐标,大家可以根据坐标自由发挥。

python 复制代码
import base64
import requests
import datetime
from io import BytesIO
from PIL import Image, ImageDraw

t1 = datetime.datetime.now()

#PIL图片保存为base64编码
def PIL_base64(img, coding='utf-8'):
    img_format = img.format
    if 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截图识别代码

截图识别通用性更好,可以扩展到同类型所有验证码。代码识别后最终返回的是点击坐标,大家可以根据坐标自由发挥。一定要注意两张图片的顺序,不能反。

python 复制代码
import base64
import requests
import datetime
from io import BytesIO
from PIL import Image, ImageDraw

t1 = datetime.datetime.now()

#PIL图片保存为base64编码
def PIL_base64(img, coding='utf-8'):
    img_format = img.format
    if 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)

想了解更多验证码识别,请访问:得塔云

相关推荐
@forever@5 小时前
【JAVA】LinkedList与链表
java·python·链表
极客学术工坊5 小时前
2022年第十二届MathorCup高校数学建模挑战赛-D题 移动通信网络站址规划和区域聚类问题
机器学习·数学建模·启发式算法·聚类
程序员爱钓鱼6 小时前
Python编程实战:面向对象与进阶语法——类型注解与代码规范(PEP 8)
后端·python·ipython
程序员爱钓鱼6 小时前
Python实战:用高德地图API批量获取地址所属街道并写回Excel
后端·python·ipython
reasonsummer7 小时前
【教学类-97-06】20251105“葡萄”橡皮泥黏贴(小班主题《苹果与橘子》)
python
卖个几把萌7 小时前
【16】Selenium+Python 接管已打开谷歌浏览器
python·selenium·测试工具
像风一样的男人@8 小时前
python --两个文件夹文件名比对(yolo 图和label标注比对检查)
windows·python·yolo
领航猿1号8 小时前
Pytorch 内存布局优化:Contiguous Memory
人工智能·pytorch·深度学习·机器学习
lllsure8 小时前
【Python】Dict(字典)
开发语言·python
化作星辰8 小时前
使用房屋价格预测的场景,展示如何从多个影响因素计算权重和偏置的梯度
pytorch·深度学习