CAPTCHA / YANDEX_ICONS
Yandex / Icons
Yandex SmartCaptcha с иконками: на картинке иконки на сложном фоне, на полоске те же иконки в нужном порядке. Ответ — точки для кликов. Доступно через прямой API.
Входные данные
Подготовьте canvas.png — картинку 500×330, и order.png — полоску 300×60 с иконками на прозрачном фоне. Передавайте файлы одного задания без изменений и сохраняйте alpha-канал полоски.
Параметры
| Параметр | Тип | Обязателен | По умолчанию | Назначение |
|---|---|---|---|---|
| image | string | Да | — | Исходное изображение в base64. |
| order | string | Да | — | Полоска с иконками в base64. |
Ответ
| Данные распознавания | Тип | Назначение |
|---|---|---|
| confidence | number | Наименьшая из оценок p по точкам. |
| extra.points[].index | integer | Номер клика, начиная с 1. Порядок совпадает с порядком иконок на полоске. |
| extra.points[].x / y | number | Точка клика в пикселях исходной картинки. |
| extra.points[].name | string | Название иконки. |
| extra.points[].p | number | Оценка найденной иконки, от 0 до 1. |
| extra.points[].match | number | Сходство иконки с полоски с известной иконкой этого названия. |
| extra.size | integer[2] | Ширина и высота исходной картинки. |
| extra.points[].own_class | boolean | false — иконка этого названия на картинке не найдена, взята другая. Такой ответ лучше не использовать, запросите новое задание. |
Применение
Нажмите на точки extra.points по порядку. Если исходная картинка имеет размер W×H, а на странице — w×h, координата относительно картинки на странице: x × w / W, y × h / H.
Частые ошибки
- Картинка и полоска должны относиться к одному заданию.
- Полоска без alpha-канала должна быть с тёмными иконками на светлом фоне.
- Не обрезайте и не масштабируйте файлы перед отправкой.
Пример запроса
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("canvas.png"),
"order": image64("order.png"),
}
# Создайте один ID на задачу; сохраняйте его для сетевых повторов.
request_id = str(uuid.uuid4())
response = requests.post(
"https://capi.z3n.pro/v1/solve/yandex_icons",
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 point in result["extra"]["points"]:
print(point["index"], point["x"], point["y"])
capi.