云计算百科
云计算领域专业知识百科平台

亚马逊九宫格验证码识别

一、简介

上面的动态图就是真实识别+点击+验证通过的完整过程。识别速度快,准确度高,正确率可以达到99%左右。

二、识别图片要求

1、截图识别

截图识别是我们比较推荐的,因为页面是通过canvas渲染出来的,不容易获得图片链接,直接通过js把canvas标签范围保存成图片是最简单的方式,如下图所示

2、原图识别

原图识别获取图片的难度会大一些,因为页面是通过canvas渲染出来的,要获取图片链接需要通过抓包的方式获得。会分别获得9张小图片的下载链接,分别下载9张小图片,最后一起上传9张小图片进行识别,所有步骤都会复杂有些。如下图所示:

三、识别代码

1、截图识别

下面是python截图识别的代码,可以直接传入你的图片进行测试,会把识别结果用红点标记在图片上

import base64
import requests
import datetime
from io import BytesIO
from PIL import Image, ImageDraw

#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\\92-1.jpg')
# 图片转base64
img1_base64 = PIL_base64(img1)

# 得塔云地址
# http://bq1gpmr8.xiaomy.net(电信)
# http://220.167.181.200:9009(移动、电信、联通)
# 根据不同网络选择不同接口

# 验证码识别接口
url = "http://220.167.181.200:9009/openapi/verify_code_identify/"
data = {
# 用户的key
"key":"cyS6rStB3wkjyOdULuin",
# 验证码类型
"verify_idf_id":"92",
# 样例图片
"img1":img1_base64,
# 点击的物品名称
"words": "椅子",
}
header = {"Content-Type": "application/json"}

t1 = datetime.datetime.now()
# 发送请求调用接口
response = requests.post(url=url, json=data, headers=header)
point_list = eval(response.json()['data']['res_str'])
# 获取响应数据,识别结果
print(response.text)
print("耗时:", datetime.datetime.now() – t1)

img1 = img1.convert("RGB")
draw = ImageDraw.Draw(img1)
point_list = [(x[0] – 5, x[1] – 5, x[0] + 5, x[1] + 5) for x in point_list]
for point in point_list:
draw.ellipse(point, fill=(255, 0, 0))
# 显示识别后标记的点击点
img1.show()

2、原图识别

下面是原图识别的代码,需要分别传图9张图片的路径,所以会比截图麻烦一些。

import base64
import requests
import datetime
from io import BytesIO
from PIL import Image, ImageDraw

# 将本地图片自动转为带图片头的 base64 编码
def img_to_base64(image_path):
img = Image.open(image_path)
fmt = (img.format or "JPEG").upper()
if img.mode == "P":
img = img.convert('RGB')
elif img.mode == "RGBA":
fmt = "PNG"
buf = BytesIO()
img.save(buf, format=fmt, quality=100)
return 'data:image/' + fmt.lower() + ';base64,' + base64.b64encode(buf.getvalue()).decode('utf-8')

# 你的API KEY(在得塔云官网,点击顶部【OpenAPI】菜单获得)
key = "cyS6rStB3wkjyOdULuin"

# 得塔云地址
# http://bq1gpmr8.xiaomy.net(电信)
# http://220.167.181.200:9009(移动、电信、联通)
# 根据不同网络选择不同接口

# 接口地址(高并发用户可以找可以找客服要集群接口地址)
url = "http://220.167.181.200:9009/openapi/verify_code_identify/"

# img1:原图传第一张小图。截图传整张截图。图片(请填写本地图片完整路径)
img1_path = r"E:\\Python\\lixin_project\\OpenAPI接口测试\\test_img\\92-2.jpg"
img1 = img_to_base64(img1_path)

# img2:原图传第二张小图。截图不设置该参数。图片(请填写本地图片完整路径)
img2_path = r"E:\\Python\\lixin_project\\OpenAPI接口测试\\test_img\\92-3.jpg"
img2 = img_to_base64(img2_path)

# img3:原图传第三张小图。截图不设置该参数。图片(请填写本地图片完整路径)
img3_path = r"E:\\Python\\lixin_project\\OpenAPI接口测试\\test_img\\92-4.jpg"
img3 = img_to_base64(img3_path)

# img4:原图传第四张小图。截图不设置该参数。图片(请填写本地图片完整路径)
img4_path = r"E:\\Python\\lixin_project\\OpenAPI接口测试\\test_img\\92-5.jpg"
img4 = img_to_base64(img4_path)

# img5:原图传第五张小图。截图不设置该参数。图片(请填写本地图片完整路径)
img5_path = r"E:\\Python\\lixin_project\\OpenAPI接口测试\\test_img\\92-6.jpg"
img5 = img_to_base64(img5_path)

# img6:原图传第六张小图。截图不设置该参数。图片(请填写本地图片完整路径)
img6_path = r"E:\\Python\\lixin_project\\OpenAPI接口测试\\test_img\\92-7.jpg"
img6 = img_to_base64(img6_path)

# img7:原图传第七张小图。截图不设置该参数。图片(请填写本地图片完整路径)
img7_path = r"E:\\Python\\lixin_project\\OpenAPI接口测试\\test_img\\92-8.jpg"
img7 = img_to_base64(img7_path)

# img8:原图传第八张小图。截图不设置该参数。图片(请填写本地图片完整路径)
img8_path = r"E:\\Python\\lixin_project\\OpenAPI接口测试\\test_img\\92-9.jpg"
img8 = img_to_base64(img8_path)

# img9:原图传第九张小图。截图不设置该参数。图片(请填写本地图片完整路径)
img9_path = r"E:\\Python\\lixin_project\\OpenAPI接口测试\\test_img\\92-10.jpg"
img9 = img_to_base64(img9_path)

# 文字参数:点击的文本描述,例如:___PH43___
words = "时钟"

# 请求参数
data = {
"key": key,
"verify_idf_id": "92",
"img1": img1,
"img2": img2,
"img3": img3,
"img4": img4,
"img5": img5,
"img6": img6,
"img7": img7,
"img8": img8,
"img9": img9,
"words": words
}

t1 = datetime.datetime.now()
# 发送请求调用接口(建议使用json格式处理最快、表单处理最慢)
response = requests.post(url=url, json=data)
point_list = eval(response.json()['data']['res_str'])
# 获取响应数据,识别结果
print(response.text)
print("耗时:", datetime.datetime.now() – t1)

如果还需要其他语言的识别代码,还可以通过下面方式自动生成

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

赞(0)
未经允许不得转载:网硕互联帮助中心 » 亚马逊九宫格验证码识别
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!