跳转到内容

hCaptcha 图像识别

HCaptchaClassification 识别 hCaptcha 弹出的图片题:把题目和图片发过来,返回该选哪几张图、该点哪个位置或者从哪拖到哪,由你的程序在浏览器里操作。它不返回 token。同步返回,每次 8 点(0.008 元),没有识别出目标(结果为空)时不扣点。

POSThttps://api.yescaptcha.com/createTask国际节点
POSThttps://cn.yescaptcha.com/createTask国内节点
任务类型价格返回方式说明
HCaptchaClassification8 点(0.008 元)同步没有识别出目标(结果为空)时不扣点
字段类型必填说明
typestring是任务类型,取值见本页"类型与价格"
queriesarray是题目图片的 Base64 编码列表,按网页上的顺序(九宫格就是 9 张小图)
questionstring否题目原文整句,直接取网页上显示的(建议简体中文或英文),例如 Please click each image containing a bicycle。question、anchors 至少传一个,建议都传
anchorsarray否提示图(题目旁边的示例小图)的 Base64 编码列表,有提示图的题目要传
  • question 直接取网页上显示的整句题目,不需要翻译,建议把 hCaptcha 切换成简体中文或英文。新的题目一般会很快支持,全新的类别 3 个工作日内支持。
  • 题目右上角有提示小图的,要把小图放进 anchors;必须看小图才能判断的题目,不传 anchors 识别不了。

题目是“请点击每个包含 … 的图像”,下面有 9 张小图。queries 按顺序放 9 张小图的 Base64:

POST https://api.yescaptcha.com/createTask
{
"clientKey": "YOUR_CLIENT_KEY",
"task": {
"type": "HCaptchaClassification",
"question": "Please click each image containing a bicycle",
"queries": [
"BASE64_IMAGE_1",
"BASE64_IMAGE_2"
]
}
}

返回:

{
"errorId": 0,
"status": "ready",
"solution": {
"objects": [true, false, false, true, true, false, true, true, false],
"top_k": [0, 3, 4, 6, 7],
"confidences": [1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0]
}
}

objects 和 top_k 意思相同:前者是每张图是不是目标,后者是目标图片的序号(从 0 开始)。点击这些图片即可。

题目是“请点击 …”,下面是一张大图,要点击图上的某个(或几个)位置。

  1. question 取网页上的题目;有示例小图的,放进 anchors。
  2. queries 放一张图:最好用 canvas 直接导出的原图(建议转成 JPG),只能截图的话截下面红框里的大图区域,不要多也不要少。
  3. 返回的 box 是要点击的坐标,依次是 x1、y1、x2、y2……,以上传图片的左上角为原点。
  4. 上传的图片尺寸和网页上显示的尺寸不同时要换算:网页上的 x = 返回的 x × 显示宽度 ÷ 上传图片宽度(y 同理)。例如返回 x = 769,canvas 显示宽 350、上传图片宽 1000,网页上要点 769 × 350 ÷ 1000 ≈ 269。

点击题的截图范围:题目文字作为 question,三张示例小图作为 anchors,下面的大图作为 queries

POST https://api.yescaptcha.com/createTask
{
"clientKey": "YOUR_CLIENT_KEY",
"task": {
"type": "HCaptchaClassification",
"question": "Please click on the entity present in the sample image.",
"anchors": [
"BASE64_ANCHOR_1",
"BASE64_ANCHOR_2",
"BASE64_ANCHOR_3"
],
"queries": [
"BASE64_OF_THE_BIG_IMAGE"
]
}
}

返回:

{ "errorId": 0, "status": "ready", "solution": { "box": ["221", "213"] } }

要点多个目标时,box 里依次是多组坐标:["221", "213", "340", "118", ...]。

题目是“拖动 … 到 …”,要把右边的小块拖到图中对应的位置。

  1. question 取网页上的题目。
  2. 截一张图放进 queries,图里要同时有要拖动的小块和目标位置,图片任意一边不小于 260 像素。
  3. 返回的 box 里每一项是一次拖动:start 是小块的位置,end 是要拖到的位置。有多个小块时逐个拖动。
{
"errorId": 0,
"status": "ready",
"solution": {
"type": "drag",
"box": [{ "start": [644, 218], "end": [239, 315] }]
}
}

拖动题的识别结果示意:Start 是要拖动的小块,End 是目标位置

如果你拿到的是协议数据(小块的图片、小块的坐标和背景大图)而不是截图,要先按坐标把小块拼到大图上,拼成和网页截图一样的样式再发送。

题目图片是动画时,把动画(GIF 等格式)的 Base64 放进 queries。建议动画时长至少 3 秒、最好 5 到 6 秒,帧率约 12 FPS。

点击后验证失败的,可以在 1 小时内用 report 上报,约 24 小时后结算返点,规则见 计费与退点。