CAPTCHA / HUNT
Hunt
Отправляете картинку, получаете точки для кликов (happy_puzzle) или положение мяча и цели (swipe_goal). Вид задания — поле type.
Входные данные
Сохраните всю исходную картинку как captcha.png. Координаты ответа относятся к этому файлу.
Параметры
| Параметр | Тип | Обязателен | По умолчанию | Назначение |
|---|---|---|---|---|
| image | string | Да | — | Исходное изображение в base64. |
| type | string | Да | — | Вид задания: happy_puzzle, swipe_goal. Старые имена shapes и football тоже принимаются. |
| confidence | number | Нет | 0.25 | swipe_goal: минимальная уверенность для detections, от 0 до 1. На extra.points не влияет. |
Виды заданий
| type | Задание | Ответ |
|---|---|---|
| happy_puzzle | Нажать на иконки в заданном порядке. | extra.points — точки для кликов. |
| swipe_goal | Вести ползунок, пока мяч не попадёт в цель. | detections — положение мяча (ball) и цели (circle). |
Ответ
| Данные распознавания | Тип | Назначение |
|---|---|---|
| type | string | Вид задания. |
| extra.points | integer[][3] | happy_puzzle: точки [номер, x, y] в порядке кликов; x и y — пиксели исходной картинки. Пустой массив — собрать точки не удалось. |
| detections[].name | string | swipe_goal: ball — мяч, circle — цель. |
| detections[].center_x / center_y | number | swipe_goal: центр объекта в пикселях исходной картинки. |
| detections[].x1 / y1 / x2 / y2 | integer | swipe_goal: границы объекта в пикселях исходной картинки. |
Применение
happy_puzzle: нажмите на точки extra.points по порядку. swipe_goal: ведите ползунок и после каждого шага присылайте новый снимок; когда центр ball окажется внутри границ circle, отпустите ползунок. Если исходная картинка имеет размер W×H, а на странице — w×h, координата относительно картинки на странице: x × w / W, y × h / H.
Частые ошибки
- Не передавайте координаты исходного файла прямо в клик по масштабированной картинке.
- Задача с пустым extra.points оплачивается как обычная. Запросите новую картинку.
- swipe_goal: каждый снимок — отдельная оплачиваемая задача.
Пример запроса
import base64
from pathlib import Path
import os
import uuid
import requests
def image64(filename):
return base64.b64encode(Path(filename).read_bytes()).decode("ascii")
payload = {
"image": image64("captcha.png"),
"type": "happy_puzzle",
}
# Создайте один ID на задачу; сохраняйте его для сетевых повторов.
request_id = str(uuid.uuid4())
response = requests.post(
"https://capi.z3n.pro/v1/solve/hunt",
headers={
"Authorization": f"Bearer {os.environ['CAPI_API_KEY']}",
"Content-Type": "application/json",
"Idempotency-Key": request_id,
},
json=payload,
timeout=90,
)
response.raise_for_status()
result = response.json()
for order, x, y in result["extra"]["points"]:
print(order, x, y)
capi.