跳转至

MediaPipe Holistic Component

概述

MediaPipeHolisticComponent 负责连接 Unreal Engine 和 google mediapipe api, 将 mediapipe 数据引入到 Unreal Engine 中。

MediaPipeHolisticComponent 存在于 MediaPipe4U 插件中。

Google MediaPipe 介绍

Google mediapipe 将 Pose, Hand, Face 地标融合到一个同一个的计算器 holistic 中, MediaPipe4U 将这个计算器封装成 UnrealEngine 组件, 公开了 google 几乎所有的图形(graph)参数,它是整个 MediaPipe4U 动作和表情捕捉的核心组件,也是动作、表情、手指捕捉的数据来源, 同时,它也是 MediaPipe4U 的启动器,整个动补过程都由它发起。

MediaPipe4U

有关 google mediapipe holistic 详细信息,请访问这里:
https://ai.google.dev/edge/mediapipe/solutions/vision/holistic_landmarker

Warning

由于 MediaPipeHolisticComponent 的特殊性,你应该保证整个场景中只有唯一个 MediaPipeHolisticComponent 实例。

属性

参数名 分类 数据类型 说明
VideoDisplay 图像回显 enum 图像回显的方式:
Raw: 显示原始图像;
Annotated: 带 MediaPipe 修饰线条的图像;

注意,Raw 显示性能高于 Annotated
OverlayAnnotations 图像回显 enum 装饰线条显示模式:
HolisticTracking: 显示整体装饰线条,包含面部和姿态;
PoseTracking: 显示身体姿态装饰线条;
FaceTracking: 显示面部装饰线条
MediaPipeSourceInfo 视频数据 struct 这是一个只读的变量,你不应改修,获取当前图像源的信息,例如视频高度、宽度、是否是静态图片
bSourceHorizontalFlip Image Source 控制 bool 是否水平翻转图像。
SourceResolutionLimits Image Source 控制 enum 限制图像分辨率,即图片进入 AI 计算之前进行缩放处理(推荐开启)。
Options mediapipe 参数 struct 为 mediapipe 计算图(calculation graph)提供参数。
GraphTimeoutSeconds mediapipe 参数 int MediaPipie 计算时图像帧的超时时间,关于这部分信息,请参看 mediapipe bound time 相关文档

Options 详情

MediaPipeHolisticComponent 通过 Options 属性暴露 google mediapipe 的原始参数。

参数名 类型 说明
InputAngle enum 它可以控制让 mediapipe 来旋转图像,不建议使用,因为这回造成和原始图像不一致,优先在 ImageSource 上处理图像
InputVerticallyFlipped bool 让 mediapipe 垂直翻转,不建议使用,因为这回造成和原始图像不一致,优先在 ImageSource 上处理图像
InputVerticallyFlipped bool 让 mediapipe 水平翻转,不建议使用,因为这回造成和原始图像不一致,优先在 ImageSource 上处理图像
ModelComplexity enum mediapipe 提供的模型复杂度,Lite, Full, Heavy,一般设置为 Full 即可
SmoothLandmarks bool 是否平滑地标,这回影响计算结果,默认为 true
EnableSegmentation bool 是否分割背景,默认为 false,不建议开启,会耗费性能
SmoothSegmentation bool 分割背景时边缘平滑,默认为 false,不建议开启,会耗费性能
UsePrevLandmarks bool 是否使用上一帧数据优化动补,这个参数由 MediaPipe4U 自动根据环境修改,程序无需关心
CustomParameters TMap Custom Connector(自定义连接器)有效,这个参数会被传递到 Connector 中,关于 Custom Connector, 请参阅 Custom Connector 文档。

蓝图事件

MediaPipeHolisticComponent 提供了蓝图可用的生命周期事件(多播委托)

