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

jopen 8年前
   <p style="text-align: center;"><a href="/misc/goto?guid=4958984127719761301" title="Google"><img alt="谷歌新发布的Video Intelligence API究竟怎么用" src="https://simg.open-open.com/show/1398f098be05592a1001a5275df0b684.png" /></a></p>    <p>3 月初,谷歌在 Google Cloud Next 2017 大会上对外公布了 Cloud Machine Learning API 更新。此次更新覆盖了包括计算机视觉、智能视频分析、语音识别、自然语音处理、机器翻译和职位搜索等在内的诸多领域,被认为是谷歌云近段时间最大规模的一次升级。在此次更新中,最受关注的可能就是能够进行视频识别的 Video Intelligence API 了。</p>    <p>在发布会上,谷歌云工程师 Sara Robinson 曾针对 Video Intelligence API 登台演示了一个应用样例(演示视频见文末),用于说明该 API  的具体功能。近日,Sara Robinson 在 GitHub 上公开了该样例的源代码,并对 API 本身和样例的实现做了简要说明。现雷锋网编译如下,希望对各位开发者有所帮助。</p>    <p>为了向大家充分展示我们新发布的 Video Intelligence API 的具体功能,我曾编写了一个样例。目前样例源码已经上传到了 GitHub,感兴趣的朋友可以在下面的链接查看详情:</p>    <p><a href="/misc/goto?guid=4959006118676415544" rel="nofollow">http://t.cn/RXVBuoE</a> </p>    <p>通过这个样例,我们将看到 Video Intelligence API 的两个重要功能:</p>    <ol>     <li>识别目标视频中每一帧的内容;</li>     <li>在庞大的视频库中搜索当前视频的元数据。</li>    </ol>    <p><strong>  关于 Video Intelligence API</strong></p>    <p>总体上说,Video Intelligence API 向开发者开放了一种接入谷歌预训练模型的方法,该模型不但可以从宏观上识别当前视频中每一帧的具体内容,同时还能给出相关内容的颗粒数据(granular data)表述。如下图所示,假设视频在 0:07 的时间点出现了一只小狗。</p>    <p style="text-align:center"><img alt="谷歌新发布的Video Intelligence API究竟怎么用" src="https://simg.open-open.com/show/cbc897d43bc452a556ee6b1481e32162.jpg" /></p>    <p>则 Video Intelligence API 就可以识别这只狗,并同时识别出整段视频中所有出现小狗的数据帧。以下代码展示了在一个标签下的 JASON(JavaScript Object Notation)表述:</p>    <pre>  <span style="color:#000000">{        </span><span style="color:#800000">"</span><span style="color:#800000">description</span><span style="color:#800000">"</span>: <span style="color:#800000">"</span><span style="color:#800000">Dog</span><span style="color:#800000">"</span><span style="color:#000000">,        </span><span style="color:#800000">"</span><span style="color:#800000">language_code</span><span style="color:#800000">"</span>: <span style="color:#800000">"</span><span style="color:#800000">en-us</span><span style="color:#800000">"</span><span style="color:#000000">,        </span><span style="color:#800000">"</span><span style="color:#800000">locations</span><span style="color:#800000">"</span><span style="color:#000000">: [ {          </span><span style="color:#800000">"</span><span style="color:#800000">segment</span><span style="color:#800000">"</span><span style="color:#000000">: {            </span><span style="color:#800000">"</span><span style="color:#800000">start_time_offset</span><span style="color:#800000">"</span>: <span style="color:#800080">7090474</span><span style="color:#000000">,            </span><span style="color:#800000">"</span><span style="color:#800000">end_time_offset</span><span style="color:#800000">"</span>: <span style="color:#800080">8758738</span><span style="color:#000000">          },          </span><span style="color:#800000">"</span><span style="color:#800000">confidence</span><span style="color:#800000">"</span>: <span style="color:#800080">0.99793893</span><span style="color:#000000">,          </span><span style="color:#800000">"</span><span style="color:#800000">level</span><span style="color:#800000">"</span>: <span style="color:#800000">"</span><span style="color:#800000">SHOT_LEVEL</span><span style="color:#800000">"</span><span style="color:#000000">  }</span></pre>    <p>这段 JASON 代码以微秒级的时间分割展示了该视频片段,从代码中可以看到,API 对该数据帧的识别结果为“dog”,并且标明正确率为 99%。在该段视频的其他相关片段中,该 API 甚至还能识别出小狗的具体品种(识别结果是 Dashchund,即达克斯猎狗,正确率为 81%)。</p>    <p>看到这里你可能要问,我可以按照 1fps 的帧率将视频分解,然后对每一帧数据做图像识别,不也能达到同样的效果么?的确如此。对每一帧数据做图像识别,在上述 JASON 描述的层面的确能和 Video Intelligence API 达到一样的效果,但后者的功能却不止于此,而这也是 Video Intelligence API 的核心竞争力之一。</p>    <p>除了上述针对每一帧的解释之外,此次发布的 Video Intelligence API 还能通过特定的分析模型给出不同视频帧之间的联系和区别。例如视频中如果出现了足够多的礼服和糖果镜头,则 API 就可以识别出这是一段关于万圣节的视频并标记。不仅如此,此次更新的 API 还具有镜头变更检测功能,即可以分辨视频中的场景转换。通过这一功能,开发者可以将视频按场景完全自动化地按照内容分割成不同的片段,并返回相应片段的 JASON 描述,非常方便。</p>    <p>关于 Video Intelligence API 更详细的介绍请参见以下视频(需KX上网),视频中的演讲嘉宾是 Video Intelligence API 的产品经理和研发工程师:<a href="/misc/goto?guid=4959006118795429083" rel="nofollow">http://t.cn/RXfjO6t</a> </p>    <p><strong>  关于样例</strong></p>    <p>以下是本次样例的原理图,我在 3 月初的 Google Cloud Next 2017 上曾经做过演示。</p>    <p style="text-align:center"><img alt="谷歌新发布的Video Intelligence API究竟怎么用" src="https://simg.open-open.com/show/0af67c00f336510a343d77dc371cfa8e.jpg" /></p>    <p>如图所示,整个样例分为前端(图片上半部分)和后端(图片下半部分)两部分。</p>    <p>关于后端:本样例将待处理视频存储在谷歌云 Bucket 中,这里我实现了一个函数,每当用户添加一个新视频到该 Bucket 时,该函数会被触发,一方面检查文件的合法性(例如是否是视频文件,文件是否完整等),同时负责将合法的视频文件传递到 API 进行分析。这里 API 提供了一个非常方便的选择参数,即用户可以传入另一个谷歌云 Bucket 地址,当 API 分析完成后,可以将分析结果,即 JASON 表述存储在该 Bucket 地址中。我在样例中即应用了这一点,将分析结果存储在了另一个谷歌云 Bucket 中。</p>    <p>前端是我跟另一个同事 Alex Wolfe 共同完成的,其中用到了 ES6,Sass,Gulp,CanvasJS 等各种客户端 JS 工具(具体可以参考 GitHub 代码),实际上实现了一个基于谷歌 App Engine 的 Node.js 应用。</p>    <p>最后需要指出的是,除了样例中的用法外,用户还可以直接在浏览器端直接体验 Video Intelligence API,地址如下:<a href="/misc/goto?guid=4959006118903596271" rel="nofollow">http://t.cn/Rilda3x</a> </p>    <p>或者用户也可以在上述链接注册,对 API 进行更深度的体验。</p>    <p>以下是关于文中样例的视频演示地址:<a href="/misc/goto?guid=4959006119015871015" rel="nofollow">http://t.cn/RXfuXiN</a> </p>    <p>来自: <a href="/misc/goto?guid=4959006119120251507" id="link_source2">雷锋网</a></p>