> ## 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 接続説明

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

本文では、ユーザーが入力した内容と Recaptcha2 の CAPTCHA 画像を通じて、クリックする必要のある小さな画像の座標を返す Recaptcha2 画像認識 API の接続方法を紹介します。

## 申請プロセス

Recaptcha2 画像認識 API を使用するには、まず [Ace Data Cloud コンソール](https://platform.acedata.cloud/console/applications) にアクセスして API トークンを取得し、保管してください。

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

まだログインまたは登録していない場合は、自動的にログインページにリダイレクトされ、登録とログインを促されます。完了後、現在のページに自動的に戻ります。

**1つの API トークンでプラットフォームのすべてのサービスを呼び出すことができ、各サービスごとに個別に申請する必要はありません。** 初回申請時には無料のクレジットが付与され、無料で体験できます。クレジットが不足した場合は、[コンソール](https://platform.acedata.cloud/console/coin) で一般残高をチャージできます。

> 📘 完全なドキュメント：[Recaptcha2 画像認識 API →](https://platform.acedata.cloud/documents/captcha-recognition-recaptcha2)

## 基本使用

まず、基本的な使用方法を理解しましょう。ウェブサイトから Recaptcha2 CAPTCHA 画像をキャプチャする必要があります。ここでは、サンプルウェブサイトの URL は `https://www.google.com/recaptcha/api2/demo` です。具体的なページは以下の図の通りです：

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

CAPTCHA 画像が表示されるには、チェックボックスをクリックする必要があります。上の図で黄色の矢印が指している部分にあるテキストが、以下の `question` の値です。まず、具体的な Recaptcha2 CAPTCHA 画像を示す `image` フィールドを簡単に渡す必要があります。この画像は上の図で赤い矢印が指している画像であり、画像は標準サイズ (100x100, 300x300, 450x450) にスケーリングする必要があります。これにより、サービスが画像のタイプを判断できます。画像の圧縮は自分で行う必要があります。この記事では、[圧縮サイト](https://www.photopea.com/) を推奨します。このサイトで画像のサイズと大きさを圧縮できます。圧縮後の結果は以下の図の通りです：

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

また、CAPTCHA 画像に関連する認識内容パラメータ `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` と記入します。
* `authorization`：API を呼び出すためのキー、申請後に直接選択できます。

さらに、リクエストボディを設定しました。内容は以下の通りです：

* `image`：Base64 エンコードされた CAPTCHA 画像。
* `question`：問題 ID、表を参照してください。/m/ で始まります。

選択後、右側に対応するコードが生成されるのがわかります。以下の図の通りです：

<p>
  <img src="https://cdn.acedata.cloud/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 CAPTCHA 画像タスク処理後の検証結果。
  * `size`、Recaptcha2 CAPTCHA 画像のサイズ。
  * `label`、Recaptcha2 CAPTCHA 画像が認識した内容。
  * `confidences`、Recaptcha2 CAPTCHA 画像認識領域の信頼度、領域は0から始まります。
  * `objects`、Recaptcha2 CAPTCHA 画像認識後に認識内容を満たす領域、領域は0から始まります。
  * `type`、今回の Recaptcha2 CAPTCHA 画像タスクのタイプ、複数の領域がある場合は `multi`。

Recaptcha2 CAPTCHA 画像の検証結果を得たことがわかります。まず、CAPTCHA 画像を領域に分割します。以下の図の通りです：

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

領域はすべて0から始まっており、結果の `objects` から2,5,7を得ました。これらの3つの領域をクリックすることで検証を通過できます。

また、対応する接続コードを生成したい場合は、生成されたコードを直接コピーできます。例えば、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は同期ブロッキングです：1回のリクエストは、認識結果の処理が完了するまで待機します。複数のソルバーのローテーションを行っている場合、「タスクを送信した後、すぐに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"
  }
}
```

請求の説明：非同期モードでは、タスクの作成と「処理中」のポーリングは課金されません；**認識結果を成功裏に取得したときにのみ1回課金されます**（同期モードの価格と同じです）。したがって、ローテーション中に未完了のタスクをキャンセルしても費用は発生しません。`/captcha/tasks`はすべてのキャプチャインターフェース（トークンと認識シリーズ）に共通しており、同じ`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"
}
```

## 結論

この文書を通じて、Recaptcha2画像認識APIを使用してユーザーが認識内容とRecaptcha2キャプチャ画像を入力し、最終的にクリックする必要のある小さな画像の座標を返す方法を理解しました。この文書がAPIの接続と使用に役立つことを願っています。ご不明な点がございましたら、いつでも技術サポートチームにお問い合わせください。
