自2012年起,谷歌在内部的多个产品和服务中使用了它。它最初是为了实时分析YouTube上的视频和音频而开发的。渐渐地,它被整合到更多的产品中,比如
MediaPipe为我们日常使用的革命性产品和服务提供动力。与资源消耗型的机器学习框架不同,MediaPipe只需要最少的资源。它是如此微小和高效,甚至嵌入式物联网设备都可以运行它。2019年,MediaPipe公开发布后,为研究人员和开发人员开辟了一个全新的机会世界。
MediaPipe是一个用于构建机器学习管道的框架,用于处理视频、音频等时间序列数据。这个跨平台框架适用于桌面/服务器、Android、iOS和嵌入式设备,如Raspberry Pi和Jetson Nano。
MediaPipe工具包包括框架和Solutions。下图显示了MediaPipe Toolkit的组件。
框架是用c++、Java和Obj-C编写的,包含以下api。
MediaPipe感知管道称为Graph。让我们以第一个solution为例,汉兹。我们输入一串图像作为输入,然后在图像上呈现手的landmarks。
下面的流程图代表MP(简称MediaPipe)hand solution graph。
在计算机科学术语中,图由边连接的节点组成。在MediaPipe Graph内部,节点称为Calculators,边缘称为Streams。每个流都携带一个时间戳递增的数据包序列
在上图中,我们用矩形块表示Calculators,用箭头表示Streams。
这些是用c++编写的特定计算单元,有分配的任务要处理。数据包(视频帧或音频段)通过计算单元的端口进入和离开。初始化计算器时,它声明将遍历端口的数据包有效负载类型。每当图形运行时,框架都会在计算器中实现Open、Process和Close方法。Open启动计算器;当数据包进入时,这个过程重复运行。整个图形运行后,进程关闭。
例如,考虑上图中显示的第一个计算单元。计算单元ImageTransform在输入端口获取图像,并在输出端口返回转换后的图像。另一方面,第二个计算单元imageto张量,将图像作为输入,并输出一个张量。
上面显示的所有计算单元都内置在MediaPipe中。我们可以把它们分成四类。
计算单元api允许您编写自己的自定义计算器。
Solutions是基于特定的预训练TensorFlow或TFLite模型的开源预构建示例。您可以在这里查看Solutions方案特定的模型。MediaPipe Solutions构建在框架之上。目前,它提供了16个Solutions,如下所示。
MediaPipe依赖OpenCV来处理视频,FFMPEG来处理音频数据。它还有其他依赖项,如OpenGL/Metal、Tensorflow、Eigen等。
我们建议您在开始使用MediaPipe之前先对OpenCV有一个基本的了解。查看这个关于OpenCV入门的简化系列文章。
MediaPipe Python解决方案对于初学者来说是最简单的,因为设置过程很简单,而且Python编程语言很流行。MediaPipe框架的模块化支持定制。但在开始定制之前,我们建议使用各种预构建的解决方案。理解与它们相关的内部api,然后调整输出以创建令人兴奋的应用程序。
MediaPipe Visualizer提供了一种尝试所有solutions的简单方法。
在MediaPipe中,protobuf (.pbtxt)文本文件定义了一个图形。MediaPipe Visualizer欢迎页面会向您显示一个包含空白图形单元的protobuf文件。它有不同解决方案的各种预构建图形,你可以从右上方的New按钮加载。
在预先构建的MediaPipe的桌面版本中,您可以享受调整和创建应用程序的乐趣。您可以使用一个命令来安装MediaPipe。
pip install mediapipe
MediaPipe solutions提供了易于学习的文档
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项目时通常面临的大多数麻烦。不需要担心同步和繁琐的设置。它允许你专注于实际的开发部分。