> ## 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.

# Opis integracji API rozpoznawania obrazów Recaptcha2

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

Niniejszy dokument przedstawia sposób integracji API rozpoznawania obrazów Recaptcha2, które może zidentyfikować treść wprowadzaną przez użytkownika oraz obraz weryfikacji Recaptcha2, a na końcu zwrócić współrzędne małych obrazków, które należy kliknąć, aby zakończyć weryfikację.

## Proces aplikacji

Aby skorzystać z API rozpoznawania obrazów Recaptcha2, najpierw przejdź do [konsoli Ace Data Cloud](https://platform.acedata.cloud/console/applications), aby uzyskać swój token API, który należy zachować na przyszłość.

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

Jeśli nie jesteś zalogowany lub zarejestrowany, automatycznie zostaniesz przekierowany na stronę logowania, aby zarejestrować się i zalogować, a po zakończeniu zostaniesz automatycznie przekierowany z powrotem na bieżącą stronę.

**Jeden token API wystarczy do korzystania ze wszystkich usług platformy, nie ma potrzeby składania osobnych wniosków dla każdej usługi.** Przy pierwszym wniosku przyznawana jest darmowa kwota, aby można było skorzystać z bezpłatnej wersji; w przypadku niewystarczającej kwoty można doładować saldo ogólne w [konsoli](https://platform.acedata.cloud/console/coin).

> 📘 Pełna dokumentacja: [API rozpoznawania obrazów Recaptcha2 →](https://platform.acedata.cloud/documents/captcha-recognition-recaptcha2)

## Podstawowe użycie

Najpierw zapoznaj się z podstawowym sposobem użycia, musimy przechwycić obraz weryfikacji Recaptcha2 z witryny, przykładowy URL witryny to: `https://www.google.com/recaptcha/api2/demo`, a konkretna strona wygląda jak na poniższym obrazku:

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

Musimy kliknąć pole wyboru weryfikacji, aby pojawił się obraz weryfikacji, na powyższym obrazku żółta strzałka wskazuje fragment tekstu, który jest wartością `question` w dalszej części. Najpierw musimy przekazać prosty parametr `image`, który jest konkretnym obrazem weryfikacji Recaptcha2, ten obraz jest wskazywany przez czerwoną strzałkę na powyższym obrazku, a obraz musi być skalowany do standardowego rozmiaru (100x100, 300x300, 450x450), aby usługa mogła określić typ obrazu, kompresję obrazu musisz wykonać samodzielnie, w tym dokumencie polecamy [stronę do kompresji](https://www.photopea.com/), na której możesz skompresować obraz pod względem rozmiaru i wielkości, a wynik po kompresji wygląda jak na obrazku:

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

Musisz również wprowadzić parametry treści związane z obrazem weryfikacji `question`, poniżej przedstawiamy tabelę z treściami, która może służyć jako odniesienie:

### Tabela treści w języku chińskim

```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": "楼梯"
}
```

### Tabela treści w języku angielskim

```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  również jest poprawne
  "/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"
}
```

Z powyższego tekstu wynika, że parametr `question` powinien być ustawiony na odpowiadający hydrantowi `/m/01pns0`, a konkretna treść wygląda następująco:

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

Możemy zobaczyć, że ustawiliśmy nagłówki żądania, w tym:

* `accept`: jakiego formatu odpowiedzi oczekujemy, tutaj wpisujemy `application/json`, czyli format JSON.
* `authorization`: klucz do wywołania API, po złożeniu wniosku można go bezpośrednio wybrać z rozwijanej listy.

Dodatkowo ustawiliśmy ciało żądania, które obejmuje:

* `image`: obraz weryfikacji zakodowany w Base64.
* `question`: ID pytania, proszę sprawdzić tabelę, zaczyna się od /m/.

Po dokonaniu wyboru, można zauważyć, że po prawej stronie wygenerowany został odpowiedni kod, jak pokazano na obrazku:

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

Kliknij przycisk „Try”, aby przeprowadzić test, jak pokazano na powyższym obrazku, a otrzymamy następujący wynik:

```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"
  }
}
```

Wynik zwrotny zawiera wiele pól, które są opisane poniżej:

* `solution`, wynik weryfikacji po przetworzeniu zadania z obrazem weryfikacji Recaptcha2.
  * `size`, rozmiar obrazu weryfikacji Recaptcha2.
  * `label`, treść rozpoznana na obrazie weryfikacji Recaptcha2.
  * `confidences`, poziom pewności rozpoznania obszarów na obrazie weryfikacji Recaptcha2, obszary zaczynają się od 0.
  * `objects`, obszary na obrazie weryfikacji Recaptcha2, które spełniają warunki rozpoznania, obszary zaczynają się od 0.
  * `type`, typ zadania z obrazem weryfikacji Recaptcha2, w przypadku wielu obszarów jest to `multi`.

Możemy zobaczyć, że otrzymaliśmy wynik weryfikacji obrazu weryfikacji Recaptcha2, najpierw dzielimy obraz weryfikacji na obszary, jak pokazano na poniższym obrazku:

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

Możemy zauważyć, że obszary zaczynają się od 0, z wyniku `objects` otrzymaliśmy 2,5,7, wystarczy, że zasymulujemy kliknięcie w te trzy obszary, aby przejść weryfikację.

Dodatkowo, jeśli chcesz wygenerować odpowiedni kod integracyjny, możesz go bezpośrednio skopiować, na przykład kod CURL wygląda następująco:

```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..."
}'
```

Kod integracyjny w Pythonie wygląda następująco:

```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)
```

## Tryb asynchroniczny (async)

Domyślnie API działa w trybie synchronizacji blokującej: jedno żądanie będzie czekać, aż przetwarzanie wyniku rozpoznawania zostanie zakończone, zanim zwróci odpowiedź. Jeśli wykonujesz rotację wielu rozwiązań (multi-solver rotation) i chcesz „natychmiast otrzymać task\_id po złożeniu zadania, a następnie zająć się innymi rozwiązaniami, wracając później po wyniki”, możesz przekazać `async: true` w ciele żądania.

Po przekazaniu `async: true`, interfejs natychmiast zwróci `task_id`, nie blokując oczekiwania:

```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"
}
```

Następnie użyj tego `task_id`, aby cyklicznie sprawdzać `POST /captcha/tasks` (zaleca się co 3-5 sekund), aby uzyskać wyniki:

```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"
}'
```

W trakcie przetwarzania zwróci `status: processing`:

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

Po zakończeniu przetwarzania zwróci `status: ready` oraz wynik rozpoznawania `solution` (struktura pól jest całkowicie zgodna z trybem synchronizacji):

```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"
  }
}
```

Informacje o opłatach: w trybie asynchronicznym, tworzenie zadań i cykliczne sprawdzanie „w trakcie przetwarzania” nie są obciążane opłatami; **opłata jest naliczana tylko raz, gdy uda się uzyskać wynik rozpoznawania** (cena jest zgodna z trybem synchronizacji). Dlatego anulowanie zadań, które nie zostały jeszcze zakończone w rotacji, nie generuje kosztów. `/captcha/tasks` jest wspólne dla wszystkich interfejsów CAPTCHA (token i seria rozpoznawania), można używać tego samego `task_id` do cyklicznego sprawdzania.

## Obsługa błędów

Podczas wywoływania API, jeśli napotkasz błąd, API zwróci odpowiedni kod błędu i informacje. Na przykład:

* `400 token_mismatched`: Złe żądanie, prawdopodobnie z powodu brakujących lub nieprawidłowych parametrów.
* `400 api_not_implemented`: Złe żądanie, prawdopodobnie z powodu brakujących lub nieprawidłowych parametrów.
* `401 invalid_token`: Nieautoryzowany, nieprawidłowy lub brakujący token autoryzacyjny.
* `429 too_many_requests`: Zbyt wiele żądań, przekroczono limit szybkości.
* `500 api_error`: Błąd wewnętrzny serwera, coś poszło nie tak na serwerze.

### Przykład odpowiedzi błędu

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

## Wnioski

Dzięki temu dokumentowi zrozumiałeś, jak korzystać z API rozpoznawania obrazów Recaptcha2, aby umożliwić użytkownikowi wprowadzenie rozpoznawanej treści oraz obrazu CAPTCHA Recaptcha2, a na końcu zwrócić współrzędne małych obrazków, które należy kliknąć, aby zakończyć weryfikację. Mamy nadzieję, że ten dokument pomoże Ci lepiej zintegrować i korzystać z tego API. W razie jakichkolwiek pytań, prosimy o kontakt z naszym zespołem wsparcia technicznego.
