オブジェクト トラッキングは、入力された動画で検出されたオブジェクトを追跡します。オブジェクト トラッキング リクエストを行うには、annotate
メソッドを呼び出し、features
フィールドで OBJECT_TRACKING
を指定します。
動画または動画セグメントで検出されたエンティティと空いた場所の場合、オブジェクト トラッキング リクエストでは、これらのエンティティと空いた場所に対する適切なラベルで動画にアノテーションが付けられます。たとえば、信号を通過する車両の動画では、「car」、「truck」、「bike」、「tires」、「lights」、「window」などのラベルが生成されます。各ラベルには一連の境界ボックスがあり、各境界ボックスには時間セグメントが関連付けられています。時間セグメントには、動画の先頭からの時間を示す時間オフセットが含まれています。また、アノテーションには、追加のエンティティ情報も含まれます。たとえば、その情報を使用すると、Google Knowledge Graph Search API でエンティティの詳細を確認できる、エンティティ ID などがあります。
オブジェクト トラッキングとラベル検出
オブジェクト トラッキングとラベル検出は異なります。ラベル検出では、境界ボックスのないラベルが提供されるのに対し、オブジェクト トラッキングでは、動画上に存在する個々のオブジェクトのラベルに加え、各オブジェクト インスタンスの境界ボックスもタイムスタンプごとに表示されます。
同じオブジェクト タイプの複数のインスタンスが、ObjectTrackingAnnotation
メッセージの別々のインスタンスに割り当てられ、指定されたオブジェクト トラックのすべての出現が、ObjectTrackingAnnotation
のそれぞれ固有のインスタンスに保持されます。たとえば、動画内に赤い車と青い車の 5 秒間の表示がある場合、トラッキング リクエストにより、ObjectTrackingAnnotation
の 2 つのインスタンスが返されます。最初のインスタンスには赤と青の 2 台の車のいずれかの位置が含まれ、2 番目のインスタンスにはもう片方の車の位置が含まれます。
Cloud Storage 上の動画のオブジェクト トラッキングをリクエストする
次のサンプルは、Cloud Storage に存在するファイルのオブジェクト トラッキングを示しています。
プロセス リクエストを送信する
POST
リクエストを annotate
メソッドに送信する方法を以下に示します。この例では、Google Cloud CLI を使用するプロジェクト用に設定されたサービス アカウントのアクセス トークンを使用します。Google Cloud CLI のインストール、サービス アカウントでのプロジェクトの設定、アクセス トークンの取得を行う手順については、Video Intelligence のクイックスタートをご覧ください。
リクエストのデータを使用する前に、次のように置き換えます。
- INPUT_URI: STORAGE_URI
次に例を示します。
"inputUri": "gs://cloud-videointelligence-demo/assistant.mp4",
- PROJECT_NUMBER: Google Cloud プロジェクトの数値識別子。
HTTP メソッドと URL:
POST https://videointelligence.googleapis.com/v1/videos:annotate
リクエストの本文(JSON):
{ "inputUri": "STORAGE_URI ", "features": ["OBJECT_TRACKING"] }
リクエストを送信するには、次のいずれかのオプションを展開します。
curl(Linux、macOS、Cloud Shell)
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project:PROJECT_NUMBER " \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://videointelligence.googleapis.com/v1/videos:annotate"
PowerShell(Windows)
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "PROJECT_NUMBER " }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://videointelligence.googleapis.com/v1/videos:annotate" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
{ "name": "projects/PROJECT_NUMBER /locations/LOCATION_ID /operations/OPERATION_ID " }
リクエストが成功すると、Video Intelligence API はオペレーションの name
を返します。上記はレスポンスの例です。PROJECT_NUMBER
はプロジェクトの番号、OPERATION_ID
はリクエストに対して作成された長時間実行オペレーションの ID です。
結果を取得する
リクエストの結果を取得するには、以下の例に示すように、videos:annotate
の呼び出しで返されたオペレーション名を使用して GET
を送信します。
リクエストのデータを使用する前に、次のように置き換えます。
- OPERATION_NAME: Video Intelligence API によって返されるオペレーションの名前。オペレーション名の形式は
projects/PROJECT_NUMBER/locations/LOCATION_ID/operations/OPERATION_ID
です。 - PROJECT_NUMBER: Google Cloud プロジェクトの数値識別子。
HTTP メソッドと URL:
GET https://videointelligence.googleapis.com/v1/OPERATION_NAME
リクエストを送信するには、次のいずれかのオプションを展開します。
curl(Linux、macOS、Cloud Shell)
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project:PROJECT_NUMBER " \
"https://videointelligence.googleapis.com/v1/OPERATION_NAME "
PowerShell(Windows)
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "PROJECT_NUMBER " }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://videointelligence.googleapis.com/v1/OPERATION_NAME " | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
レスポンス
// Object tracking annotations are returned as aobjectAnnotations
list. { "name": "projects/PROJECT_NUMBER /locations/LOCATION_ID /operations/OPERATION_ID ", "metadata": { "@type": "type.googleapis.com/google.cloud.videointelligence.v1.AnnotateVideoProgress", "annotationProgress": [ { "inputUri": "/cloud-ml-sandbox/video/chicago.mp4", "progressPercent": 100, "startTime": "2019-12-21T16:56:46.755199Z", "updateTime": "2019-12-21T16:59:17.911197Z" } ] }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.videointelligence.v1.AnnotateVideoResponse", "annotationResults": [ { "inputUri": "/cloud-ml-sandbox/video/chicago.mp4", "objectAnnotations": [ { "entity": { "entityId": "/m/0k4j", "description": "car", "languageCode": "en-US" }, "frames": [ { "normalizedBoundingBox": { "left": 0.2672763, "top": 0.5677657, "right": 0.4388713, "bottom": 0.7623171 }, "timeOffset": "0s" }, { "normalizedBoundingBox": { "left": 0.26920167, "top": 0.5659805, "right": 0.44331276, "bottom": 0.76780635 }, "timeOffset": "0.100495s" }, ... { "normalizedBoundingBox": { "left": 0.83573246, "top": 0.6645812, "right": 1, "bottom": 0.99865407 }, "timeOffset": "2.311402s" } ], "segment": { "startTimeOffset": "0s", "endTimeOffset": "2.311402s" }, "confidence": 0.99488896 }, ... { "entity": { "entityId": "/m/0cgh4", "description": "building", "languageCode": "en-US" }, "frames": [ { "normalizedBoundingBox": { "left": 0.12340179, "top": 0.010383379, "right": 0.21914443, "bottom": 0.5591795 }, "timeOffset": "0s" }, { "normalizedBoundingBox": { "left": 0.12340179, "top": 0.009684974, "right": 0.22915152, "bottom": 0.56070584 }, "timeOffset": "0.100495s" }, ... { "normalizedBoundingBox": { "left": 0.12340179, "top": 0.008624528, "right": 0.22723165, "bottom": 0.56158626 }, "timeOffset": "0.401983s" } ], "segment": { "startTimeOffset": "0s", "endTimeOffset": "0.401983s" }, "confidence": 0.33914912 }, ... { "entity": { "entityId": "/m/0cgh4", "description": "building", "languageCode": "en-US" }, "frames": [ { "normalizedBoundingBox": { "left": 0.79324204, "top": 0.0006896425, "right": 0.99659824, "bottom": 0.5324423 }, "timeOffset": "37.585421s" }, { "normalizedBoundingBox": { "left": 0.78935236, "top": 0.0011992548, "right": 0.99659824, "bottom": 0.5374946 }, "timeOffset": "37.685917s" }, ... { "normalizedBoundingBox": { "left": 0.79404694, "right": 0.99659824, "bottom": 0.5280966 }, "timeOffset": "38.590379s" } ], "segment": { "startTimeOffset": "37.585421s", "endTimeOffset": "38.590379s" }, "confidence": 0.3415429 } ] } ] } }
アノテーションの結果をダウンロードする
アノテーションを、送信元バケットから送信先バケットにコピーします(ファイルとオブジェクトのコピーをご覧ください)。
gcloud storage cp gcs_uri gs://my-bucket
注: 出力 GCS URI がユーザーによって指定された場合、アノテーションはその GCS URI に格納されます。
Video Intelligence への認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証を設定するをご覧ください。
C#: クライアント ライブラリ ページの C# の設定手順を実行してから、.NET の Video Intelligence のリファレンス ドキュメントをご覧ください。
PHP: クライアント ライブラリ ページの PHP の設定手順を実行してから、PHP の Video Intelligence のリファレンス ドキュメントをご覧ください。
Ruby: クライアント ライブラリ ページの Ruby の設定手順を実行してから、Ruby の Video Intelligence のリファレンス ドキュメントをご覧ください。
ローカル ファイルの動画に対するオブジェクト トラッキングをリクエストする
次のサンプルは、ローカルに保存されたファイルのオブジェクト トラッキングを示しています。
プロセス リクエストを送信する
ローカル動画ファイルに対してアノテーションを付けるには、動画ファイルの内容を Base64 形式でエンコードします。リクエストの inputContent
フィールドに Base64 形式でエンコードされたコンテンツを格納します。
動画ファイルのコンテンツを Base64 形式でエンコードする方法については、Base64 エンコードをご覧ください。
POST
リクエストを videos:annotate
メソッドに送信する方法を以下に示します。この例では、Google Cloud CLI を使用するプロジェクト用に設定されたサービス アカウントのアクセス トークンを使用します。Google Cloud CLI のインストール、サービス アカウントでのプロジェクトの設定、アクセス トークンの取得を行う手順については、Video Intelligence のクイックスタートをご覧ください。
リクエストのデータを使用する前に、次のように置き換えます。
- inputContent: BASE64_ENCODED_CONTENT
次に例を示します。"UklGRg41AwBBVkkgTElTVAwBAABoZHJsYXZpaDgAAAA1ggAAxPMBAAAAAAAQCAA..."
- PROJECT_NUMBER: Google Cloud プロジェクトの数値識別子。
HTTP メソッドと URL:
POST https://videointelligence.googleapis.com/v1/videos:annotate
リクエストの本文(JSON):
{ "inputContent": "BASE64_ENCODED_CONTENT ", "features": ["OBJECT_TRACKING"] }
リクエストを送信するには、次のいずれかのオプションを展開します。
curl(Linux、macOS、Cloud Shell)
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project:PROJECT_NUMBER " \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://videointelligence.googleapis.com/v1/videos:annotate"
PowerShell(Windows)
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "PROJECT_NUMBER " }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://videointelligence.googleapis.com/v1/videos:annotate" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
レスポンス
{ "name": "projects/PROJECT_NUMBER /locations/LOCATION_ID /operations/OPERATION_ID " }
リクエストが成功すると、Video Intelligence がオペレーションの name
を返します。以下はレスポンスの例です。PROJECT_NUMBER
はプロジェクトの番号、OPERATION_ID
はリクエストに対して作成された長時間実行オペレーションの ID です。
結果を取得する
リクエストの結果を取得するには、以下の例に示すように、videos:annotate
の呼び出しで返されたオペレーション名を使用して GET
を送信します。
データをリクエストする前に、次のように置き換えます。
- OPERATION_NAME: Video Intelligence API によって返されるオペレーションの名前。オペレーション名の形式は
projects/PROJECT_NUMBER/locations/LOCATION_ID/operations/OPERATION_ID
です。 - PROJECT_NUMBER: Google Cloud プロジェクトの数値識別子。
HTTP メソッドと URL:
GET https://videointelligence.googleapis.com/v1/OPERATION_NAME
リクエストを送信するには、次のいずれかのオプションを展開します。
curl(Linux、macOS、Cloud Shell)
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project:PROJECT_NUMBER " \
"https://videointelligence.googleapis.com/v1/OPERATION_NAME "
PowerShell(Windows)
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "PROJECT_NUMBER " }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://videointelligence.googleapis.com/v1/OPERATION_NAME " | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
レスポンス
// Object tracking annotations are returned as aobjectAnnotations
list. { "name": "projects/PROJECT_NUMBER /locations/LOCATION_ID /operations/OPERATION_ID ", "metadata": { "@type": "type.googleapis.com/google.cloud.videointelligence.v1.AnnotateVideoProgress", "annotationProgress": [ { "inputContent": "UklGRg41AwBBVkkgTElTVAwBAABoZHJsYXZpaDgAAAA1ggAAxPMBAAAAAAAQCAA...", "progressPercent": 100, "startTime": "2018-06-21T16:56:46.755199Z", "updateTime": "2018-06-21T16:59:17.911197Z" } ] }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.videointelligence.v1.AnnotateVideoResponse", "annotationResults": [ { "inputContent": "/cloud-ml-sandbox/video/chicago.mp4", "objectAnnotations": [ { "entity": { "entityId": "/m/0k4j", "description": "car", "languageCode": "en-US" }, "frames": [ { "normalizedBoundingBox": { "left": 0.2672763, "top": 0.5677657, "right": 0.4388713, "bottom": 0.7623171 }, "timeOffset": "0s" }, { "normalizedBoundingBox": { "left": 0.26920167, "top": 0.5659805, "right": 0.44331276, "bottom": 0.76780635 }, "timeOffset": "0.100495s" }, ... { "normalizedBoundingBox": { "left": 0.83573246, "top": 0.6645812, "right": 1, "bottom": 0.99865407 }, "timeOffset": "2.311402s" } ], "segment": { "startTimeOffset": "0s", "endTimeOffset": "2.311402s" }, "confidence": 0.99488896 }, ... { "entity": { "entityId": "/m/0cgh4", "description": "building", "languageCode": "en-US" }, "frames": [ { "normalizedBoundingBox": { "left": 0.12340179, "top": 0.010383379, "right": 0.21914443, "bottom": 0.5591795 }, "timeOffset": "0s" }, { "normalizedBoundingBox": { "left": 0.12340179, "top": 0.009684974, "right": 0.22915152, "bottom": 0.56070584 }, "timeOffset": "0.100495s" }, ... { "normalizedBoundingBox": { "left": 0.12340179, "top": 0.008624528, "right": 0.22723165, "bottom": 0.56158626 }, "timeOffset": "0.401983s" } ], "segment": { "startTimeOffset": "0s", "endTimeOffset": "0.401983s" }, "confidence": 0.33914912 }, ... { "entity": { "entityId": "/m/0cgh4", "description": "building", "languageCode": "en-US" }, "frames": [ { "normalizedBoundingBox": { "left": 0.79324204, "top": 0.0006896425, "right": 0.99659824, "bottom": 0.5324423 }, "timeOffset": "37.585421s" }, { "normalizedBoundingBox": { "left": 0.78935236, "top": 0.0011992548, "right": 0.99659824, "bottom": 0.5374946 }, "timeOffset": "37.685917s" }, ... { "normalizedBoundingBox": { "left": 0.79404694, "right": 0.99659824, "bottom": 0.5280966 }, "timeOffset": "38.590379s" } ], "segment": { "startTimeOffset": "37.585421s", "endTimeOffset": "38.590379s" }, "confidence": 0.3415429 } ] } ] } }
Video Intelligence への認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証を設定するをご覧ください。
C#: クライアント ライブラリ ページの C# の設定手順を実行してから、.NET の Video Intelligence のリファレンス ドキュメントをご覧ください。
PHP: クライアント ライブラリ ページの PHP の設定手順を実行してから、PHP の Video Intelligence のリファレンス ドキュメントをご覧ください。
Ruby: クライアント ライブラリ ページの Ruby の設定手順を実行してから、Ruby の Video Intelligence のリファレンス ドキュメントをご覧ください。