CAPTCHA / TEXT
Текст
Распознавание символов на картинке. Модель под конкретный сайт выбирается полем model; в ответе — строка для поля капчи.
Входные данные
Сохраните исходную картинку капчи как captcha.png. Требования к картинке у моделей разные — см. таблицу моделей.
Параметры
| Параметр | Тип | Обязателен | По умолчанию | Назначение |
|---|---|---|---|---|
| image | string | Да | — | Исходное изображение в base64. |
| model | string | Да | — | Модель: gaijin, mojeid, nova. |
Модели
| model | Сайт | Картинка | Особенности ответа |
|---|---|---|---|
| gaijin | login.gaijin.net | Исходная картинка капчи без рамки страницы, подписи и поля ввода. | extra.char_confidences — оценка каждого символа в порядке text; extra.length — длина строки. |
| mojeid | MojeID | Всё изображение целиком. Не вырезайте символы вручную: сервер сам их отделяет. | Только text и confidence. Не меняйте регистр строки без требования сайта. |
| nova | Nova88 | Исходная цветная картинка. Не переводите её в чёрно-белую: цветовой фильтр — часть обработки. | text уже нормализован: если найдено не меньше четырёх цифр, берутся первые четыре. extra.raw_ocr — сырой OCR до исправлений, для ввода не используйте. confidence может быть 0. |
Ответ
| Данные распознавания | Тип | Назначение |
|---|---|---|
| model | string | Модель из запроса. |
| text | string | Распознанная строка. Передайте её в поле капчи как есть. |
| confidence | number | Средняя оценка уверенности по символам. |
| extra | object | Поля конкретной модели — см. таблицу моделей. |
Применение
Передайте result["text"] в поле капчи в той же сессии сайта, в которой получена картинка.
Частые ошибки
- Модель не определяется по картинке: без model сервер отвечает 400.
- Прозрачность, цвет и исходный масштаб влияют на предобработку; предпочтителен оригинальный файл.
Пример запроса
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"),
"model": "nova",
}
# Создайте один ID на задачу; сохраняйте его для сетевых повторов.
request_id = str(uuid.uuid4())
response = requests.post(
"https://capi.z3n.pro/v1/solve/text",
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()
print(result["text"])
capi.