# Распознавание текста на изображении

> Распознавайте английские буквы и цифры на изображении с помощью YesCaptcha. ImageToTextTaskOcrBase и ImageToTextTaskMuggle возвращают результат синхронно; ImageToTextTask и ImageToTextTaskM1 работают асинхронно и поддерживают регистр, только цифры, арифметические выражения и ограничения длины. Доступны индивидуальные модели.

Source: https://docs.yescaptcha.com/ru/tasks/image-to-text/ · Last verified: 2026-10-15

> This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/tasks/image-to-text/

Отправьте изображение с символьной капчей в формате Base64 и получите английские буквы и цифры с изображения (`solution.text`). `ImageToTextTaskOcrBase` стоит 2 pts (≈ $0.30 / 1k) за изображение и работает синхронно: результат приходит в ответ на один запрос `createTask`. Если нужны требования к регистру, только цифры, арифметические выражения и т. п., используйте асинхронный `ImageToTextTask`.

- POST `https://api.yescaptcha.com/createTask` (Глобальный endpoint)
- POST `https://cn.yescaptcha.com/createTask` (Endpoint для Китая)

Тело запроса — JSON, авторизация через `clientKey`.

## Типы и цены

| Тип задачи | Цена | Режим | Примечания |
| --- | --- | --- | --- |
| `ImageToTextTaskOcrBase` | $0.30 / 1k; 2 pts/задача · ¥2 / 1k | Синхронный |  |
| `ImageToTextTaskMuggle` | $0.30 / 1k; 2 pts/задача · ¥2 / 1k | Синхронный | Не поддерживает параметры case/numeric; чтобы выбрать пользовательскую модель, используйте project\_name |
| `ImageToTextTask` | $0.60 / 1k; 4 pts/задача · ¥4 / 1k | Асинхронный |  |
| `ImageToTextTaskM1` | $2.25 / 1k; 15 pts/задача · ¥15 / 1k | Асинхронный |  |

Цены в долларах США являются оценочными и рассчитаны по курсу 1 USD ≈ ¥6.67; списание за задачи производится в баллах.

| Что нужно | Что использовать |
| --- | --- |
| Обычные капчи из букв и цифр, самый дешёвый и быстрый вариант | `ImageToTextTaskOcrBase`, `ImageToTextTaskMuggle` (синхронные) |
| Распознавание моделью, обученной специально для вас | `ImageToTextTaskMuggle` с `project_name` |
| Учёт регистра, только цифры, вычисление выражения, ограничение длины | `ImageToTextTask`, `ImageToTextTaskM1` (асинхронные) |

У разных типов разные модели и линии, поэтому результат на одинаковых изображениях может отличаться. Протестируйте несколько типов и выберите лучший.

## Параметры запроса

| Поле | Тип | Обязательное | Описание |
| --- | --- | --- | --- |
| `type` | string | Да | Тип задачи; см. «Типы задач и цены» на этой странице |
| `body` | string | Да | Изображение в кодировке Base64 без префикса `data:image/...;base64,` и без переносов строк |
| `project_name` | string | Нет | Название пользовательской модели, поддерживается только в `ImageToTextTaskMuggle`. Не передавайте, чтобы использовать общую модель для букв и цифр. Для пользовательской модели обратитесь в поддержку (только ImageToTextTaskMuggle) |
| `phrase` | boolean | Нет | true означает, что ответ содержит хотя бы один пробел (только ImageToTextTask, ImageToTextTaskM1) |
| `case` | boolean | Нет | true означает, что ответ чувствителен к регистру (только ImageToTextTask, ImageToTextTaskM1) |
| `numeric` | integer | Нет | 0 — без требований; 1 — только цифры; 2 — без цифр (только ImageToTextTask, ImageToTextTaskM1) |
| `math` | boolean | Нет | true означает, что на изображении математическое выражение, а ответом будет его результат (только ImageToTextTask, ImageToTextTaskM1) |
| `minLength` | integer | Нет | Минимальная длина ответа; 0 означает без ограничения (только ImageToTextTask, ImageToTextTaskM1) |
| `maxLength` | integer | Нет | Максимальная длина ответа; 0 означает без ограничения (только ImageToTextTask, ImageToTextTaskM1) |

