> ## Documentation Index
> Fetch the complete documentation index at: https://docs.acedata.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# Інструкція з інтеграції API розпізнавання зображень Recaptcha2

> Recaptcha verification code recognition service API guide - Ace Data Cloud

У цій статті буде представлено інструкцію з інтеграції API розпізнавання зображень Recaptcha2, яка дозволяє за допомогою введеного користувачем вмісту та зображення коду Recaptcha2 повернути координати малих зображень, на які потрібно натиснути, для завершення перевірки.

## Процес подачі заявки

Щоб використовувати API розпізнавання зображень Recaptcha2, спочатку перейдіть до [консолі Ace Data Cloud](https://platform.acedata.cloud/console/applications) для отримання вашого API Token, зберігши його для подальшого використання.

![](https://cdn.acedata.cloud/5hmkdg.jpg)

Якщо ви ще не увійшли в систему або не зареєстровані, вас автоматично перенаправлять на сторінку входу, щоб запросити реєстрацію та вхід, після чого ви будете автоматично повернені на цю сторінку.

**Один API Token дозволяє викликати всі послуги платформи, не потрібно окремо подавати заявку на кожну послугу.** Перший запит на отримання токена надає безкоштовний ліміт, щоб ви могли безкоштовно протестувати; якщо ліміт вичерпано, ви можете поповнити загальний баланс на [консолі](https://platform.acedata.cloud/console/coin).

> 📘 Повна документація: [API розпізнавання зображень Recaptcha2 →](https://platform.acedata.cloud/documents/captcha-recognition-recaptcha2)

## Основне використання

Спочатку розглянемо основний спосіб використання, нам потрібно захопити зображення коду Recaptcha2 з веб-сайту, приклад URL сайту: `https://www.google.com/recaptcha/api2/demo`, конкретна сторінка виглядає так:

<p>
  <img src="https://cdn.acedata.cloud/3mgkjk.png" width="500" className="m-auto" />
</p>

Нам потрібно натиснути на чекбокс коду, щоб з'явилося зображення коду, на зображенні вище жовта стрілка вказує на текст, який є значенням `question` нижче. Спочатку потрібно просто передати поле `image`, яке є конкретним зображенням коду Recaptcha2, це зображення вказане червоною стрілкою на зображенні вище, і його потрібно масштабувати до стандартного розміру (100x100, 300x300, 450x450), щоб служба могла визначити тип зображення, стиснення зображення потрібно виконати самостійно, у цій статті рекомендується [сайт для стиснення](https://www.photopea.com/), на якому ви можете стиснути зображення за розміром і вагою, результат стиснення виглядає так:

![](https://cdn.acedata.cloud/l7aotl.png)

Також потрібно ввести параметр вмісту, пов'язаний із зображенням коду `question`, ми надали нижче цю таблицю вмісту для довідки:

### Таблиця вмісту китайською

```json theme={null}
{
  "/m/0pg52": "таксі",
  "/m/01bjv": "автобус",
  "/m/02yvhj": "шкільний автобус",
  "/m/04_sv": "мотоцикли",
  "/m/013xlm": "трактори",
  "/m/01jk_4": "димарі",
  "/m/014xcs": "пішохідні переходи",
  "/m/015qff": "світлофори",
  "/m/0199g": "велосипеди",
  "/m/015qbp": "паркомати",
  "/m/0k4j": "автомобілі",
  "/m/015kr": "мости",
  "/m/019jd": "човни",
  "/m/0cdl1": "пальмові дерева",
  "/m/09d_r": "гори",
  "/m/01pns0": "пожежний гідрант",
  "/m/01lynh": "сходи"
}
```

### Таблиця вмісту англійською

```json theme={null}
{
  "/m/0pg52": "taxis",
  "/m/01bjv": "bus",
  "/m/02yvhj": "school bus",
  "/m/04_sv": "motorcycles",
  "/m/013xlm": "tractors",
  "/m/01jk_4": "chimneys",
  "/m/014xcs": "crosswalks", // pedestrian crossings також підходить
  "/m/015qff": "traffic lights",
  "/m/0199g": "bicycles",
  "/m/015qbp": "parking meters",
  "/m/0k4j": "cars",
  "/m/015kr": "bridges",
  "/m/019jd": "boats",
  "/m/0cdl1": "palm trees",
  "/m/09d_r": "mountains or hills",
  "/m/01pns0": "fire hydrant",
  "/m/01lynh": "stairs"
}
```

З вище наведеного видно, що параметр `question` потрібно встановити на пожежний гідрант, відповідний `/m/01pns0`, конкретний вміст виглядає так:

<p>
  <img src="https://cdn.acedata.cloud/d53oc3.png" width="500" className="m-auto" />
</p>

Ми бачимо, що тут ми налаштували заголовки запиту, включаючи:

* `accept`: формат відповіді, який ви хочете отримати, тут вказано `application/json`, тобто формат JSON.
* `authorization`: ключ для виклику API, після подачі заявки ви можете вибрати його зі списку.

Також налаштовано тіло запиту, яке включає:

* `image`: зображення коду у форматі Base64.
* `question`: ID питання, будь ласка, перевірте таблицю, починаючи з /m/.

Після вибору ви можете помітити, що праворуч також згенерувався відповідний код, як показано на зображенні:

<p>
  <img src="https://cdn.acedata.cloud/bsp8g9.png" width="500" className="m-auto" />
</p>

Натисніть кнопку «Спробувати», щоб провести тестування, як показано на зображенні, ми отримали наступний результат:

```json theme={null}
{
  "solution": {
    "size": 300,
    "label": "/m/01pns0",
    "confidences": [
      0,
      0.0007,
      1,
      0.0003,
      0.0046,
      1,
      0,
      1,
      0
    ],
    "objects": [
      2,
      5,
      7
    ],
    "type": "multi"
  }
}
```

У відповіді є кілька полів, описаних нижче:

* `solution`, результат перевірки після обробки завдання зображення коду Recaptcha2.
  * `size`, розмір зображення коду Recaptcha2.
  * `label`, вміст, розпізнаний на зображенні коду Recaptcha2.
  * `confidences`, впевненість у розпізнанні області зображення коду Recaptcha2, область нумерується з 0.
  * `objects`, області, що відповідають розпізнаному вмісту на зображенні коду Recaptcha2, область нумерується з 0.
  * `type`, тип завдання зображення коду Recaptcha2, якщо є кілька областей, то `multi`.

Ми отримали результат перевірки обробки зображення коду Recaptcha2, спочатку ми розділили зображення коду на області, як показано на зображенні:

<p>
  <img src="https://cdn.acedata.cloud/2d6qhx.png" width="500" className="m-auto" />
</p>

Ми бачимо, що області нумеруються з 0, з результату `objects` ми отримали 2, 5, 7, нам потрібно просто симулювати натискання на ці три області, щоб пройти перевірку.

Крім того, якщо ви хочете згенерувати відповідний код інтеграції, ви можете просто скопіювати згенероване, наприклад, код CURL виглядає так:

```shell theme={null}
curl -X POST 'https://api.acedata.cloud/captcha/recognition/recaptcha2' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "question": "/m/01pns0",
  "image": "iVBORw0KGgoAAAANSUhEUgAAASoAAAEsCAIAAAD7AWllAAAAAX..."
}'
```

Код інтеграції на Python виглядає так:

```python theme={null}
import requests

url = "https://api.acedata.cloud/captcha/recognition/recaptcha2"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "question": "/m/01pns0",
    "image": "iVBORw0KGgoAAAANSUhEUgAAASoAAAEsCAIAAAD7AWllAAAAAX..."
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

## Асинхронний режим (async)

За замовчуванням API є синхронним блокуючим: один запит буде чекати, поки обробка результату розпізнавання не завершиться. Якщо ви займаєтеся багатократною ротацією розпізнавачів (multi-solver rotation) і хочете «після подання завдання відразу отримати task\_id, спочатку зайнятися іншими розпізнавачами, а потім повернутися за результатом», ви можете передати `async: true` у тілі запиту.

Після передачі `async: true` інтерфейс відразу поверне `task_id`, не блокуючи очікування:

```shell theme={null}
curl -X POST 'https://api.acedata.cloud/captcha/recognition/recaptcha2' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "question": "/m/01pns0",
  "image": "iVBORw0KGgoAAAANSUhEUgAAASoAAAEsCAIAAAD7AWllAAAAAX...",
  "async": true
}'
```

```json theme={null}
{
  "success": true,
  "task_id": "61138bb6-19aa-11ec-a9c8-0242ac110002",
  "trace_id": "2efa9340-b21b-4e26-9e14-4aac95f343ab",
  "status": "processing"
}
```

Потім використовуйте цей `task_id` для опитування `POST /captcha/tasks` (рекомендується кожні 3\~5 секунд) для отримання результату:

```shell theme={null}
curl -X POST 'https://api.acedata.cloud/captcha/tasks' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "task_id": "61138bb6-19aa-11ec-a9c8-0242ac110002"
}'
```

Під час обробки буде повернуто `status: processing`:

```json theme={null}
{ "success": true, "task_id": "61138bb6-19aa-11ec-a9c8-0242ac110002", "status": "processing" }
```

Після завершення обробки буде повернуто `status: ready` та результат розпізнавання `solution` (структура полів повністю збігається з синхронним режимом):

```json theme={null}
{
  "success": true,
  "task_id": "61138bb6-19aa-11ec-a9c8-0242ac110002",
  "status": "ready",
  "solution": {
    "size": 300,
    "label": "/m/01pns0",
    "objects": [2, 5, 7],
    "type": "multi"
  }
}
```

Опис тарифікації: в асинхронному режимі створення завдання та опитування «в обробці» не підлягають тарифікації; **тільки при успішному отриманні результату розпізнавання стягується плата один раз** (ціна така ж, як у синхронному режимі). Тому скасування незавершених завдань під час ротації не призведе до витрат. `/captcha/tasks` є загальним для всіх інтерфейсів перевірки (token та серія розпізнавання), можна використовувати один і той же `task_id` для опитування.

## Обробка помилок

При виклику API, якщо виникає помилка, API поверне відповідний код помилки та інформацію. Наприклад:

* `400 token_mismatched`: Неправильний запит, можливо, через відсутні або недійсні параметри.
* `400 api_not_implemented`: Неправильний запит, можливо, через відсутні або недійсні параметри.
* `401 invalid_token`: Неавторизовано, недійсний або відсутній токен авторизації.
* `429 too_many_requests`: Занадто багато запитів, ви перевищили ліміт запитів.
* `500 api_error`: Внутрішня помилка сервера, щось пішло не так на сервері.

### Приклад відповіді з помилкою

```json theme={null}
{
  "success": false,
  "error": {
    "code": "api_error",
    "message": "fetch failed"
  },
  "trace_id": "2cf86e86-22a4-46e1-ac2f-032c0f2a4e89"
}
```

## Висновок

Завдяки цьому документу ви дізналися, як використовувати API розпізнавання зображень Recaptcha2, щоб дозволити користувачам вводити розпізнаний вміст та зображення коду Recaptcha2, а в кінці повернути координати малих зображень, на які потрібно натиснути, для завершення перевірки. Сподіваємося, цей документ допоможе вам краще інтегрувати та використовувати цей API. Якщо у вас є будь-які питання, будь ласка, звертайтеся до нашої технічної підтримки.
