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

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

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

始める前に

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)
        print("Got token: ")
        print(creds.token)
      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 など)に置き換えます。