自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的组件。
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 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框架的学习曲线可能非常陡峭。别担心;我们将一步一步地走到那一步。文章来源:https://www.toymoban.com/news/detail-454193.html
总的来说,它是一个漂亮的、快速增长的库,提供了有前途的结果。在项目中实现MediaPipe消除了我们在处理ML项目时通常面临的大多数麻烦。不需要担心同步和繁琐的设置。它允许你专注于实际的开发部分。文章来源地址https://www.toymoban.com/news/detail-454193.html
到了这里,关于MediaPipe介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!