- mediapipe可以做到只露出上半身的坐姿检测吗
原文链接:Mediapipe-姿态估计实例
Mediapipe 是由 Google Research 开发的一款开源框架,旨在帮助开发者轻松地构建、测试和部署复杂的多模态、多任务的机器学习模型。它特别擅长于实时处理和分析音频、视频等多媒体数据。以下是 Mediapipe 的一些关键特点和组件:
关键特点
- 多平台支持:Mediapipe 支持在多个平台上运行,包括桌面、移动设备和网页。这使得开发者可以轻松地将模型部署到不同的平台上。
- 高效的实时处理:Mediapipe 具有高度优化的性能,能够在资源受限的设备上进行实时处理。这使其特别适合于移动设备和嵌入式系统。
- 模块化设计:Mediapipe 使用图表(graph)来组织和连接不同的处理模块。这种设计使得开发者可以灵活地组合和复用不同的处理组件。
- 丰富的预构建解决方案:Mediapipe 提供了许多预构建的解决方案,如人脸检测、手部追踪、姿态估计等,开发者可以直接使用这些解决方案来快速构建应用。
主要组件
- 图表(Graph):Mediapipe 的核心是其图表结构,图表定义了数据流和处理模块的连接方式。每个图表由一系列节点(nodes)和边(edges)组成,节点表示具体的处理模块,边表示数据在节点之间的流动。
- 节点(Nodes):节点是图表的基本单元,表示具体的处理操作。Mediapipe 提供了许多内置的节点,如数据输入输出节点、图像处理节点、机器学习推理节点等。
- 数据包(Packets):数据包是图表中传输的数据单元,节点之间通过发送和接收数据包来通信。数据包可以包含各种类型的数据,如图像帧、音频信号、检测结果等。
- 计算机视觉解决方案:Mediapipe 提供了许多预构建的计算机视觉解决方案,这些解决方案已经高度优化,能够在实时应用中使用。常见的解决方案包括人脸检测、手部追踪、姿态估计、对象检测等。
常见使用场景
- 姿态估计(Pose Estimation):Mediapipe 可以实时检测和追踪人体的关键点(如肩膀、肘部、膝盖等),并估计人体的姿态。这对于体育训练、动作捕捉、增强现实等应用非常有用。
- 手部追踪(Hand Tracking):Mediapipe 能够检测和追踪手部的关键点,提供手势识别和手部动作分析的能力。这在手势控制、虚拟现实、手写输入等应用中有广泛的应用。
- 人脸检测(Face Detection):Mediapipe 提供了高效的人脸检测和关键点追踪功能,可以用于面部识别、表情分析、虚拟化妆等场景。
- 对象检测(Object Detection):Mediapipe 还提供了实时的对象检测解决方案,可以用于监控、无人驾驶、智能家居等领域。
一、编译
1.1 宏:MEDIAPIPE_DISABLE_GPU = 1
编译mediapipe时,要定义MEDIAPIPE_DISABLE_GPU宏。目的是避免在使用opengles上,和SDL发生冲突。
SDL_SetRenderTarget(ERR) texture: 83b64fe0(404x72), renderer->frame: f978fe58, renderer->SetRenderTarget(renderer, texture) < 0
要是不定义,SDL中的SDL_SetRendereTarget会报类似上面错误。发生这问题原因是,SDL渲染要使用opengles,要是不定义MEDIAPIPE_DISABLE_GPU,mediapipe也会使用opengles。 这时一旦使用过mediapipe检测,会让后面SDL的渲染功能出现问题。要解决这冲突,须将来修改相关代码。
mediapipe有个MEDIAPIPE_DISABLE_GL_COMPUTE宏,是不是可以不定义MEDIAPIPE_DISABLE_GPU、而改定义它解决问题?——不能。定义MEDIAPIPE_DISABLE_GL_COMPUTE,会强制关闭mediapipe中基于OpenGL Compute Shader的GPU计算路径,其它opengles相关操作是不禁止的,像eglCreateContext。在定义了MEDIAPIPE_DISABLE_GL_COMPUTE环境下,ImageToTensorCalculator就会用到eglCreateContext。
1.2 宏:ROSE_USE_GLOG
ROSE_USE_GLOG是自个新加宏,不要定义。一旦定义ROSE_USE_GLOG,会使用glog开源项目去输出日志、以及CHECK诊断。较高版本absl已支持输出日志和CHECK诊断,mediapipe已经在使用它,但还有部分代码、以及要用到的第三方库在使用glog,像com_google_audio_tools。
#include "absl/log/absl_log.h" VLOG改为ABSL_VLOG #include "absl/log/absl_check.h" CHECK改为ABSL_CHECK
因为不再使用glog,用了glog的都要用absl去代替。如何修改参考上面,一般就是前面加上“ABSL_”。