游客

谷歌新发布的Video Intelligence API究竟怎么用

游客 2017-04-17 22:11:30    201147 次浏览

3 月初,谷歌在 Google Cloud Next 2017 大会上对外公布了 Cloud Machine Learning API 更新。此次更新覆盖了包括计算机视觉、智能视频分析、语音识别、自然语音处理、机器翻译和职位搜索等在内的诸多领域,被认为是谷歌云近段时间最大规模的一次升级。在此次更新中,最受关注的可能就是能够进行视频识别的 Video Intelligence API 了。

在发布会上,谷歌云工程师 Sara Robinson 曾针对 Video Intelligence API 登台演示了一个应用样例(演示视频见文末),用于说明该 API  的具体功能。近日,Sara Robinson 在 GitHub 上公开了该样例的源代码,并对 API 本身和样例的实现做了简要说明。现雷锋网编译如下,希望对各位开发者有所帮助。

为了向大家充分展示我们新发布的 Video Intelligence API 的具体功能,我曾编写了一个样例。目前样例源码已经上传到了 GitHub,感兴趣的朋友可以在下面的链接查看详情:

http://t.cn/RXVBuoE 

通过这个样例,我们将看到 Video Intelligence API 的两个重要功能:

  1. 识别目标视频中每一帧的内容;
  2. 在庞大的视频库中搜索当前视频的元数据。

  关于 Video Intelligence API

总体上说,Video Intelligence API 向开发者开放了一种接入谷歌预训练模型的方法,该模型不但可以从宏观上识别当前视频中每一帧的具体内容,同时还能给出相关内容的颗粒数据(granular data)表述。如下图所示,假设视频在 0:07 的时间点出现了一只小狗。

谷歌新发布的Video Intelligence API究竟怎么用

则 Video Intelligence API 就可以识别这只狗,并同时识别出整段视频中所有出现小狗的数据帧。以下代码展示了在一个标签下的 JASON(JavaScript Object Notation)表述:

{ "description": "Dog", "language_code": "en-us", "locations": [ { "segment": { "start_time_offset": 7090474, "end_time_offset": 8758738 }, "confidence": 0.99793893, "level": "SHOT_LEVEL" }

这段 JASON 代码以微秒级的时间分割展示了该视频片段,从代码中可以看到,API 对该数据帧的识别结果为“dog”,并且标明正确率为 99%。在该段视频的其他相关片段中,该 API 甚至还能识别出小狗的具体品种(识别结果是 Dashchund,即达克斯猎狗,正确率为 81%)。

看到这里你可能要问,我可以按照 1fps 的帧率将视频分解,然后对每一帧数据做图像识别,不也能达到同样的效果么?的确如此。对每一帧数据做图像识别,在上述 JASON 描述的层面的确能和 Video Intelligence API 达到一样的效果,但后者的功能却不止于此,而这也是 Video Intelligence API 的核心竞争力之一。

除了上述针对每一帧的解释之外,此次发布的 Video Intelligence API 还能通过特定的分析模型给出不同视频帧之间的联系和区别。例如视频中如果出现了足够多的礼服和糖果镜头,则 API 就可以识别出这是一段关于万圣节的视频并标记。不仅如此,此次更新的 API 还具有镜头变更检测功能,即可以分辨视频中的场景转换。通过这一功能,开发者可以将视频按场景完全自动化地按照内容分割成不同的片段,并返回相应片段的 JASON 描述,非常方便。

关于 Video Intelligence API 更详细的介绍请参见以下视频(需科学上网),视频中的演讲嘉宾是 Video Intelligence API 的产品经理和研发工程师:http://t.cn/RXfjO6t 

  关于样例

以下是本次样例的原理图,我在 3 月初的 Google Cloud Next 2017 上曾经做过演示。

谷歌新发布的Video Intelligence API究竟怎么用

如图所示,整个样例分为前端(图片上半部分)和后端(图片下半部分)两部分。

关于后端:本样例将待处理视频存储在谷歌云 Bucket 中,这里我实现了一个函数,每当用户添加一个新视频到该 Bucket 时,该函数会被触发,一方面检查文件的合法性(例如是否是视频文件,文件是否完整等),同时负责将合法的视频文件传递到 API 进行分析。这里 API 提供了一个非常方便的选择参数,即用户可以传入另一个谷歌云 Bucket 地址,当 API 分析完成后,可以将分析结果,即 JASON 表述存储在该 Bucket 地址中。我在样例中即应用了这一点,将分析结果存储在了另一个谷歌云 Bucket 中。

前端是我跟另一个同事 Alex Wolfe 共同完成的,其中用到了 ES6,Sass,Gulp,CanvasJS 等各种客户端 JS 工具(具体可以参考 GitHub 代码),实际上实现了一个基于谷歌 App Engine 的 Node.js 应用。

最后需要指出的是,除了样例中的用法外,用户还可以直接在浏览器端直接体验 Video Intelligence API,地址如下:http://t.cn/Rilda3x 

或者用户也可以在上述链接注册,对 API 进行更深度的体验。

以下是关于文中样例的视频演示地址:http://t.cn/RXfuXiN 

内容加载中