Video Intelligence API 可以检测、跟踪和识别视频内容中超过 10 万个品牌和徽标。
本页介绍了如何使用 Video Intelligence API 识别视频中的徽标。
在 Cloud Storage 中为视频添加注释
以下代码示例演示了如何在 Cloud Storage 中检测视频中的徽标。
发送处理请求
要在本地视频文件上执行注释,请对视频文件的内容进行 base64 编码。在请求的 inputContent
字段中添加 base64 编码的内容。如需了解如何对视频文件的内容进行 base64 编码,请参阅 Base64 编码。
下面演示了如何向 videos:annotate
方法发送 POST
请求。该示例使用通过 Google Cloud CLI 为项目设置的服务账号的访问令牌。如需了解有关安装 Google Cloud CLI、使用服务账号设置项目以及获取访问令牌的说明,请参阅 Video Intelligence 快速入门。
在使用任何请求数据之前,请先进行以下替换:
- INPUT_URI:包含要添加注释的文件的 Cloud Storage 存储分区(包括文件名)。必须以
gs://
开头。
例如:"inputUri": "gs://cloud-videointelligence-demo/assistant.mp4",
- PROJECT_NUMBER:您的 Google Cloud 项目的数字标识符
HTTP 方法和网址:
POST https://videointelligence.googleapis.com/v1/videos:annotate
请求 JSON 正文:
{ "inputUri":"INPUT_URI ", "features": ["LOGO_RECOGNITION"] }
如需发送您的请求,请展开以下选项之一:
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。
- PROJECT_NUMBER:您项目的编号
- LOCATION_ID:在其中添加注释的 Cloud 区域。支持的云区域为:
us-east1
、us-west1
、europe-west1
、asia-east1
。如果未指定区域,系统将根据视频文件位置确定区域。 - OPERATION_ID:是为请求创建的长时间运行的操作的 ID,并在启动操作时在响应中提供,例如
12345...
获取结果
要获取请求的结果,请使用对 videos:annotate
的调用返回的操作名称发送 GET
请求,如下例所示。
在使用任何请求数据之前,请先进行以下替换:
- OPERATION_NAME:Video Intelligence API 返回的操作名称。操作名称采用
projects/PROJECT_NUMBER/locations/LOCATION_ID/operations/OPERATION_ID
格式 - PROJECT_NUMBER:您的 Google Cloud 项目的数字标识符
HTTP 方法和网址:
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 响应:
响应
{ "name": "projects/PROJECT_NUMBER /locations/LOCATION_ID /operations/OPERATION_ID ", "metadata": { "@type": "type.googleapis.com/google.cloud.videointelligence.v1.AnnotateVideoProgress", "annotationProgress": [ { "inputUri": "/cloud-samples-data/video/googlework_short.mp4", "progressPercent": 100, "startTime": "2020-02-31T16:27:44.889439Z", "updateTime": "2020-02-31T16:27:56.526050Z" } ] }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.videointelligence.v1.AnnotateVideoResponse", "annotationResults": [ { "inputUri": "/cloud-samples-data/video/googlework_short.mp4", "segment": { "startTimeOffset": "0s", "endTimeOffset": "34.234200s" }, "logoRecognitionAnnotations": [{ "entity": { "entityId": "/m/045c7b", "description": "Google", "languageCode": "en-US" }, "tracks": [{ "segment": { "startTimeOffset": "10.543866s", "endTimeOffset": "12.345666s" }, "timestampedObjects": [{ "normalizedBoundingBox": { "left": 0.3912032, "top": 0.26212785, "right": 0.6469412, "bottom": 0.4434373 }, "timeOffset": "10.543866s" }, ... ], "confidence": 0.8588119 }, { "segment": { "startTimeOffset": "15.348666s", "endTimeOffset": "18.752066s" }, "timestampedObjects": [ { "normalizedBoundingBox": { "left": 0.69989866, "top": 0.79943377, "right": 0.76465744, "bottom": 0.9271479 }, "timeOffset": "15.348666s" }, { "normalizedBoundingBox": { "left": 0.68997324, "top": 0.78775305, "right": 0.75723547, "bottom": 0.91808647 }, "timeOffset": "15.448766s" }, ... } } ] } ] } }
下载注释结果
将来源中的注释复制到目标存储分区(请参阅复制文件和对象):
gcloud storage cp gcs_uri gs://my-bucket
注意:如果输出 gcs uri 由用户提供,则注释存储在该 gcs uri 中。
如需向 Video Intelligence 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
如需向 Video Intelligence 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
如需向 Video Intelligence 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
如需向 Video Intelligence 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
C#:请按照客户端库页面上的 C# 设置说明操作,然后访问 .NET 版 Video Intelligence 参考文档。
PHP:请按照客户端库页面上的 PHP 设置说明操作,然后访问 PHP 版 Video Intelligence 参考文档。
Ruby:请按照客户端库页面上的 Ruby 设置说明操作,然后访问 Ruby 版 Video Intelligence 参考文档。
为本地视频添加注释
以下代码示例演示了如何在本地视频文件中检测徽标。
发送视频注释请求
要对本地视频文件执行注释,请务必对视频文件的内容进行 base64 编码。在请求的 inputContent
字段中添加 base64 编码的内容。如需了解如何对视频文件的内容进行 base64 编码,请参阅 Base64 编码。
以下代码展示了如何向 videos:annotate
方法发送 POST 请求。该示例使用通过 Google Cloud CLI 为项目设置的服务账号的访问令牌。如需了解有关安装 Google Cloud CLI、使用服务账号设置项目以及获取访问令牌的说明,请参阅 Video Intelligence API 快速入门。
在使用任何请求数据之前,请先进行以下替换:
- "inputContent": BASE64_ENCODED_CONTENT
例如:"UklGRg41AwBBVkkgTElTVAwBAABoZHJsYXZpaDgAAAA1ggAAxPMBAAAAAAAQCAA..."
- LANGUAGE_CODE:[可选]请参阅支持的语言
- PROJECT_NUMBER:您的 Google Cloud 项目的数字标识符
HTTP 方法和网址:
POST https://videointelligence.googleapis.com/v1/videos:annotate
请求 JSON 正文:
{ "inputContent": "BASE64_ENCODED_CONTENT ", "features": ["LOGO_RECOGNITION"], "videoContext": { } }
如需发送您的请求,请展开以下选项之一:
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。
- OPERATION_ID:并在启动操作时在响应中提供,例如
12345...
获取注释结果
要检索操作的结果,请使用从 videos:annotate 调用返回的操作名称发出 GET 请求,如以下示例所示。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_NUMBER:您的 Google Cloud 项目的数字标识符
HTTP 方法和网址:
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 响应:
响应
"name": "projects/512816187662/locations/us-east1/operations/8399514592783793684", "metadata": { "@type": "type.googleapis.com/google.cloud.videointelligence.v1p3beta1.AnnotateVideoProgress", "annotationProgress": [ { "inputUri": "/videointelligence-prober-videos/face.mkv", "progressPercent": 100, "startTime": "2020-03-18T19:45:17.725359Z", "updateTime": "2020-03-18T19:45:26.532315Z" } ] }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.videointelligence.v1p3beta1.AnnotateVideoResponse", "annotationResults": [ { "inputUri": "/videointelligence-prober-videos/face.mkv", "segment": { "startTimeOffset": "0s", "endTimeOffset": "10.010s" }, "logoRecognitionAnnotations": [ { "entity": { "entityId": "/m/02z_b", "description": "Fox News", "languageCode": "en-US" }, "tracks": [ { "segment": { "startTimeOffset": "0s", "endTimeOffset": "1.901900s" }, "timestampedObjects": [ { "normalizedBoundingBox": { "left": 0.032402553, "top": 0.73683465, "right": 0.16249886, "bottom": 0.8664769 }, "timeOffset": "0s" }, { "normalizedBoundingBox": { "left": 0.03267879, "top": 0.73522913, "right": 0.1627307, "bottom": 0.86775583 }, "timeOffset": "0.100100s" }, { "normalizedBoundingBox": { "left": 0.031819325, "top": 0.73514116, "right": 0.16305345, "bottom": 0.8677738 }, "timeOffset": "0.200200s" }, { "normalizedBoundingBox": { "left": 0.03155339, "top": 0.7349258, "right": 0.16275825, "bottom": 0.86660737 }, "timeOffset": "0.300300s" }, .... ] }
文本检测注释以 textAnnotations
列表的形式返回。注意:仅当 done 字段的值为 True 时才会返回该字段。操作未完成的响应中不包含该字段。
如需向 Video Intelligence 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
如需向 Video Intelligence 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
如需向 Video Intelligence 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
如需向 Video Intelligence 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
C#:请按照客户端库页面上的 C# 设置说明操作,然后访问 .NET 版 Video Intelligence 参考文档。
PHP:请按照客户端库页面上的 PHP 设置说明操作,然后访问 PHP 版 Video Intelligence 参考文档。
Ruby:请按照客户端库页面上的 Ruby 设置说明操作,然后访问 Ruby 版 Video Intelligence 参考文档。