MediaPipe介绍

MediaPipe介绍_第1张图片
自2012年起,谷歌在内部的多个产品和服务中使用了它。它最初是为了实时分析YouTube上的视频和音频而开发的。渐渐地,它被整合到更多的产品中,比如

  • NestCam的感知系统
  • 谷歌镜头的目标检测
  • 增强现实广告
  • 谷歌图片
  • 谷歌Home
  • Gmail
  • 云视觉API等。

MediaPipe为我们日常使用的革命性产品和服务提供动力。与资源消耗型的机器学习框架不同,MediaPipe只需要最少的资源。它是如此微小和高效,甚至嵌入式物联网设备都可以运行它。2019年,MediaPipe公开发布后,为研究人员和开发人员开辟了一个全新的机会世界。

1. MediaPipe是什么?

MediaPipe是一个用于构建机器学习管道的框架,用于处理视频、音频等时间序列数据。这个跨平台框架适用于桌面/服务器、Android、iOS和嵌入式设备,如Raspberry Pi和Jetson Nano。

2. MediaPipe工具包

MediaPipe工具包包括框架和Solutions。下图显示了MediaPipe Toolkit的组件。
MediaPipe介绍_第2张图片

2.1框架

框架是用c++、Java和Obj-C编写的,包含以下api。

  • Calculator API (C++).
  • Graph construction API (Protobuf).
  • Graph Execution API (C++, Java, Obj-C).

Graphs

MediaPipe感知管道称为Graph。让我们以第一个solution为例,汉兹。我们输入一串图像作为输入,然后在图像上呈现手的landmarks。
在这里插入图片描述
下面的流程图代表MP(简称MediaPipe)hand solution graph。
MediaPipe介绍_第3张图片
在计算机科学术语中,图由边连接的节点组成。在MediaPipe Graph内部,节点称为Calculators,边缘称为Streams。每个流都携带一个时间戳递增的数据包序列

在上图中,我们用矩形块表示Calculators,用箭头表示Streams。

Calculators(计算单元)

这些是用c++编写的特定计算单元,有分配的任务要处理。数据包(视频帧或音频段)通过计算单元的端口进入和离开。初始化计算器时,它声明将遍历端口的数据包有效负载类型。每当图形运行时,框架都会在计算器中实现Open、Process和Close方法。Open启动计算器;当数据包进入时,这个过程重复运行。整个图形运行后,进程关闭。

例如,考虑上图中显示的第一个计算单元。计算单元ImageTransform在输入端口获取图像,并在输出端口返回转换后的图像。另一方面,第二个计算单元imageto张量,将图像作为输入,并输出一个张量。

MediaPipe中的计算器类型

上面显示的所有计算单元都内置在MediaPipe中。我们可以把它们分成四类。

  • 预处理计算单元是图像和媒体处理计算单元族。上图中的ImageTransform和imagetotensor就属于这一类
  • 推理计算单元允许与Tensorflow和Tensorflow Lite进行ML推理的本地集成。
  • 后处理计算单元执行ML后处理任务,如检测、分割和分类。TensorToLandmark是一个后处理计算单元。
  • 计算单元工具是执行任务(如图像注释)的一类计算单元

计算单元api允许您编写自己的自定义计算器。

2.2 MediaPipe Solutions

Solutions是基于特定的预训练TensorFlow或TFLite模型的开源预构建示例。您可以在这里查看Solutions方案特定的模型。MediaPipe Solutions构建在框架之上。目前,它提供了16个Solutions,如下所示。

  • 人脸检测
  • Face Mesh
  • 虹膜
  • 姿态
  • 人体
  • 人物分割
  • 头发分割
  • 目标检测
  • Box Tracking
  • Instant Motion Tracking
  • 3D目标检测
  • 特征匹配
  • AutoFlip
  • MediaSequence
  • YouTube-8M

3. 依赖

MediaPipe依赖OpenCV来处理视频,FFMPEG来处理音频数据。它还有其他依赖项,如OpenGL/Metal、Tensorflow、Eigen等。

4. 开始使用MediaPipe

我们建议您在开始使用MediaPipe之前先对OpenCV有一个基本的了解。查看这个关于OpenCV入门的简化系列文章。
MediaPipe Python解决方案对于初学者来说是最简单的,因为设置过程很简单,而且Python编程语言很流行。MediaPipe框架的模块化支持定制。但在开始定制之前,我们建议使用各种预构建的解决方案。理解与它们相关的内部api,然后调整输出以创建令人兴奋的应用程序。

5.MediaPipe可视化工具

MediaPipe Visualizer提供了一种尝试所有solutions的简单方法。
在MediaPipe中,protobuf (.pbtxt)文本文件定义了一个图形。MediaPipe Visualizer欢迎页面会向您显示一个包含空白图形单元的protobuf文件。它有不同解决方案的各种预构建图形,你可以从右上方的New按钮加载。

在预先构建的MediaPipe的桌面版本中,您可以享受调整和创建应用程序的乐趣。您可以使用一个命令来安装MediaPipe。

pip install mediapipe

MediaPipe solutions提供了易于学习的文档

6. 它真的是实时的吗?

MediaPipe解决方案并不总是实时工作

解决方案建立在MediaPipe框架之上,该框架提供计算单元API (c++),

Graph construction API (Protobuf)和Graph Execution API (c++, Java, Obj-C)。有了这些api,我们就可以构建图表并编写自定义计算单元。

工具非常出色,但它的性能取决于底层硬件。下面的示例显示了HD(1280×720)和Ultra HD(3840×2160)视频上的并排推理比较。

您可以尝试从头构建MediaPipe解决方案,当然可以看到性能上的飞跃。但是,您可能仍然无法实现实时推理。

注意:MediaPipe框架支持bezel 构建。因此,要充分利用MediaPipe的潜力,就需要对c++和bezel 相当熟悉。文档也不容易上手,因为它是在积极的开发阶段。

总结

MediaPipe solutions很简单,您可以在一两天内介绍掌握。
另一方面,c++ MediaPipe框架的学习曲线可能非常陡峭。别担心;我们将一步一步地走到那一步。

总的来说,它是一个漂亮的、快速增长的库,提供了有前途的结果。在项目中实现MediaPipe消除了我们在处理ML项目时通常面临的大多数麻烦。不需要担心同步和繁琐的设置。它允许你专注于实际的开发部分。

你可能感兴趣的:(opencv,opencv)