此页内容

ReCaptcha图像识别

captchaRun

1059字约4分钟

2024-05-21

请求识别

参考 🔗创建任务: /v2/tasks

参数名是否必填说明
captchaType固定为 ReCaptchaV2Classification
imageBase64 编码的图片文件
question问题 ID, 请查表, 以 /m/ 开头
resize缩放图片 -1: 自动缩放, 0: 不缩放, 1: 缩放至 100x100, 3: 缩放至 300x300, 4: 缩放至 400x400

注意

图片 Base64 请不要包含 "data:image/***;base64,"

重要

resize 为 -1 时, 服务会基于白线自动猜测是 3x3 还是 4x4 的大图. 因此,自动缩放只对大图截图有效, 小图请将 resize 设为 1

注意

图片最大大小为1000*1000,如果超出大小服务器将拒绝自动缩放和后续处理

请求样例

POST https://api.captcha.run/v2/tasks

Content-Type: application/json
Authorization: Bearer 00000000-0000-0000-0000-000000000000

{
    "captchaType": "ReCaptchaV2Classification",
    "image": "/9j/4AAQSkZJRgABAQAAAkiOOIucyMmHHVdLmLXpRtPg3Vqboi/jze0nKm5DJ3aQ+19/zHmK292ZU8O0h...",
    "question": "/m/01lynh"
}

CURL

curl -X POST "https://api.captcha.run/v2/tasks" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer 00000000-0000-0000-0000-000000000000" \
     -d '{
        "captchaType": "ReCaptchaV2Classification",
        "image": "/9j/4AAQSkZJRgABAQAAAkiOOIucyMmHHVdLmLXpRtPg3Vqboi/jze0nKm5DJ3aQ+19/zHmK292ZU8O0h...",
        "question": "/m/01lynh"
    }'

Python

import requests

headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer 00000000-0000-0000-0000-000000000000',
}

json_data = {
    'captchaType': 'ReCaptchaV2Classification',
    'image': '/9j/4AAQSkZJRgABAQAAAkiOOIucyMmHHVdLmLXpRtPg3Vqboi/jze0nKm5DJ3aQ+19/zHmK292ZU8O0h...',
    'question': '/m/01lynh',
}

response = requests.post('https://api.captcha.run/v2/tasks', headers=headers, json=json_data)
import requests
import base64

token  = "xxxxx"

headers = {
    'Content-Type': 'application/json',
    'Authorization': f'Bearer {token}',
}

with open("payload.jpg", "rb") as image_file:
    encoded_string = base64.b64encode(image_file.read()).decode('utf-8')

json_data = {
    'captchaType': 'ReCaptchaV2Classification',
    'image': encoded_string,
    'question': '/m/01lynh',
}

response = requests.post('https://api.captcha.run/v2/tasks', headers=headers, json=json_data)
print(response.json() )

JavaScript

const resp = await fetch('https://api.captcha.run/v2/tasks', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer 00000000-0000-0000-0000-000000000000'
    },
    body: JSON.stringify({
        "captchaType": "ReCaptchaV2Classification",
        "image": "/9j/4AAQSkZJRgABAQAAAkiOOIucyMmHHVdLmLXpRtPg3Vqboi/jze0nKm5DJ3aQ+19/zHmK292ZU8O0h...",
        "question": "/m/01lynh"
    }),
});
const json = await resp.json();
console.info(json);

重要

注意image是base64编码的图片原始文件,最好不要使用屏幕截图

返回样例

重要

本接口为同步返回结果,无需轮询获取结果

多目标 (3x3 / 4x4)
对于 3x3, 第一行为 0,1,2 第二行为 3,4,5 第三行为 6,7,8
对于 4x4, 第一行为 0,1,2,3 第二行为 4,5,6,7 第三行为 8,9,10,11 第四行为 12,13,14,15

{
    "taskId": "ada7d30b-a12f-4105-85a5-0aa90bf0487a",
    "result": {
        "type": "multi",
        "objects": [ 0, 1, 2 ],
        "size": 3 // 3x3: 3 或者 4x4: 4
    }
}

单目标 (1x1)

{
    "taskId": "ada7d30b-a12f-4105-85a5-0aa90bf0487a",
    "result": {
        "hasObject": true / false, // 是否需要点击
        "type": "single",
        "size": 1
    }
}

图片格式

注意

必须将图片缩放至 标准 (100x100, 300x300, 450x450) 大小, 否则服务器无法判断类型

3x3: (300x300)

img1

在按下 3x3 后, 如果不是 imageselect 类型, 会刷新 1x1 小图.

4x4: (450x450 / 400x400)

img2

1x1: 刷出来的小图 (100x100)

img3

问题 ID 对照表

重要

中文并非 ReCaptcha 官方翻译, 仅供参考

英文中文 (参考, 不准确)ID
taxis出租车/m/0pg52
bus巴士/m/01bjv
school bus校车/m/02yvhj
motorcycles摩托车/m/04_sv
tractors拖拉机/m/013xlm
chimneys烟囱/m/01jk_4
crosswalks人行横道/m/014xcs
traffic lights红绿灯/m/015qff
bicycles自行车/m/0199g
parking meters停车计价表/m/015qbp
cars汽车/m/0k4j
bridges/m/015kr
boats/m/019jd
palm trees棕榈树/m/0cdl1
mountains or hills/m/09d_r
fire hydrant消防栓/m/01pns0
stairs楼梯/m/01lynh

英文对照 (JSON):

{
  "/m/0pg52": "taxis",
  "/m/01bjv": "bus",
  "/m/02yvhj": "school bus",
  "/m/04_sv": "motorcycles",
  "/m/013xlm": "tractors",
  "/m/01jk_4": "chimneys",
  "/m/014xcs": "crosswalks",
  "/m/015qff": "traffic lights",
  "/m/0199g": "bicycles",
  "/m/015qbp": "parking meters",
  "/m/0k4j": "cars",
  "/m/015kr": "bridges",
  "/m/019jd": "boats",
  "/m/0cdl1": "palm trees",
  "/m/09d_r": "mountains or hills",
  "/m/01pns0": "fire hydrant",
  "/m/01lynh": "stairs"
}

中文对照 (JSON):

{
  "/m/0pg52": "出租车",
  "/m/01bjv": "巴士",
  "/m/02yvhj": "校车",
  "/m/04_sv": "摩托车",
  "/m/013xlm": "拖拉机",
  "/m/01jk_4": "烟囱",
  "/m/014xcs": "人行横道",
  "/m/015qff": "红绿灯",
  "/m/0199g": "自行车",
  "/m/015qbp": "停车计价表",
  "/m/0k4j": "汽车",
  "/m/015kr": "",
  "/m/019jd": "",
  "/m/0cdl1": "棕榈树",
  "/m/09d_r": "",
  "/m/01pns0": "消防栓",
  "/m/01lynh": "楼梯"
}