事件 说明
OnVideoTextureCreated 当回显的视频图像创建时回调该委托
OnMediaPipeInitialized 当 MediaPipe 完成初始化时回调该委托
OnMediaPipeStarted 当 MediaPipe 动补启动时回调该委托
OnMediaPipeStopped 当 MediaPipe 动补停止时回调该委托
OnMediaPipeThreadFault Mediapipe 工作线程发生错误时回调该委托

蓝图函数

函数 说明
StartCamera 启动摄像头动补, 建议使用异步函数代替。
StartImageSource 启动其他类型的图像源动补, 建议使用异步函数代替。
Stop 停止动补, 建议使用异步函数代替。
IsNativeImageSource 指示当前图像源是一个 Native (普通 C++ 实现)图像源还是一个 UObject 图像源,为 true 表示 Native 图像源,反之,是一个 UObject 图像源,如果 MediaPipe 没有运行,会返回 false
IsRunning 用来判断 MediaPipe 是否已经启动
GetCurrentCameraParams 获取当前正在运行的摄像头参数。注意:StartCamera传入的参数可能和此方法返回不一致,设备不支持传入的分辨率或帧率时会自动使用合适的参数打开摄像头
IsWebcamCapture 当前捕获的图像源是否是摄像头
IsVideoTextureAvailable 回显纹理对象是否可用。
IsStaticImageSource 是否是静态图像源。一般来说,图片是静态图像源,视频为非静态图像源
GetFrameSize 获取当前的帧尺寸(高、宽), 建议从 MediaPipeSourceInfo 属性获取来代替。
GetSourceTextureAspectRatio 获取图像源的高宽比, 建议从 MediaPipeSourceInfo 属性获取来代替。
GetImageSourceFPS 获取当前 ImageSource 的 FPS,这通常用于评估图像源的性能
GetVideoTexture 的回显的纹理对象。

异步函数

<函数名> + Async 命名的函数表示异步函数,异步函数通常在 C++ 和蓝图中均可用,它不会阻塞游戏线程/UI 线程,建议使用异步函数本来代替同步函数, MediaPipeHolisticComponent 提供如下异步函数:

  • StartImageSourceAsync
  • StartCameraAsync
  • StopAsync
  • StartCustomConnectorAsync (C++)

C++ 事件

如果你希望获得 google mediapip 的原始数据,例如地标(Landmarks), 你必须使用 C++ 编程,不支持蓝图。

你可以通过下面的函数获得相关订阅事件 (Unreal Event) 来侦听来自 mediapipe 的原始数据。

获取事件的函数 分类 说明
PoseLandmarksEventTrigger mediapipe 数据 获得 Pose 地标
LeftHandLandmarksEventTrigger mediapipe 数据 获得左手地标
RightHandLandmarksEventTrigger mediapipe 数据 获得右手地标
FaceLandmarksEventTrigger mediapipe 数据 获得 FaceMesh 地标
PoseWorldLandmarksEventTrigger mediapipe 数据 获得 3D 化的 Pose 地标
FaceGeometryEventTrigger mediapipe 数据 获得 FaceGeometry 数据(地标,顶点)
FaceBlendShapesEventTrigger mediapipe 数据 获得面部表情系数 BlendShapes 数据
VideoTextureCreatedEventTrigger mediapipe 数据 获得带有 mediapipe 地标的帧图像
OnMediaPipeHolisticStoppingTrigger mediapipe 生命周期 当开始停止 mediapipe 时触发
OnMediaPipeHolisticStoppedTrigger mediapipe 生命周期 当 mediapipe 停止后时触发
BeforeMediaPipeHolisticStartTrigger mediapipe 生命周期 mediapipe 开始以前触发
OnMediaPipeHolisticStartFailedTrigger mediapipe 生命周期 mediapipe 处理过程中发生错误时触发
OnMediaPipeHolisticStartedTrigger mediapipe 生命周期 mediapipe 开始后触发

注意

MediaPipeHolisticComponent C++ 的回调发生在任意线程,如果你需要在游戏游戏处理逻辑,需要自己确保线程安全。

蓝图事件总是在游戏线程触发。