画像内のテキストを検出する

Google Distributed Cloud(GDC)エアギャップの Vertex AI の光学式文字認識(OCR)サービスは、BatchAnnotateImages API メソッドを使用して画像内のテキストを検出します。このサービスは、画像の JPEG ファイルと PNG ファイルをサポートしています。

このページでは、Distributed Cloud で OCR API を使用して画像テキストを検出する方法について説明します。

始める前に

画像内のテキストを検出するには、IAM プロジェクト管理者に連絡して、プロジェクトの名前空間で AI OCR デベロッパー(ai-ocr-developer)ロールをリクエストします。

このロールの詳細については、IAM 権限を準備するをご覧ください。

OCR API を使用するには、OCR API が有効になっているプロジェクトと適切な認証情報が必要です。また、この API の呼び出しを支援するクライアント ライブラリをインストールすることもできます。詳細については、文字認識プロジェクトを設定するをご覧ください。

JPEG ファイルと PNG ファイルからテキストを検出する

BatchAnnotateImages メソッドは、JPEG または PNG ファイルのバッチからテキストを検出します。テキストを検出するファイルを、API リクエストのコンテンツとして直接送信します。システムは、検出されたテキストを JSON 形式で API レスポンスに返します。

API リクエストの JSON 本文のフィールドに値を指定する必要があります。次の表に、テキスト検出リクエストに BatchAnnotateImages API メソッドを使用するときに指定する必要があるリクエスト本文のフィールドの説明を示します。

リクエスト本文のフィールド フィールドの説明
content 検出するテキストを含む画像。バイナリ画像データの Base64 表現(ASCII 文字列)を指定します。
type 画像から必要なテキスト検出のタイプ。

次の 2 つのアノテーション機能のいずれかを指定します。
  • TEXT_DETECTION は、任意の画像からテキストを検出、抽出します。JSON レスポンスには、抽出された文字列、個々の単語、それらの境界ボックスが含まれます。
  • DOCUMENT_TEXT_DETECTION も画像からテキストを抽出しますが、このサービスは、高密度のテキストとドキュメント向けにレスポンスを最適化します。ページ、ブロック、段落、単語、改行の情報が JSON に含まれます。
これらのアノテーション機能の詳細については、光学式文字認識機能をご覧ください。
language_hints 省略可。テキスト検出に使用する言語のリスト。

このフィールドの値が空の場合、システムは言語の自動検出として解釈します。

ラテン アルファベット系の言語の場合、language_hints フィールドを設定する必要はありません。

画像内のテキストの言語がわかっている場合は、ヒントを設定すると結果が改善されます。

完全な JSON 表現については、AnnotateImageRequest をご覧ください。

API リクエストを発行する

REST API メソッドを使用して、OCR 事前トレーニング済み API にリクエストを送信します。それ以外の場合は、Python スクリプトから OCR 事前トレーニング済み API を操作して、JPEG ファイルまたは PNG ファイルからテキストを検出します。

次の例は、OCR を使用して画像内のテキストを検出する方法を示しています。

REST

REST API メソッドを使用して画像内のテキストを検出する手順は次のとおりです。

  1. リクエスト本文用に次の request.json ファイルを保存します。

    cat <<- EOF > request.json
    {
      "requests": [
        {
          "image": {
            "content": BASE64_ENCODED_IMAGE
          },
          "features": [
            {
              "type": "FEATURE_TYPE"
            }
          ],
          "image_context": {
            "language_hints": [
              "LANGUAGE_HINT_1",
              "LANGUAGE_HINT_2",
              ...
            ]
          }
        }
      ]
    }
    EOF
    

    次のように置き換えます。

    • BASE64_ENCODED_IMAGE: バイナリ画像データの Base64 表現(ASCII 文字列)。この文字列は、/9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q== のような文字で始まります。
    • FEATURE_TYPE: 画像から必要なテキスト検出のタイプ。使用できる値は、TEXT_DETECTION または DOCUMENT_TEXT_DETECTION です。
    • LANGUAGE_HINT: テキスト検出の言語ヒントとして使用する BCP 47 言語タグ(en-t-i0-handwrit など)。このフィールドは省略可能です。空の値は、言語の自動検出として解釈されます。
  2. 認証トークンを取得する。

  3. 次のリクエストを行います。

    curl

    curl -X POST \
      -H "Authorization: Bearer TOKEN" \
      -H "x-goog-user-project: projects/PROJECT_ID" \
      -H "Content-Type: application/json; charset=utf-8" \
      -d @request.json \
      https://ENDPOINT/v1/images:annotate
    

    次のように置き換えます。

    PowerShell

    $headers = @{
      "Authorization" = "Bearer TOKEN"
      "x-goog-user-project" = "projects/PROJECT_ID"
    }
    
    Invoke-WebRequest
      -Method POST
      -Headers $headers
      -ContentType: "application/json; charset=utf-8"
      -InFile request.json
      -Uri "ENDPOINT/v1/images:annotate" | Select-Object -Expand Content
    

    次のように置き換えます。

Python

Python スクリプトから OCR サービスを使用して画像内のテキストを検出する手順は次のとおりです。

  1. 最新バージョンの OCR クライアント ライブラリをインストールします。

  2. Python スクリプトで必要な環境変数を設定する。

  3. API リクエストを認証する。

  4. 作成した Python スクリプトに次のコードを追加します。

    from google.cloud import vision
    import google.auth
    from google.auth.transport import requests
    from google.api_core.client_options import ClientOptions
    
    audience = "https://ENDPOINT:443"
    api_endpoint="ENDPOINT:443"
    
    def vision_client(creds):
      opts = ClientOptions(api_endpoint=api_endpoint)
      return vision.ImageAnnotatorClient(credentials=creds, client_options=opts)
    
    def main():
      creds = None
      try:
        creds, project_id = google.auth.default()
        creds = creds.with_gdch_audience(audience)
        req = requests.Request()
        creds.refresh(req)
      except Exception as e:
        print("Caught exception" + str(e))
        raise e
      return creds
    
    def vision_func(creds):
      vc = vision_client(creds)
      image = {"content": "BASE64_ENCODED_IMAGE"}
      features = [{"type_": vision.Feature.Type.FEATURE_TYPE}]
      # Each requests element corresponds to a single image. To annotate more
      # images, create a request element for each image and add it to
      # the array of requests
      req = {"image": image, "features": features}
    
      metadata = [("x-goog-user-project", "projects/PROJECT_ID")]
    
      resp = vc.annotate_image(req,metadata=metadata)
    
      print(resp)
    
    if __name__=="__main__":
      creds = main()
      vision_func(creds)
    

    次のように置き換えます。

    • ENDPOINT: 組織で使用する OCR エンドポイント。詳細については、サービス ステータスとエンドポイントを表示するをご覧ください。
    • BASE64_ENCODED_IMAGE: バイナリ画像データの Base64 表現(ASCII 文字列)。この文字列は、/9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q== のような文字で始まります。
    • FEATURE_TYPE: 画像から必要なテキスト検出のタイプ。使用できる値は、TEXT_DETECTION または DOCUMENT_TEXT_DETECTION です。
    • PROJECT_ID: プロジェクト ID。
  5. Python スクリプトを保存します。

  6. Python スクリプトを実行して、画像内のテキストを検出します。

    python SCRIPT_NAME
    

    SCRIPT_NAME は、Python スクリプトに付けた名前(vision.py など)に置き換えます。