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

# Recaptcha2 圖像識別 API 對接說明

> Recaptcha verification code recognition service 集成指南 - XHuoAPI

本文將介紹一種 Recaptcha2 圖像識別2 API 對接說明，它可以通過用戶輸入識別的內容和 Recaptcha2 驗證碼圖像，最後返回需要點擊的小圖像的坐標，完成驗證。

## 申請流程

要使用 API，需要先到 [Recaptcha2 圖像識別 API](https://api.xhuoapi.ai/documents/b9bf7d07-b178-4881-ae45-a852ec40f53e) 對應頁面申請對應的服務，進入頁面之後，點擊「Acquire」按鈕，如圖所示：

![](https://cdn.xhuoapi.ai/q6ytrc.png)

如果你尚未登錄或註冊，會自動跳轉到登錄頁面邀請您來註冊和登錄，登錄註冊之後會自動返回當前頁面。

在首次申請時會有免費額度贈送，可以免費使用該 API。

## 基本使用

首先先了解下基本的使用方式，我們需要從網站中截取到 Recaptcha2 驗證碼圖像，此處示例網站的 URL：`https://www.google.com/recaptcha/api2/demo`，具體的頁面如下圖所示：

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

我們需要點擊驗證碼的複選框才會出現驗證碼圖像，在上圖中黃色箭頭指向的有一段文字內容，這個內容便是下文的 `question` 的值。首先需要簡單地傳遞一個 `image` 字段，這個就是具體 Recaptcha2 驗證碼圖像，這個圖像是上圖中紅色箭頭指向的圖像，同時必須將圖片縮放至標準大小 (100x100, 300x300, 450x450)，這樣服務才能判斷圖片類型，圖片的壓縮需要您自行壓縮，本文推薦一個[壓縮網站](https://www.photopea.com/)，您可以在此網站中對圖像進行尺寸和大小的壓縮，壓縮後的結果如圖所示：

![](https://cdn.xhuoapi.ai/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.xhuoapi.ai/d53oc3.png" width="500" className="m-auto" />
</p>

可以看到這裡我們設置了 Request Headers，包括：

* `accept`：想要接收怎樣格式的響應結果，這裡填寫為 `application/json`，即 JSON 格式。
* `authorization`：調用 API 的密鑰，申請之後可以直接下拉選擇。

另外設置了 Request Body，包括：

* `image`：Base64編碼的驗證碼圖像。
* `question`：問題 ID, 請查表, 以 /m/ 開頭。

選擇之後，可以發現右側也生成了對應代碼，如圖所示：

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

點擊「Try」按鈕即可進行測試，如上圖所示，這裡我們就得到了如下結果：

```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.xhuoapi.ai/2d6qhx.png" width="500" className="m-auto" />
</p>

可以看到區域都是從0開始的，從結果中 `objects`中我們得到了2,5,7，我們只需要對該驗證碼模擬點擊該三個區域便可通過驗證。

另外如果想生成對應的對接代碼，可以直接複製生成，例如 CURL 的代碼如下：

```shell theme={null}
curl -X POST 'https://api.xhuoapi.ai/v1/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.xhuoapi.ai/v1/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)
```

## 錯誤處理

在調用 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"
}
```

## 結論

通過本文檔，您已經了解了如何使用 Recaptcha2 圖像識別 API 讓用戶輸入識別的內容和 Recaptcha2 驗證碼圖像，最後返回需要點擊的小圖像的坐標，完成驗證。希望本文檔能幫助您更好地對接和使用該 API。如有任何問題，請隨時聯繫我們的技術支持團隊。