`body` — это Base64-кодировка файла изображения. Изображения WebP конвертируются автоматически.

> **Осторожно:** Не добавляйте в Base64 префикс `data:image/...;base64,` и переводы строк.

## Пример запроса

POST https://api.yescaptcha.com/createTask

```json
{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "ImageToTextTaskOcrBase",
    "body": "BASE64_IMAGE"
  }
}
```

Полный код (читает `captcha.png` из текущей директории):

**curl**

```bash
# Replace BASE64_IMAGE with the Base64-encoded image
curl -s https://api.yescaptcha.com/createTask \
  -H 'Content-Type: application/json' \
  -d '{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "ImageToTextTaskOcrBase",
    "body": "BASE64_IMAGE"
  }
}'
```

**Python**

solve.py

```python
import os
import base64

import requests

API = "https://api.yescaptcha.com"
CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"]  # Read the clientKey from an environment variable

def call(method, payload):
    r = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30)
    data = r.json()
    if data.get("errorId"):
        raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}")
    return data

def solve(task):
    return call("createTask", {"task": task})["solution"]

# Base64-encode the image (no data: prefix)
with open("captcha.png", "rb") as f:
    image_b64 = base64.b64encode(f.read()).decode()

solution = solve({
    "type": "ImageToTextTaskOcrBase",
    "body": image_b64,
})
print(solution["text"])
```

**Node.js**

solve.mjs

```js
import { readFileSync } from 'node:fs';

const API = 'https://api.yescaptcha.com';
const CLIENT_KEY = process.env.YESCAPTCHA_CLIENT_KEY; // Read the clientKey from an environment variable

async function call(method, payload) {
  const res = await fetch(`${API}/${method}`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ clientKey: CLIENT_KEY, ...payload }),
  });
  const data = await res.json();
  if (data.errorId) throw new Error(`${data.errorCode}: ${data.errorDescription}`);
  return data;
}

async function solve(task) {
  const { solution } = await call('createTask', { task });
  return solution;
}

// Base64-encode the image (no data: prefix)
const imageB64 = readFileSync('captcha.png').toString('base64');

const solution = await solve({
  type: "ImageToTextTaskOcrBase",
  body: imageB64,
});
console.log(solution.text);
```

Асинхронная задача с требованиями:

POST https://api.yescaptcha.com/createTask

```json
{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "ImageToTextTask",
    "body": "BASE64_IMAGE",
    "case": true,
    "numeric": 0,
    "minLength": 4,
    "maxLength": 6
  }
}
```

## Результат

Синхронные типы возвращают результат сразу в ответе на `createTask`:

```json
{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "text": "LMResm"
  },
  "taskId": "2376919c-1863-11ec-a012-94e6f7355a0b"
}
```

Асинхронные типы (`ImageToTextTask`, `ImageToTextTaskM1`) сначала возвращают `taskId`, после чего каждые 5 секунд опрашивайте `getTaskResult`. Когда задача выполнена, `solution` имеет тот же формат.

| Поле | Тип | Описание |
| --- | --- | --- |
| `text` | string | Распознанный текст |

## Индивидуальная модель

Универсальная модель подходит для любых капч из букв и цифр, но её точность немного ниже, чем у модели, обученной специально. Если нужно распознавать изображения одного и того же вида, [свяжитесь с поддержкой](https://docs.yescaptcha.com/ru/help/contact.md), чтобы заказать индивидуальную модель, а затем указывайте её через `ImageToTextTaskMuggle` и `project_name`.

## Частые вопросы

### Списываются ли баллы, если распознано неверно?

Для синхронных типов баллы списываются, как только результат получен, даже если он неверный. Попробуйте другой тип для сравнения или закажите индивидуальную модель.

### Получаю `ERROR_ZERO_CAPTCHA_FILESIZE` или `ERROR_PARSE_IMAGE_FAIL`

Base64 изображения неполный, либо содержит префикс `data:` или переводы строк. Проверьте кодировку, см. [Коды ошибок](https://docs.yescaptcha.com/ru/api/errors.md).

## Связанные примеры

-   [Быстрый старт](https://docs.yescaptcha.com/ru/getting-started/quickstart.md): первый запрос с `ImageToTextTaskOcrBase`
-   [Примеры на Python](https://docs.yescaptcha.com/ru/samples/python.md)
