Vision API では、画像からテキストを検出、抽出できます。OCR をサポートするアノテーション機能が 2 つあります。
-
TEXT_DETECTION
は、任意の画像からテキストを検出、抽出します。たとえば、写真に道路名や交通標識が写っていれば、抽出された文字列全体、個々の単語、それらの境界ボックスが JSON レスポンスに含まれます。 -
DOCUMENT_TEXT_DETECTION
も画像からテキストを抽出しますが、高密度のテキストやドキュメントに応じてレスポンスが最適化され、ページ、ブロック、段落、単語、改行の情報が JSON に含まれます。
言語の指定
どちらのタイプの OCR リクエストでも、画像内の任意のテキストの言語を指定する 1 つ以上の languageHints
がサポートされています。しかし、ほとんどの場合、値を空にして自動言語検出を有効にしておくことによって最善の結果が得られます。ラテン アルファベット系の言語の場合、languageHints
の設定は不要です。画像中のテキストの言語がわかっている場合などに、ヒントを設定すると結果が少し良くなります(逆に、ヒントを間違えると大きな障害となります)。サポートされる言語以外の言語が 1 つでも指定されていると、テキスト検出でエラーが返されます。
コードサンプル
さまざまなプログラミング言語でのサンプルについては、以下をご覧ください。
テキスト検出のリクエスト
GCP プロジェクトと認証を設定する
テキスト検出
Powershell
Windows PowerShell を使用してラベル検出のリクエストを出すには、https://vision.googleapis.com/v1/images:annotate
エンドポイントに対する POST リクエストを実行し、次の例に示すように features.type
の値として TEXT_DETECTION
を指定します。
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body "{ 'requests': [ { 'image': { 'source': { 'imageUri': 'gs://bucket-name-123/abbey_road.jpg' } }, 'features': [ { 'type': 'TEXT_DETECTION' } ] } ] }" ` -Uri "https://vision.googleapis.com/v1/images:annotate" | Select-Object -Expand Content
画像の渡し方は 3 種類あります(base64 エンコード文字列、Google Cloud Storage URI、HTTPS または HTTP でアクセス可能な公開 URL)。詳しくは、リクエストの作成をご覧ください。
リクエストの本文の構成について詳しくは、AnnotateImageRequest
のリファレンス ドキュメントをご覧ください。
curl コマンド
Linux または MacOS コマンドラインから curl
を使用してラベル検出のリクエストを出すには、https://vision.googleapis.com/v1/images:annotate
エンドポイントに対する POST リクエストを実行し、次の例に示すように features.type
の値として TEXT_DETECTION
を指定します。
curl -X POST \ -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ -H "Content-Type: application/json; charset=utf-8" \ --data "{ 'requests': [ { 'image': { 'source': { 'imageUri': 'gs://bucket-name-123/abbey_road.jpg' } }, 'features': [ { 'type': 'TEXT_DETECTION' } ] } ] }" "https://vision.googleapis.com/v1/images:annotate"
ドキュメント テキスト検出の場合は、上記のリクエストの中を "type": "DOCUMENT_TEXT_DETECTION"
に置き換えてください。
画像は 3 種類の方法(base64 エンコード文字列(前述)、Google Cloud Storage URI、ウェブ URL)で渡すことができます。詳しくは、リクエストの作成をご覧ください。
リクエストの本文の構成について詳しくは、AnnotateImageRequest
のリファレンス ドキュメントをご覧ください。
gcloud コマンド
エンティティ分析を実行するには、次の例に示すように gcloud ml vision detect-text
コマンドを使用します。
gcloud ml vision detect-text "gs://bucket-name-123/abbey_road.jpg"
テキスト検出のレスポンス
リクエストが成功すると、サーバーは 200 OK
HTTP ステータス コードと JSON 形式のレスポンスを返します。
TEXT_DETECTION
レスポンスには、検出されたフレーズ、その境界ボックス、および個々の単語とその境界ボックスが含まれています。
{ "responses": [ { "textAnnotations": [ { "locale": "en", "description": "ABBEY\nROAD NW8\nCITY OF WESTMINSTER\n", "boundingPoly": { "vertices": [ { "x": 45, "y": 43 }, { "x": 269, "y": 43 }, { "x": 269, "y": 178 }, { "x": 45, "y": 178 } ] } }, { "description": "ABBEY", "boundingPoly": { "vertices": [ { "x": 45, "y": 50 }, { "x": 181, "y": 43 }, { "x": 183, "y": 80 }, { "x": 47, "y": 87 } ] } }, { "description": "ROAD", "boundingPoly": { "vertices": [ { "x": 48, "y": 96 }, { "x": 155, "y": 96 }, { "x": 155, "y": 132 }, { "x": 48, "y": 132 } ] } }, { "description": "NW8", "boundingPoly": { "vertices": [ { "x": 182, "y": 95 }, { "x": 269, "y": 95 }, { "x": 269, "y": 130 }, { "x": 182, "y": 130 } ] } }, { "description": "CITY", "boundingPoly": { "vertices": [ { "x": 51, "y": 162 }, { "x": 85, "y": 161 }, { "x": 85, "y": 177 }, { "x": 51, "y": 178 } ] } }, { "description": "OF", "boundingPoly": { "vertices": [ { "x": 95, "y": 162 }, { "x": 111, "y": 162 }, { "x": 111, "y": 176 }, { "x": 95, "y": 176 } ] } }, { "description": "WESTMINSTER", "boundingPoly": { "vertices": [ { "x": 124, "y": 162 }, { "x": 249, "y": 160 }, { "x": 249, "y": 174 }, { "x": 124, "y": 176 } ] } } ] } ] }
DOCUMENT_TEXT_DETECTION
レスポンスには、ページ、ブロック、段落、単語、および改行の情報など、付加的なレイアウト情報と、それぞれの信頼スコアが含まれています。(以下のサンプルでは簡素化された例が使用されています。高密度ドキュメントのレスポンスは長すぎるため、このページに表示できません)。
{ "responses": [ { "textAnnotations": [ { "locale": "en", "description": "O Google Cloud Platform\n", "boundingPoly": { "vertices": [ { "x": 14, "y": 11 }, { "x": 279, "y": 11 }, { "x": 279, "y": 37 }, { "x": 14, "y": 37 } ] } }, ], "fullTextAnnotation": { "pages": [ { "property": { "detectedLanguages": [ { "languageCode": "en", "confidence": 1 } ] }, "width": 281, "height": 44, "blocks": [ { "property": { "detectedLanguages": [ { "languageCode": "en", "confidence": 1 } ] }, "boundingBox": { "vertices": [ { "x": 14, "y": 11 }, { "x": 279, "y": 11 }, { "x": 279, "y": 37 }, { "x": 14, "y": 37 } ] }, "paragraphs": [ { "property": { "detectedLanguages": [ { "languageCode": "en" } ] }, "boundingBox": { "vertices": [ { "x": 14, "y": 11 }, { "x": 279, "y": 11 }, { "x": 279, "y": 37 }, { "x": 14, "y": 37 } ] }, "words": [ { "property": { "detectedLanguages": [ { "languageCode": "en" } ] }, "boundingBox": { "vertices": [ { "x": 14, "y": 11 }, { "x": 23, "y": 11 }, { "x": 23, "y": 37 }, { "x": 14, "y": 37 } ] }, "symbols": [ { "property": { "detectedLanguages": [ { "languageCode": "en" } ], "detectedBreak": { "type": "SPACE" } }, "boundingBox": { "vertices": [ { "x": 14, "y": 11 }, { "x": 23, "y": 11 }, { "x": 23, "y": 37 }, { "x": 14, "y": 37 } ] }, "text": "O" } ] }, ] } ], "blockType": "TEXT" } ] } ], "text": "Google Cloud Platform\n" } } ] }
手書きの検出
ドキュメント テキスト検出では、画像から手書き文字を検出することもできます。画像に手書きが含まれていることがわかっている場合は、言語ヒントを使用すると結果が向上します。
サンプルコード
画像上の手書きを検出するには、画像のファイルパスまたは公開 URL を Cloud Vision API に渡します。
プロトコル
画像から手書きを検出するには、DOCUMENT_TEXT_DETECTION
機能を指定し、言語ヒント "en-t-i0-handwrit" を含めてください。この言語ヒントは Vision API に対し、画像内の手書き文字を検出を使用するように指示します。次に POST リクエストを作成し、適切なリクエスト本文を指定します。
POST https://vision.googleapis.com/v1p3beta1/files:asyncBatchAnnotate Authorization: Bearer ACCESS_TOKEN { "requests": [ { "image": { "source": { "imageUri": "image-url" } }, "features": [ { "type": "DOCUMENT_TEXT_DETECTION" } ], "imageContext": { "languageHints": ["en-t-i0-handwrit"] } } ] }
Java
このサンプルを試す前に、クライアント ライブラリを使用する Vision API Quickstart の Java の設定手順に従ってください。詳細については、Vision API Java API のリファレンス ドキュメントをご覧ください。
Node.js
このサンプルを試す前に、クライアント ライブラリを使用する Vision API Quickstart の Node.js の設定手順に従ってください。詳細については、Vision API Node.js API のリファレンス ドキュメントをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用する Vision API Quickstart の Python の設定手順に従ってください。詳細については、Vision API Python API のリファレンス ドキュメントをご覧ください。
ローカル ファイルの読み取りとリクエストへの画像のインライン挿入の他に、手書きを抽出する画像の Google Cloud Storage URI を指定することもできます。
プロトコル
画像から手書きを検出するには、DOCUMENT_TEXT_DETECTION
機能を指定し、言語ヒント "en-t-i0-handwrit" を含めてください。この言語ヒントは Vision API に対し、画像内の手書き文字を検出を使用するように指示します。次に POST リクエストを作成し、適切なリクエスト本文を指定します。
POST https://vision.googleapis.com/v1p3beta1/files:asyncBatchAnnotate Authorization: Bearer ACCESS_TOKEN { "requests": [ { "image": { "source": { "imageUri": "gs://YOUR_BUCKET_NAME/YOUR_FILE_NAME" } }, "features": [ { "type": "DOCUMENT_TEXT_DETECTION" } ], "imageContext": { "languageHints": ["en-t-i0-handwrit"] } } ] }
Java
このサンプルを試す前に、クライアント ライブラリを使用する Vision API Quickstart の Java の設定手順に従ってください。詳細については、Vision API Java API のリファレンス ドキュメントをご覧ください。
Node.js
このサンプルを試す前に、クライアント ライブラリを使用する Vision API Quickstart の Node.js の設定手順に従ってください。詳細については、Vision API Node.js API のリファレンス ドキュメントをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用する Vision API Quickstart の Python の設定手順に従ってください。詳細については、Vision API Python API のリファレンス ドキュメントをご覧ください。
試してみる
以下のテキスト検出とドキュメント テキスト検出をお試しください。[実行] をクリックして、すでに指定済みの画像(gs://bucket-name-123/abbey_road.jpg
)を使用することも、独自の画像を代わりに指定することもできます。
ドキュメント テキスト検出を試すには、type
の値を DOCUMENT_TEXT_DETECTION
に更新します。