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

# Instrucciones para la integración de la API de reconocimiento de imágenes Recaptcha2

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

Este documento presentará una forma de integración de la API de reconocimiento de imágenes Recaptcha2, que puede identificar el contenido ingresado por el usuario y la imagen del código de verificación Recaptcha2, y finalmente devolver las coordenadas de las pequeñas imágenes que necesitan ser clicadas para completar la verificación.

## Proceso de solicitud

Para utilizar la API de reconocimiento de imágenes Recaptcha2, primero dirígete a [la consola de Ace Data Cloud](https://platform.acedata.cloud/console/applications) para obtener tu Token de API, que debes guardar para uso futuro.

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

Si aún no has iniciado sesión o registrado, serás redirigido automáticamente a la página de inicio de sesión que te invitará a registrarte e iniciar sesión; una vez completado, serás redirigido de nuevo a la página actual.

**Un Token de API es suficiente para acceder a todos los servicios de la plataforma, no es necesario solicitar uno por cada servicio.** La primera solicitud incluirá un crédito gratuito para que puedas probarlo; si el crédito es insuficiente, puedes recargar el saldo general en [la consola](https://platform.acedata.cloud/console/coin).

> 📘 Documentación completa: [API de reconocimiento de imágenes Recaptcha2 →](https://platform.acedata.cloud/documents/captcha-recognition-recaptcha2)

## Uso básico

Primero, entendamos la forma básica de uso. Necesitamos capturar la imagen del código de verificación Recaptcha2 desde el sitio web; aquí el URL del sitio de ejemplo es: `https://www.google.com/recaptcha/api2/demo`, la página específica se muestra en la siguiente imagen:

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

Necesitamos hacer clic en la casilla de verificación del código de verificación para que aparezca la imagen del código de verificación. En la imagen anterior, la flecha amarilla señala un texto, que es el valor de `question` que se menciona más adelante. Primero, necesitamos pasar un campo `image`, que es la imagen específica del código de verificación Recaptcha2, la cual está indicada por la flecha roja en la imagen anterior. Además, la imagen debe ser escalada a un tamaño estándar (100x100, 300x300, 450x450), de esta manera el servicio podrá determinar el tipo de imagen. La compresión de la imagen debe ser realizada por ti mismo; este documento recomienda un [sitio de compresión](https://www.photopea.com/), donde puedes ajustar el tamaño y la calidad de la imagen. El resultado de la compresión se muestra en la imagen a continuación:

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

También es necesario ingresar el parámetro de contenido relacionado con la imagen del código de verificación `question`, a continuación se proporciona una tabla de contenido como referencia:

### Tabla de contenido en chino

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

### Tabla de contenido en 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 también es lo mismo
  "/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"
}
```

De lo anterior, podemos establecer el parámetro `question` como el correspondiente a la boca de incendios `/m/01pns0`, el contenido específico es el siguiente:

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

Aquí podemos ver que hemos configurado los encabezados de la solicitud, que incluyen:

* `accept`: el formato de respuesta que deseas recibir, aquí se establece como `application/json`, es decir, en formato JSON.
* `authorization`: la clave para llamar a la API, que puedes seleccionar directamente después de solicitarla.

Además, se configuró el cuerpo de la solicitud, que incluye:

* `image`: la imagen del código de verificación codificada en Base64.
* `question`: ID de la pregunta, consulta la tabla, debe comenzar con /m/.

Después de seleccionar, puedes ver que también se generó el código correspondiente a la derecha, como se muestra en la imagen:

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

Haz clic en el botón "Try" para realizar la prueba, como se muestra en la imagen anterior, y obtendremos el siguiente 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"
  }
}
```

El resultado devuelto tiene varios campos, que se describen a continuación:

* `solution`, el resultado de la verificación después de procesar la imagen del código de verificación Recaptcha2.
  * `size`, el tamaño de la imagen del código de verificación Recaptcha2.
  * `label`, el contenido identificado de la imagen del código de verificación Recaptcha2.
  * `confidences`, la confianza en las áreas de reconocimiento de la imagen del código de verificación Recaptcha2, las áreas comienzan desde 0.
  * `objects`, las áreas que cumplen con el contenido reconocido de la imagen del código de verificación Recaptcha2, las áreas comienzan desde 0.
  * `type`, el tipo de tarea de la imagen del código de verificación Recaptcha2, si hay múltiples áreas es `multi`.
* `started_at`, `finished_at`: el tiempo de inicio y finalización del procesamiento de esta solicitud, en marca de tiempo Unix (segundos, flotante).
* `elapsed`: el tiempo total de procesamiento (segundos).

Podemos ver que hemos obtenido el resultado de la verificación de la imagen del código de verificación Recaptcha2. Primero, dividimos la imagen del código de verificación en áreas, como se muestra en la imagen a continuación:

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

Podemos ver que las áreas comienzan desde 0, y del resultado en `objects` obtenemos 2, 5, 7, por lo que solo necesitamos simular un clic en esas tres áreas para pasar la verificación.

Además, si deseas generar el código de integración correspondiente, puedes copiarlo directamente, por ejemplo, el código de CURL es el siguiente:

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

El código de integración en Python es el siguiente:

```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 asíncrono (async)

Por defecto, la API es sincrónica y bloqueante: una solicitud esperará hasta que se complete el procesamiento del resultado de reconocimiento antes de devolverlo. Si estás haciendo rotación de múltiples solucionadores (multi-solver rotation) y deseas "enviar la tarea y obtener inmediatamente el task\_id, luego programar otros solucionadores y volver más tarde a obtener el resultado", puedes incluir `async: true` en el cuerpo de la solicitud.

Al incluir `async: true`, la interfaz devolverá inmediatamente un `task_id` sin bloquear la 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}
{
  "task_id": "61138bb6-19aa-11ec-a9c8-0242ac110002",
  "trace_id": "2efa9340-b21b-4e26-9e14-4aac95f343ab"
}
```

Luego, utiliza ese `task_id` para hacer polling a `POST /captcha/tasks` (se recomienda cada 3\~5 segundos) para obtener el 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"
}'
```

Mientras se procesa, se devolverá `status: processing`:

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

Una vez completado el procesamiento, se devolverá `status: ready` y el resultado de reconocimiento `solution` (la estructura de los campos es completamente idéntica al modo sincrónico):

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

Descripción de facturación: en modo asíncrono, la creación de tareas y el polling "en procesamiento" no generan costos; **solo se cobra una vez al obtener con éxito el resultado de reconocimiento** (el mismo precio que en el modo sincrónico). Por lo tanto, cancelar tareas que aún no se han completado durante la rotación no generará costos. `/captcha/tasks` es común para todas las interfaces de captcha (token y serie de reconocimiento), se puede hacer polling con el mismo `task_id`.

## Manejo de errores

Al llamar a la API, si se encuentra un error, la API devolverá el código de error y la información correspondiente. Por ejemplo:

* `400 token_mismatched`: Solicitud incorrecta, posiblemente debido a parámetros faltantes o inválidos.
* `400 api_not_implemented`: Solicitud incorrecta, posiblemente debido a parámetros faltantes o inválidos.
* `401 invalid_token`: No autorizado, token de autorización inválido o faltante.
* `429 too_many_requests`: Demasiadas solicitudes, has superado el límite de tasa.
* `500 api_error`: Error interno del servidor, algo salió mal en el servidor.

### Ejemplo de respuesta de error

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

## Conclusión

A través de este documento, has aprendido cómo utilizar la API de reconocimiento de imágenes Recaptcha2 para permitir que los usuarios ingresen el contenido reconocido y la imagen del captcha Recaptcha2, y finalmente devolver las coordenadas de las pequeñas imágenes que necesitan ser clicadas para completar la verificación. Esperamos que este documento te ayude a integrar y utilizar mejor esta API. Si tienes alguna pregunta, no dudes en contactar a nuestro equipo de soporte técnico.
