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

# Recaptcha2 API de Reconhecimento de Imagem

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

Este artigo apresentará uma descrição da API de Reconhecimento de Imagem Recaptcha2, que pode identificar o conteúdo inserido pelo usuário e a imagem do captcha Recaptcha2, retornando as coordenadas das pequenas imagens que precisam ser clicadas para completar a verificação.

## Processo de Solicitação

Para usar a API de Reconhecimento de Imagem Recaptcha2, primeiro acesse o [Painel de Controle da Ace Data Cloud](https://platform.acedata.cloud/console/applications) para obter seu Token de API, que deve ser guardado para uso futuro.

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

Se você ainda não estiver logado ou registrado, será redirecionado automaticamente para a página de login, onde será convidado a se registrar e fazer login. Após a conclusão, você será redirecionado de volta para a página atual.

**Um Token de API é suficiente para acessar todos os serviços da plataforma, não sendo necessário solicitar um para cada serviço individualmente.** A primeira solicitação oferece um crédito gratuito para que você possa experimentar; quando o crédito acabar, você pode recarregar o saldo geral no [painel de controle](https://platform.acedata.cloud/console/coin).

> 📘 Documentação Completa: [API de Reconhecimento de Imagem Recaptcha2 →](https://platform.acedata.cloud/documents/captcha-recognition-recaptcha2)

## Uso Básico

Primeiro, vamos entender a forma básica de uso. Precisamos capturar a imagem do captcha Recaptcha2 do site. O URL do site de exemplo é: `https://www.google.com/recaptcha/api2/demo`, a página específica é mostrada na imagem abaixo:

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

Precisamos clicar na caixa de seleção do captcha para que a imagem do captcha apareça. Na imagem acima, a seta amarela aponta para um texto, que é o valor do `question` mencionado a seguir. Primeiro, precisamos passar um campo `image`, que é a imagem específica do captcha Recaptcha2, indicada pela seta vermelha na imagem acima. Além disso, a imagem deve ser redimensionada para um tamanho padrão (100x100, 300x300, 450x450), para que o serviço possa determinar o tipo de imagem. A compressão da imagem deve ser feita por você mesmo. Este artigo recomenda um [site de compressão](https://www.photopea.com/), onde você pode redimensionar e comprimir a imagem. O resultado da compressão é mostrado na imagem abaixo:

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

Além disso, é necessário inserir o parâmetro de conteúdo de reconhecimento relacionado à imagem do captcha, `question`. Abaixo, fornecemos uma tabela de conteúdo como referência:

### Tabela de Conteúdo em Chinês

```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 de Conteúdo em Inglês

```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 também é o mesmo
  "/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"
}
```

Como mencionado acima, definimos o parâmetro `question` como o correspondente ao hidrante de incêndio `/m/01pns0`, com o conteúdo específico mostrado abaixo:

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

Aqui, configuramos os Cabeçalhos da Solicitação, incluindo:

* `accept`: o formato de resposta desejado, que deve ser preenchido como `application/json`, ou seja, formato JSON.
* `authorization`: a chave para chamar a API, que pode ser selecionada diretamente após a solicitação.

Além disso, configuramos o Corpo da Solicitação, incluindo:

* `image`: a imagem do captcha codificada em Base64.
* `question`: ID da pergunta, consulte a tabela, começando com /m/.

Após a seleção, você verá que o código correspondente também foi gerado à direita, como mostrado na imagem abaixo:

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

Clique no botão "Try" para realizar o teste, como mostrado na imagem acima, e você receberá o seguinte resultado:

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

O resultado retornado contém vários campos, descritos a seguir:

* `solution`, o resultado da verificação após o processamento da imagem do captcha Recaptcha2.
  * `size`, o tamanho da imagem do captcha Recaptcha2.
  * `label`, o conteúdo reconhecido da imagem do captcha Recaptcha2.
  * `confidences`, a confiança nas áreas de reconhecimento da imagem do captcha Recaptcha2, começando do 0.
  * `objects`, as áreas que atendem ao conteúdo reconhecido da imagem do captcha Recaptcha2, começando do 0.
  * `type`, o tipo da tarefa da imagem do captcha Recaptcha2, que é `multi` quando há várias áreas.

Podemos ver que obtivemos o resultado da verificação da imagem do captcha Recaptcha2. Primeiro, dividimos a imagem do captcha em áreas, como mostrado na imagem abaixo:

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

As áreas começam do 0. A partir do resultado `objects`, obtemos 2, 5, 7, e precisamos simular cliques nessas três áreas para passar na verificação.

Além disso, se você quiser gerar o código de integração correspondente, pode copiá-lo diretamente, por exemplo, o código CURL é o seguinte:

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

O código de integração em Python é o seguinte:

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

## Modo Assíncrono (async)

Por padrão, a API é síncrona e bloqueante: uma solicitação aguardará até que o resultado do reconhecimento seja processado antes de retornar. Se você estiver fazendo rotação de múltiplos solucionadores (multi-solver rotation) e quiser "enviar a tarefa e imediatamente obter o task\_id, ir agendar outros solucionadores e voltar mais tarde para pegar o resultado", você pode passar `async: true` no corpo da solicitação.

Ao passar `async: true`, a interface retornará imediatamente um `task_id`, sem bloquear a espera:

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

Em seguida, use o `task_id` para fazer polling em `POST /captcha/tasks` (recomendado a cada 3\~5 segundos) para obter o resultado:

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

Durante o processamento, retornará `status: processing`:

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

Quando o processamento estiver concluído, retornará `status: ready` e o resultado do reconhecimento `solution` (a estrutura do campo é idêntica ao modo síncrono):

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

Descrição de cobrança: no modo assíncrono, a criação de tarefas e o polling "em processamento" não geram cobrança; **apenas quando o resultado do reconhecimento é obtido com sucesso é cobrado uma vez** (o mesmo preço do modo síncrono). Portanto, cancelar tarefas que ainda não foram concluídas durante a rotação não gerará custos. `/captcha/tasks` é aplicável a todas as interfaces de captcha (token e série de reconhecimento), basta usar o mesmo `task_id` para polling.

## Tratamento de Erros

Ao chamar a API, se ocorrer um erro, a API retornará o código de erro e a mensagem correspondente. Por exemplo:

* `400 token_mismatched`: Solicitação inválida, possivelmente devido a parâmetros ausentes ou inválidos.
* `400 api_not_implemented`: Solicitação inválida, possivelmente devido a parâmetros ausentes ou inválidos.
* `401 invalid_token`: Não autorizado, token de autorização inválido ou ausente.
* `429 too_many_requests`: Muitas solicitações, você excedeu o limite de taxa.
* `500 api_error`: Erro interno do servidor, algo deu errado no servidor.

### Exemplo de Resposta de Erro

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

## Conclusão

Através deste documento, você já entendeu como usar a API de reconhecimento de imagem Recaptcha2 para permitir que os usuários insiram o conteúdo reconhecido e a imagem do captcha Recaptcha2, retornando finalmente as coordenadas da pequena imagem que precisa ser clicada para completar a verificação. Esperamos que este documento ajude você a integrar e usar melhor essa API. Se tiver alguma dúvida, entre em contato com nossa equipe de suporte técnico.
