Google Distributed Cloud(GDC)エアギャップ上の Vertex AI の光学式文字認識(OCR)サービスは、次の 2 つの API メソッドを使用して PDF ファイルと TIFF ファイルのテキストを検出します。
BatchAnnotateFiles
: インライン リクエストでテキストを検出する。AsyncBatchAnnotateFiles
: オフライン(非同期)リクエストでテキストを検出する。
このページでは、Distributed Cloud で OCR API を使用してファイル内のテキストを検出する方法について説明します。
始める前に
OCR API の使用を開始するには、OCR API が有効になっているプロジェクトと適切な認証情報が必要です。また、API の呼び出しを支援するクライアント ライブラリをインストールすることもできます。詳細については、文字認識プロジェクトを設定するをご覧ください。
インライン リクエストでテキストを検出する
BatchAnnotateFiles
メソッドは、PDF ファイルまたは TIFF ファイルのバッチからテキストを検出します。テキストを検出するファイルを、API リクエストのコンテンツとして直接送信します。システムは、検出されたテキストを JSON 形式で API レスポンスとして返します。
API リクエストの JSON 本文のフィールドに値を指定する必要があります。次の表に、テキスト検出リクエストで BatchAnnotateFiles
API メソッドを使用する場合に指定する必要があるリクエスト本文のフィールドの説明を示します。
リクエスト本文のフィールド | フィールドの説明 |
---|---|
content |
検出するテキストを含むファイル。バイナリ ファイル コンテンツの Base64 表現(ASCII 文字列)を指定します。 |
mime_type |
ソース ファイル形式。次のいずれかの値に設定する必要があります。
|
type |
ファイルから検出する必要があるテキストの種類。 次の 2 つのアノテーション機能のいずれかを指定します。
|
language_hints |
省略可。テキスト検出に使用する言語のリスト。 このフィールドの値が空の場合、システムは自動言語検出と解釈します。 ラテン アルファベット系の言語の場合、 language_hints フィールドを設定する必要はありません。ファイル内のテキストの言語がわかっている場合は、ヒントを設定すると結果が改善されます。 |
pages |
省略可。テキスト検出のために処理するファイルのページ数。 指定できるページ数の上限は 5 ページです。ページ数を指定しない場合、サービスはファイルの最初の 5 ページを処理します。 |
完全な JSON 表現については、AnnotateFileRequest
をご覧ください。
インライン API リクエストを作成する
REST API メソッドを使用して、OCR 事前トレーニング済み API にリクエストを送信します。それ以外の場合は、Python スクリプトから OCR 事前トレーニング済み API を操作して、PDF ファイルまたは TIFF ファイルからテキストを検出します。
次の例は、OCR を使用してファイル内のテキストを検出する方法を示しています。
REST
REST API メソッドを使用してファイル内のテキストを検出する手順は次のとおりです。
次の
request.json
ファイルをリクエスト本文として保存します。cat <<- EOF > request.json { "requests": [ { "input_config": { "content": BASE64_ENCODED_FILE, "mime_type": "application/pdf" }, "features": [ { "type": "FEATURE_TYPE" } ], "image_context": { "language_hints": [ "LANGUAGE_HINT_1", "LANGUAGE_HINT_2", ... ] }, "pages": [] } ] } EOF
次のように置き換えます。
BASE64_ENCODED_FILE
: バイナリ ファイル コンテンツの Base64 表現(ASCII 文字列)。この文字列は、/9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q==
に似た文字で始まります。FEATURE_TYPE
: ファイルから必要なテキスト検出のタイプ。指定できる値はTEXT_DETECTION
またはDOCUMENT_TEXT_DETECTION
です。LANGUAGE_HINT
: テキスト検出の言語ヒントとして使用する BCP 47 言語タグ(en-t-i0-handwrit
など)。このフィールドは省略可能です。空の値は自動言語検出として解釈されます。
次のリクエストを行います。
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/files:annotate
次のように置き換えます。
TOKEN
: 取得した認証トークン。PROJECT_ID
: プロジェクト ID。ENDPOINT
: 組織で使用する OCR エンドポイント。詳細については、サービス ステータスとエンドポイントを表示するをご覧ください。
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/files:annotate" | Select-Object -Expand Content
次のように置き換えます。
TOKEN
: 取得した認証トークン。ENDPOINT
: 組織で使用する OCR エンドポイント。詳細については、サービス ステータスとエンドポイントを表示するをご覧ください。
Python
Python スクリプトから OCR サービスを使用してファイル内のテキストを検出する手順は次のとおりです。
作成した 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) input_config = {"content": "BASE64_ENCODED_FILE"} features = [{"type_": vision.Feature.Type.FEATURE_TYPE}] # Each requests element corresponds to a single file. To annotate more # files, create a request element for each file and add it to # the array of requests req = {"input_config": input_config, "features": features} metadata = [("x-goog-user-project", "projects/PROJECT_ID")] resp = vc.annotate_file(req,metadata=metadata) print(resp) if __name__=="__main__": creds = main() vision_func(creds)
次のように置き換えます。
ENDPOINT
: 組織で使用する OCR エンドポイント。詳細については、サービス ステータスとエンドポイントを表示するをご覧ください。BASE64_ENCODED_FILE
: ファイル コンテンツの Base64 表現(ASCII 文字列)。この文字列は、/9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q==
に似た文字で始まります。FEATURE_TYPE
: ファイルから必要なテキスト検出のタイプ。指定できる値はTEXT_DETECTION
またはDOCUMENT_TEXT_DETECTION
です。PROJECT_ID
: プロジェクト ID。
Python スクリプトを保存します。
Python スクリプトを実行して、ファイル内のテキストを検出します。
python SCRIPT_NAME
SCRIPT_NAME
は、Python スクリプトに付けた名前(vision.py
など)に置き換えます。
オフライン リクエストでテキストを検出する
AsyncBatchAnnotateFiles
メソッドは、オフライン(非同期)リクエストを実行して、PDF または TIFF ファイルのバッチからテキストを検出します。ファイルには複数のページが含まれている場合があります。また、各ページに複数の画像が存在することもあります。ソースファイルは、Distributed Cloud プロジェクトのストレージ バケットに存在する必要があります。検出されたテキストは、JSON 形式でストレージ バケットに保存されます。
OCR サービスはオフライン処理を開始し、ファイルでテキスト検出を行う長時間実行プロセスの ID を返します。返された ID を使用して、オフライン処理のステータスを追跡できます。進行中のオペレーションが多すぎると、オフライン処理がすぐに開始されないことがあります。
API リクエストの JSON 本文のフィールドに値を指定する必要があります。次の表に、テキスト検出リクエストで AsyncBatchAnnotateFiles
API メソッドを使用する場合に指定する必要があるリクエスト本文のフィールドの説明を示します。
リクエスト本文のフィールド | フィールドの説明 |
---|---|
s3_source.uri |
Distributed Cloud プロジェクトのストレージ バケット内の有効なソースファイル(PDF または TIFF)の URI パス。 このファイルには、検出するテキストが含まれています。 リクエスト元のユーザーまたはサービス アカウントには、少なくともファイルに対する読み取り権限が必要です。 |
mime_type |
ソース ファイル形式。次のいずれかの値に設定する必要があります。
|
type |
ファイルから検出する必要があるテキストの種類。 次の 2 つのアノテーション機能のいずれかを指定します。
|
s3_destination.uri |
出力ファイルを保存する Distributed Cloud プロジェクトのストレージ バケットの URI パス。 この場所は、検出結果を保存する場所です。 リクエスト元のユーザーまたはサービス アカウントには、バケットへの書き込み権限が必要です。 |
ソースファイルをストレージ バケットに保存する
リクエストを送信する前に、OCR サービス アカウントに入力バケットに対する読み取り権限と出力バケットに対する書き込み権限があることを確認する必要があります。
入力バケットと出力バケットは、異なるプロジェクト名前空間に配置できます。入力バケットと出力バケットを同じにすると、結果が誤ったバケットに保存されるなどのエラーを防ぐことができます。
テキストを検出するファイルをストレージ バケットに保存する手順は次のとおりです。
- オブジェクト ストレージ用に gdcloud CLI を構成します。
プロジェクト Namespace にストレージ バケットを作成します。
Standard
ストレージ クラスを使用します。ストレージ バケットを作成するには、プロジェクト Namespace に
Bucket
リソースをデプロイします。apiVersion: object.gdc.goog/v1 kind: Bucket metadata: name: ocr-async-bucket namespace: PROJECT_NAMESPACE spec: description: bucket for async ocr storageClass: Standard bucketPolicy: lockingPolicy: defaultObjectRetentionDays: 90
OCR サービスで使用されるサービス アカウント(
g-vai-ocr-sie-sa
)に、バケットに対するread
権限とwrite
権限を付与します。次の手順に沿って、カスタム リソースを使用してロールとロール バインディングを作成します。
プロジェクト Namespace に
Role
リソースをデプロイして、ロールを作成します。apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: ocr-async-reader-writer namespace: PROJECT_NAMESPACE rules: - apiGroups: - object.gdc.goog resources: - buckets verbs: - read-object - write-object
プロジェクト Namespace に
RoleBinding
リソースをデプロイして、ロール バインディングを作成します。apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: ocr-async-reader-writer-rolebinding namespace: PROJECT_NAMESPACE roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: ocr-async-reader-writer subjects: - kind: ServiceAccount name: g-vai-ocr-sie-sa namespace: g-vai-ocr-sie
作成したストレージ バケットにファイルをアップロードします。詳細については、プロジェクトでストレージ オブジェクトをアップロードしてダウンロードするをご覧ください。
オフライン API リクエストを作成する
REST API メソッドを使用して、OCR 事前トレーニング済み API にリクエストを送信します。それ以外の場合は、Python スクリプトから OCR 事前トレーニング済み API を操作して、PDF ファイルまたは TIFF ファイルからテキストを検出します。
次の例は、OCR を使用してファイル内のテキストを検出する方法を示しています。
REST
REST API メソッドを使用してファイル内のテキストを検出する手順は次のとおりです。
次の
request.json
ファイルをリクエスト本文として保存します。cat <<- EOF > request.json { "parent": PROJECT_ID, "requests":[ { "input_config": { "s3_source": { "uri": "SOURCE_FILE" }, "mime_type": "application/pdf" }, "features": [ { "type": "FEATURE_TYPE" } ], "output_config": { "s3_destination": { "uri": "DESTINATION_BUCKET" } } } ] } EOF
次のように置き換えます。
PROJECT_ID
: プロジェクト ID。SOURCE_FILE
: Distributed Cloud プロジェクトのストレージ バケット内の有効なソースファイル(PDF または TIFF)の URI パス。FEATURE_TYPE
: ファイルから必要なテキスト検出のタイプ。指定できる値はTEXT_DETECTION
またはDOCUMENT_TEXT_DETECTION
です。DESTINATION_BUCKET
: 出力ファイルを保存する Distributed Cloud プロジェクトのストレージ バケットの URI パス。
次のリクエストを行います。
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/files:asyncBatchAnnotate
次のように置き換えます。
TOKEN
: 取得した認証トークン。PROJECT_ID
: プロジェクト ID。ENDPOINT
: 組織で使用する OCR エンドポイント。詳細については、サービス ステータスとエンドポイントを表示するをご覧ください。
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/files:asyncBatchAnnotate" | Select-Object -Expand Content
次のように置き換えます。
TOKEN
: 取得した認証トークン。ENDPOINT
: 組織で使用する OCR エンドポイント。詳細については、サービス ステータスとエンドポイントを表示するをご覧ください。
Python
Python スクリプトから OCR サービスを使用してファイル内のテキストを検出する手順は次のとおりです。
作成した 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_func_async(creds): vc = vision_client(creds) features = [{"type_": vision.Feature.Type.FEATURE_TYPE}] input_config = {"s3_source":{"uri":SOURCE_FILE},"mime_type": "application/pdf"} output_config = {"s3_destination": {"uri": DESTINATION_BUKET}} req = {"input_config": input_config, "output_config": output_config, "features":features} reqs = {"requests":[req],"parent":PROJECT_ID} metadata = [("x-goog-user-project", "projects/PROJECT_ID")] operation = vc.async_batch_annotate_files(request=reqs, metadata=metadata) lro = operation.operation resp = operation.result() 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 if __name__=="__main__": creds = main() vision_func_async(creds)
次のように置き換えます。
ENDPOINT
: 組織で使用する OCR エンドポイント。詳細については、サービス ステータスとエンドポイントを表示するをご覧ください。FEATURE_TYPE
: ファイルから必要なテキスト検出のタイプ。指定できる値はTEXT_DETECTION
またはDOCUMENT_TEXT_DETECTION
です。SOURCE_FILE
: Distributed Cloud プロジェクトのストレージ バケット内の有効なソースファイル(PDF または TIFF)の URI パス。DESTINATION_BUCKET
: 出力ファイルを保存する Distributed Cloud プロジェクトのストレージ バケットの URI パス。PROJECT_ID
: プロジェクト ID。
Python スクリプトを保存します。
Python スクリプトを実行して、ファイル内のテキストを検出します。
python SCRIPT_NAME
SCRIPT_NAME
は、Python スクリプトに付けた名前(vision.py
など)に置き換えます。
AsyncBatchAnnotateFiles
メソッドが返したオペレーション名を使用して、オペレーションのステータスを確認できます。
オペレーションのステータスを取得する
get
メソッドは、テキスト検出のオフライン リクエストなどの長時間実行オペレーションの最新の状態を返します。このメソッドを使用して、次の例のようにオペレーションのステータスを確認します。
curl -X GET "http://ENDPOINT/v1/OPERATION_NAME"
OPERATION_NAME
は、オフライン リクエストを行ったときに AsyncBatchAnnotateFiles
メソッドが返したオペレーション名に置き換えます。
処理の一覧を表示します
list
メソッドは、リクエストで指定されたフィルタに一致するオペレーションのリストを返します。このメソッドは、特定のプロジェクトのオペレーションを返すことができます。リストメソッドを呼び出すには、次の例のようにプロジェクト ID と OCR エンドポイントを指定します。
curl -X GET "http://ENDPOINT/v1/PROJECT_ID?page_size=10"