本文为 AI 研习社编译的技术博客,原标题 :
Step by Step Tutorial on how to use Google’s Video Intelligence API in Python
作者 | Harinath Selvaraj
翻译 | 伽罗瓦群
校对 | 邓普斯•杰弗 审核 | 酱番梨 整理 | 立鱼王
原文链接:
https://medium.com/harinathselvaraj/step-by-step-tutorial-on-how-to-use-googles-video-intelligence-api-in-python-8e2474ef959e
注:本文的相关链接请访问文末【阅读原文】
在军事、安防、监控领域,从输入视频中检测物体的任务扮演者关键的角色。姿态变化、衣着、背景杂斑、光照、容貌等因素会使这个任务变得更具挑战性。
成千上万的被雇用来检测安全视频片段,以辨认视频中是否存在某一个物品。
人类通常把监控视频内容当作一种职业。
这显然是一个累人又耗时的工作。如果有人随时告诉我们视频中是否有一辆车或一个人会怎样呢?由于深度学习和计算机视觉技术的发展,这些都变成了可能。
在过去数年中,深度学习已经超越了各种堪称艺术的机器学习方法。尤其在计算机视觉领域,深度学习对其产生了深远的影响。
Google在这个领域做了广泛的研究,并开发了一个系统(一个深度学习模型)可以在视频中给出物体的名字。这需要耗费数以亿计的图片和视频,喂给 Google 用于训练算法。有趣的是——所有的东西都可以通过 API 调用实现。
下面是 Google 云视频智能(Google's Cloud Video Intelligence)的访问链接:https://cloud.google.com/video-intelligence
API 支持通常的视频格式,如 .MOV、.MPEG4、.MP4、.AVI。
下面的任务(目前人类所做过的)可以通过一个简单的API调用实现。
标签检测:在视频中检测物体,如狗、花、人。
显式内容检测:在视频中检测成人内容。
拍摄变化检测:检测视频中的场景变化。
区域化:标记一个将要处理的区域。
语音听写:把视频中的语音变成文本。
物体跟踪(Beta):在视频中跟踪物体并汇报它们的位置(边界框)。
文本检测(Beta):在视频中执行光学字符识别(OCR)检测并提取文本。
既然我们知道了 API 可以做什么,让我们看看实现部分。由于许多深度学习工程师使用 Python 作为他们的主要语言,我将以 Python 展示其用法,尽管其他语言的 API 也是支持的。
在你的电脑上打开 Google Cloud 网站。
注意:如果你已经在使用 Google Cloud 了——如果你是使用 Google API,如地图,的开发者,你可能已经熟悉了这一切。
令人可喜的是 —— Google 给首次使用的用户提供 €300 免费点数!?
去控制台 新建项目。确保你已经在账号中 建立收费地址。你需要输入信用卡信息。不用担心,他们不会在 €300 过期之后自动收费。?
下一步是 启用 API。做了这步之后,你也需要提供提供启用 API 的地址。为此,需要 新建服务账号。不要在列表中选择任何角色。在提交表单后选择“Create without role”。这步会产生一组公开和私有密钥的 JSON 文件(用于访问 API)并下载到你的电脑上。妥善保存好这些文件,在第 3 步中将会用到。
现在你已经执行了上述步骤,最后一步是 下载 Google Cloud SDK。
在下载时,访问文件所在目录,解压缩,在命令行中执行下面的命令以安装、初始化 SDK。浏览器会打开一个新的标签,让你登陆 Google Cloud。
google-cloud-sdk/install.sh
google-cloud-sdk/bin/gcloud init
现在开始做一点代码练习! ?
我会给你 Python 命令,可以使用视频智能 API。
注意:如果你之前还没有使用过 Python,请前往原文阅读安装 Anaconda 文章。
在编写代码之前,在命令行中安装 Python 软件包
pip install google-cloud-videointelligence
我们总算搞定了。下面是用 Python 命令调用 API ——
#Import libraries
import argparse
from google.cloud import videointelligence
#Load the full path of JSON file obtained in step 1. Replace '/Users/harry/Downloads/SampleProject-1abc.json' with your filepath
import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="/Users/harry/Downloads/SampleProject-1abc.json"
#Call the API
client = videointelligence.VideoIntelligenceServiceClient()
job = client.annotate_video(
input_uri='gs://cloud-ml-sandbox/video/chicago.mp4',
features=['LABEL_DETECTION'],
)
result = job.result()
print(result)
输出结果是这样的:
annotation_results {
input_uri: "/cloud-ml-sandbox/video/chicago.mp4"
segment_label_annotations {
entity {
entity_id: "/m/01l7t2"
description: "downtown"
language_code: "en-US"
}
category_entities {
entity_id: "/m/01n32"
description: "city"
language_code: "en-US"
}
segments {
segment {
start_time_offset {
}
end_time_offset {
seconds: 38
nanos: 757872000
}
}
confidence: 0.9062400460243225
}
}
segment_label_annotations {
entity {
entity_id: "/m/06gfj"
description: "road"
language_code: "en-US"
}
segments {
segment {
start_time_offset {
}
end_time_offset {
seconds: 38
nanos: 757872000
}
}
confidence: 0.8779934048652649
}
}
.....
}
在上面的 API 结论中包含了描述性字段(描述物品)并且以及在视频中出现的时间和置信度。置信度为 0.9062400460243225 意味着有 90% 准确度的信心。
你可以直接载入 JSON 输出数据到数据库。这使得你可用查询语句查询数据库,检查某一个物体是否在某一个时间帧出现。
现在,你可能会注意到 ‘LABEL_DETECTION’是一个给定的特征。我没有告诉你视频智能 API 还可以更多的事情吗?这是真的,你还可以提取更多其他特征。下面是一些样本代码:
features=[‘LABEL_DETECTION’, ‘SHOT_CHANGE_DETECTION’]
下面是 各种参数可以指定特征输入:
LABEL_DETECTION 标签检测。检测物体,如狗、花。
SHOT_CHANGE_DETECTION 拍摄场景改变检测。
EXPLICIT_CONTENT_DETECTION 显示内容检测。
SPEECH_TRANSCRIPTION 语音听写。
注意 —— 如果你只是使用 Google Cloud 项目来进行测试而且你不再想用它了,确保你删除你的项目,否则,Google 会因占用他们的资源而收费!
想要继续查看该篇文章相关链接和参考文献?
点击底部【阅读原文】即可访问:
https://ai.yanxishe.com/page/TextTranslation/1451
AI求职百题斩 · 每日一题
长按二维码
关注 AI研习社