- 音视频
- 图形学
- 桌面应用
【免费下载链接】t3
TiXL is an open source software to create realtime motion graphics.
TiXL(实时运动图形软件)在Lib.io.video.mediapipe命名空间下封装了一整套基于 Google MediaPipe 的视觉 AI 运算符,覆盖人脸检测、人脸关键点、手势识别、手部关键点、图像分割、目标检测与姿态估计七大能力。本文以.help/docs/operators/lib/io/video/mediapipe/README.md为骨架,逐一定义每个运算符的输入输出契约,并结合仓库内Operators/Mediapipe的源码与模型资源,说明其在实时运动图形工作流中的集成方式与底层实现原理。读完本文,你将能够在 TiXL 的节点图中直接搭建"视频输入 → MediaPipe 分析 → 点缓冲/数据字典驱动可视化"的实时交互管线。
一、模块总览:七个视觉分析运算符
Lib.io.video.mediapipe模块是 TiXL 内置运算符库中负责实时图像理解的分支。根据模块索引文档(README.md),它提供以下 7 个运算符:
| 运算符 | 底层 MediaPipe 任务 | 功能摘要 |
|---|---|---|
| FaceDetection | MediaPipe Face Detection | 检测图像中的人脸,输出包围盒角点与关键点 |
| FaceLandmarkDetection | MediaPipe Face Mesh | 检测人脸关键点(每张脸 468/478 点) |
| GestureRecognition | MediaPipe Gesture Recognition | 识别手势(如 Thumb_Up、Victory、Closed_Fist) |
| HandLandmarkDetection | MediaPipe Hand Landmark Detection | 检测手部关键点(每只手 21 点) |
| ImageSegmentation | MediaPipe Image Segmentation | 将图像分割为背景、人物、头发、衣物等区域 |
| ObjectDetection | MediaPipe Object Detection | 检测图像中的物体,输出包围盒与类别 |
| PoseLandmarkDetection | MediaPipe Pose Landmark Detection | 检测人体姿态关键点(每个姿态 33 点) |
这 7 个运算符全部实现了相同的输入输出范式:接收一张纹理(Texture2D),输出透传纹理 + 点缓冲(BufferWithViews)+ 数据字典(Dict)+ 调试纹理,因此可以像其他 TiXL 视觉运算符一样被无缝串联进节点图,无需编写任何代码即可把 AI 分析结果喂给粒子系统、点云渲染或参数动画。
二、公共设计模式:所有运算符共享的输入输出约定
在逐个深入之前,先理解这批运算符共用的数据契约。它们都继承自Instance<T>,输出槽全部标记了DirtyFlagTrigger = DirtyFlagTrigger.Animated(见 FaceDetection.cs),意味着每一帧都会触发更新,适合实时视频流。
2.1 输出三件套:点缓冲、数据字典、透传纹理
以 FaceDetection.cs 为参照,典型的输出包括:
- OutputTexture(Texture2D):输入纹理原样透传,保证分析节点可以"挂在"渲染链路上而不破坏原有画面。
- PointBuffer(BufferWithViews):结构化缓冲区,承载检测结果转换出的
Point数组(含位置、颜色、缩放、朝向、F1/F2 附加数据),可直接绑定到渲染管线或交给 TiXL 的PointBuffer消费节点做点云绘制。Point类型位于 T3.Core.DataTypes.Point。 - FaceData / ObjectData 等(Dict ):键值字典,存放每个检测实例的置信度、包围盒归一化坐标、关键点坐标等标量数据,可驱动 TiXL 中任意数值参数。
2.2 三个通用控制参数
绝大多数运算符都带这三个参数,用于对齐输入与输出坐标系:
- CorrectAspectRatio(Boolean):是否对非正方形输入做宽高比修正。从 FaceDetection.cs 可以看到,开启后点坐标会乘上
aspectRatio = width / height,把像素坐标映射进归一化空间时保持几何比例。 - ZScale(Single):点坐标 Z 轴的缩放系数,默认
1.0,主要用于 3D 可视化的深度调节。 - Debug(Boolean):开启后输出
DebugTexture(OpenCV 绘制的调试可视化:包围盒、关键点、标签与置信度文本),并输出详细日志。日志经Log.Error / Log.Warning通道记录(见 FaceDetection.cs)。
2.3 帧计数输出
所有运算符都提供UpdateCount(Int32):每处理一帧自增一次,可用来驱动节拍、统计或触发一次性事件。
三、人脸检测:FaceDetection
文档:FaceDetection.md
功能:使用 MediaPipe Face Detection 任务在输入图像中检测人脸,输出包围盒四角与 6 个关键点(眼睛、鼻子、嘴、耳朵)作为点缓冲,同时输出每张脸的详细字典数据。
3.1 输入参数
| 名称(类型) | 说明 | 源码默认值 |
|---|---|---|
| InputTexture(Texture2D) | 待处理的图像 | — |
| Enabled(Boolean) | 启用/停用人脸检测 | true |
| ConfidenceThreshold(Single) | 人脸被判定为检测成功的最低置信度 | 0.5f |
| MaxFaces(Int32) | 最多检测的人脸数量 | 5 |
| ShowDetections(Boolean) | 是否在输出缓冲中写入包围盒角点 | true |
| ShowKeypoints(Boolean) | 是否在输出缓冲中写入关键点 | true |
| DetectionSize(Single) | 输出缓冲中包围盒点的大小 | 3.0f |
| DetectionColor(Vector4) | 包围盒点颜色 | Vector4.One(白色) |
| KeypointColor(Vector4) | 关键点颜色 | Vector4.One(白色) |
| UseCombinedAiOutput(Boolean) | 是否生成统一的 AI 输出纹理 | false |
| Debug(Boolean) | 启用调试日志与调试纹理输出 | false |
| CorrectAspectRatio(Boolean) | 非正方形输入是否修正宽高比 | false |
| ZScale(Single) | 点 Z 坐标缩放系数 | 1.0f |
以上默认值均来自 FaceDetection.cs 的InputSlot初始化。
3.2 输出
| 名称 | 类型 | 说明 |
|---|---|---|
| OutputTexture | T3.Core.DataTypes.Texture2D | 输入纹理透传 |
| PointBuffer | T3.Core.DataTypes.BufferWithViews | 检测点结构化缓冲 |
| FaceData | T3.Core.DataTypes.Dict<float> | 每张脸的详细数据字典 |
| FaceCount | System.Int32 | 检测到的人脸数量 |
| UpdateCount | System.Int32 | 每帧递增的帧计数 |
| DebugTexture | T3.Core.DataTypes.Texture2D | 调试可视化纹理(仅 Debug 开启时) |
3.3 点缓冲的编码约定(源码细节)
从 FaceDetection.cs 的实现可以看出,每张脸在点缓冲中固定占用 10 个点:
- 索引
faceIndex * 10 + 0..3:包围盒左上、右上、右下、左下四个角点; - 索引
faceIndex * 10 + 4..9:6 个关键点(眼睛、鼻子、嘴、耳朵),若模型未给出关键点则退化为包围盒中心占位点。
每个点的F1字段编码为faceIndex * 10 + 序号,F2字段存该脸的置信度分数。ShowDetections与ShowKeypoints控制写入哪一部分:点类型由F1 % 10判断,< 4为包围盒点、>= 4为关键点(见 FaceDetection.cs)。
3.4 FaceData 字典键
FaceData字典(CalculateFaceData)为每张脸写入如下键:
face_{i}_confidence:置信度face_{i}_bbox_x / _y / _width / _height:包围盒归一化坐标(x 为左边界/宽度,y 为1.0 - 下边界/高度,均归一化到 [0,1])face_{i}_keypoint_{j}_x / _y / _z:6 个关键点的归一化坐标
这些键可以直接在 TiXL 中通过Dict.GetValue类运算符读取,用于驱动 UI 元素、摄像机或合成参数。
四、人脸网格:FaceLandmarkDetection
文档:FaceLandmarkDetection.md
功能:使用 MediaPipe Face Mesh 任务检测人脸及其 468(或 478)个稠密关键点,可用于人脸追踪、表情驱动等高级场景。
4.1 输入参数
| 名称(类型) | 说明 |
|---|---|
| InputTexture(Texture2D) | 待处理的图像 |
| Enabled(Boolean) | 启用/停用人脸检测 |
| MaxFaces(Int32) | 最多检测的人脸数量 |
| ShowLandmarks(Boolean) | 是否在输出缓冲中写入关键点 |
| LandmarkSize(Single) | 输出缓冲中关键点的大小 |
| LandmarkColor(Vector4) | 关键点颜色 |
| LandmarkScale(Single) | 关键点位置的缩放系数(便于 3D 可视化) |
| NormalizeLandmarks(Boolean) | 是否将关键点坐标归一化到 [0, 1] |
| MinFaceDetectionConfidence(Single) | 人脸检测成功的最低置信度 |
| MinFacePresenceConfidence(Single) | 人脸存在的最低置信度 |
| MinTrackingConfidence(Single) | 人脸跟踪的最低置信度 |
| Debug(Boolean) | 启用调试日志 |
| UseCombinedAIOutput(Boolean) | 使用统一的 AI 输出 |
| CorrectAspectRatio(Boolean) | 修正宽高比 |
| ZScale(Single) | Z 轴缩放 |
4.2 输出
| 名称 | 类型 | 说明 |
|---|---|---|
| OutputTexture | Texture2D | 输入纹理透传 |
| PointBuffer | BufferWithViews | 人脸关键点结构化缓冲 |
| FaceData | Dict<float> | 关键点位置、blendshapes、变换矩阵等详细数据 |
| FaceCount | Int32 | 检测到的人脸数量 |
| Blendshapes | Dict<float> | 面部混合形状数据(可用于表情驱动) |
| DebugTexture | Texture2D | 调试可视化纹理 |
特色输出 Blendshapes:Face Mesh 的 blendshape 数据(如眨眼、张嘴幅度等)被单独提取为字典输出,这在 TiXL 中意味着可以直接用真实人脸表情驱动虚拟角色的面部控制器,而无需自行解析原始网格数据。
五、手部关键点:HandLandmarkDetection
文档:HandLandmarkDetection.md
功能:使用 MediaPipe Hand Landmark Detection 任务检测手部及其 21 个关键点,并提供世界坐标版本的点缓冲,非常适合手部追踪交互。
5.1 输入参数
| 名称(类型) | 说明 |
|---|---|
| InputTexture(Texture2D) | 待处理的图像 |
| Enabled(Boolean) | 启用/停用手部检测 |
| MaxHands(Int32) | 最多检测的手的数量 |
| MinHandDetectionConfidence(Single) | 手部检测成功的最低置信度 |
| MinHandPresenceConfidence(Single) | 手部存在的最低置信度 |
| MinTrackingConfidence(Single) | 手部跟踪的最低置信度 |
| Debug(Boolean) | 启用调试可视化与调试纹理输出 |
| CorrectAspectRatio(Boolean) | 修正宽高比 |
| ZScale(Single) | Z 轴缩放 |
5.2 输出
| 名称 | 类型 | 说明 |
|---|---|---|
| OutputTexture | Texture2D | 输入纹理透传 |
| DebugTexture | Texture2D | 显示关键点与连线的手部调试可视化 |
| HandCount | Int32 | 检测到的手的数量 |
| UpdateCount | Int32 | 帧计数 |
| WorldLandmarksBuffer | BufferWithViews | 世界坐标关键点缓冲 |
| PointBuffer | BufferWithViews | 检测关键点缓冲 |
世界坐标与图像坐标双缓冲:WorldLandmarksBuffer提供以米为单位、以手部中心为原点的世界坐标(适合驱动 3D 手部模型);PointBuffer提供图像空间坐标(适合 2D 叠加与 UI 交互)。两者可独立消费,是 21 点手部追踪中最常用的组合。
六、手势识别:GestureRecognition
文档:GestureRecognition.md
功能:使用 MediaPipe Gesture Recognition 任务检测手部并识别手势(例如"Thumb_Up"、"Victory"、"Closed_Fist"),输出识别出的手势名称与置信度。
6.1 输入参数
| 名称(类型) | 说明 |
|---|---|
| InputTexture(Texture2D) | 待处理的图像 |
| Enabled(Boolean) | 启用/停用手势识别 |
| MaxHands(Int32) | 最多检测的手的数量 |
| MinHandDetectionConfidence(Single) | 手部检测成功的最低置信度 |
| MinHandPresenceConfidence(Single) | 手部存在的最低置信度 |
| UseCombinedAIOutput(Boolean) | 是否生成统一的 AI 输出纹理 |
| Debug(Boolean) | 启用调试可视化(显示关键点与连线) |
| CategoryAllowlist(String) | 允许的类别名称列表(逗号分隔,如"Thumb_Up") |
| CategoryDenylist(String) | 禁止的类别名称列表(逗号分隔,如"Thumb_Up") |
| CorrectAspectRatio(Boolean) | 修正宽高比 |
| ZScale(Single) | Z 轴缩放 |
6.2 输出
| 名称 | 类型 | 说明 |
|---|---|---|
| OutputTexture | Texture2D | 输入纹理透传 |
| DebugTexture | Texture2D | 手势调试可视化纹理 |
| RecognizedGestures | List<string> | 识别出的手势名称列表 |
| PrimaryGesture | string | 主要识别手势的名称 |
| Confidence | Single | 识别手势的置信度 |
| HandCount | Int32 | 检测到的手的数量 |
| UpdateCount | Int32 | 帧计数 |
| Handedness | List<string> | 每只手的左右属性(Left/Right) |
| WorldLandmarksBuffer | BufferWithViews | 世界坐标手部关键点缓冲 |
| PointBuffer | BufferWithViews | 可视化关键点缓冲 |
典型应用:PrimaryGesture+Confidence可以直接接到 TiXL 的条件判断/数值映射节点,实现"比个手势就切换场景、挥拳就触发粒子爆发"的实时交互;CategoryAllowlist/CategoryDenylist则用于过滤不关心的手势,降低误触发。此外 GestureRecognition.cs 与 FaceDetection 一样标注了ExportDependencies,声明其对mediapipe_c.dll、OpenCvSharpExtern.dll等原生库的依赖。
七、目标检测:ObjectDetection
文档:ObjectDetection.md
功能:使用 MediaPipe Object Detection 任务检测图像中的物体,输出包围盒角点缓冲与物体数据字典。
7.1 输入参数
| 名称(类型) | 说明 |
|---|---|
| InputTexture(Texture2D) | 待处理的图像 |
| Enabled(Boolean) | 启用/停用目标检测 |
| MaxObjects(Int32) | 最多检测的物体数量 |
| MinDetectionConfidence(Single) | 物体被检测成功的最低置信度 |
| Model(Int32) | 选择目标检测模型 |
| Debug(Boolean) | 启用调试可视化(包围盒与标签) |
| CategoryAllowlist(String) | 允许的类别名称列表(如"person, cup") |
| CategoryDenylist(String) | 禁止的类别名称列表(如"person, cup") |
| CorrectAspectRatio(Boolean) | 修正宽高比 |
| ZScale(Single) | Z 轴缩放 |
7.2 输出
| 名称 | 类型 | 说明 |
|---|---|---|
| OutputTexture | Texture2D | 输入纹理透传 |
| DebugTexture | Texture2D | 显示包围盒与标签的调试纹理 |
| ObjectCount | Int32 | 检测到的物体数量 |
| UpdateCount | Int32 | 帧计数 |
| PointBuffer | BufferWithViews | 物体包围盒角点缓冲 |
| ObjectData | Dict<float> | 每个物体的包围盒坐标、类别名、置信度 |
| ActiveCategories | List<string> | 当前活跃的检测类别列表 |
Model 参数与多模型支持:Model(Int32)用于在多套检测模型间切换。从 Assets 目录 可以看到项目内置了efficientdet_lite0.tflite、efficientdet_lite2.tflite、ssd_mobilenet_v2.tflite等多个检测模型,分别对应不同的精度/速度权衡。
八、图像分割:ImageSegmentation
文档:ImageSegmentation.md
功能:使用 MediaPipe Image Segmentation 任务将输入图像划分为背景、人物、头发、衣物等不同区域,输出分割掩码,可直接用于抠像合成或区域分析。
8.1 输入参数
| 名称(类型) | 说明 |
|---|---|
| InputTexture(Texture2D) | 待处理的图像 |
| Enabled(Boolean) | 启用/停用图像分割 |
| Model(Int32) | 选择分割模型(如 SelfieSegmenter、DeepLabV3) |
| SelectedCategories(String) | 要包含在掩码中的类别索引列表(逗号分隔) |
| Debug(Boolean) | 启用调试日志与调试纹理输出 |
| CategoryAllowlist(String) | 允许的类别名称列表(如"person, cup") |
8.2 输出
| 名称 | 类型 | 说明 |
|---|---|---|
| OutputTexture | Texture2D | 输入纹理透传 |
| MaskTexture | Texture2D | 每个像素值为类别索引的掩码纹理 |
| CategoryMask | Texture2D | 每个像素对应类别索引的纹理 |
| ConfidenceMask | Texture2D | 每个像素的置信度纹理 |
| Confidence | Single | 分割的置信度 |
| UpdateCount | Int32 | 帧计数 |
| DebugTexture | Texture2D | 调试可视化纹理 |
在运动图形中的价值:MaskTexture/CategoryMask是标准的纹理输出,可以直接与 TiXL 的合成运算符(如Mix、Blend)组合,实现实时绿幕式抠像——不需要任何额外硬件。ConfidenceMask则可用来做边缘柔化,让抠像边缘更自然。分割类别覆盖背景、人物、头发、衣物等,可分别提取控制。
九、姿态估计:PoseLandmarkDetection
文档:PoseLandmarkDetection.md
功能:使用 MediaPipe Pose Landmark Detection 任务检测人体姿态及其 33 个关键点,输出关键点缓冲、世界坐标缓冲与分割掩码。
9.1 输入参数
| 名称(类型) | 说明 |
|---|---|
| InputTexture(Texture2D) | 待处理的图像 |
| Enabled(Boolean) | 启用/停用姿态检测 |
| MaxPoses(Int32) | 最多检测的姿态数量 |
| MinPoseDetectionConfidence(Single) | 姿态检测成功的最低置信度 |
| MinPosePresenceConfidence(Single) | 姿态存在的最低置信度 |
| MinTrackingConfidence(Single) | 姿态跟踪的最低置信度 |
| Debug(Boolean) | 启用调试可视化(关键点与连线) |
| CorrectAspectRatio(Boolean) | 修正宽高比 |
| ZScale(Single) | Z 轴缩放 |
9.2 输出
| 名称 | 类型 | 说明 |
|---|---|---|
| OutputTexture | Texture2D | 输入纹理透传 |
| DebugTexture | Texture2D | 姿态调试可视化纹理 |
| PoseCount | Int32 | 检测到的姿态数量 |
| UpdateCount | Int32 | 帧计数 |
| WorldLandmarksBuffer | BufferWithViews | 世界坐标关键点缓冲 |
| PointBuffer | BufferWithViews | 图像坐标关键点缓冲 |
| SegmentationMask | Texture2D | 人体分割掩码纹理 |
特色输出 SegmentationMask:姿态估计同时输出人体分割掩码,意味着一个节点即可同时获得骨骼点与人体轮廓,可用于"骨骼驱动 + 人体轮廓遮罩"的双重可视化。
十、源码级实现架构:异步推理管线
以上 7 个运算符共享同一套异步处理架构,以 FaceDetection.cs 为最完整的参考实现:
10.1 模型加载与 MediaPipe 配置
- 模型通过
AssetRegistry.TryResolveAddress("Mediapipe:blaze_face_short_range.tflite", ...)从资产注册表解析(见 FaceDetection.cs),说明模型已注册进Mediapipe资源包。 - 创建检测器时使用
VisionRunningMode.VIDEO模式与Delegate.CPU(CPU 委托),并固定设置minDetectionConfidence: 0.5f、minSuppressionThreshold: 0.3f(见 FaceDetection.cs)。 - 注意:界面上的
ConfidenceThreshold参数并不用于重建检测器,而是在后处理阶段过滤检测结果(confidence < confidenceThreshold的直接跳过),因此改变它无需重新加载模型(见 FaceDetection.cs)。
10.2 双队列异步 Worker
每帧更新时,运算符会把 GPU 纹理拷贝到 staging 纹理、读取像素数据并编码为请求,投递到_inputQueue;后台WorkerLoop线程从队列取出请求、调用 MediaPipeDetectForVideo(image, timestamp)推理,将结果打包进_outputQueue;主线程再从输出队列消费结果更新各输出槽(见 FaceDetection.cs)。这样推理不阻塞渲染线程,是实时性能的关键。
推理时间戳以33333微秒(约 30 fps)步进递增(见 FaceDetection.cs),以匹配 VIDEO 模式的帧时间语义。当maxFaces或confidenceThreshold变化时,运算符会销毁并重建检测器(InitializeWorker/StopWorker),StopWorker内含 1 秒超时的线程安全等待。
10.3 内存池化与资源回收
为降低实时视频流的 GC 压力,实现中大量使用对象池:
- Staging 纹理缓存:
_cachedStagingTextures按(width, height)复用 GPU staging 纹理(FaceDetection.cs); - OpenCV Mat 池、像素字节缓冲池、Point 数组池:分别用
ConcurrentBag复用(FaceDetection.cs); - 纹理像素格式转换采用
Parallel.For逐行执行 BGRA→RGB 重排(FaceDetection.cs); Dispose中统一释放检测器、结构缓冲、调试纹理、缓存纹理与各对象池(FaceDetection.cs)。
10.4 点缓冲与 GPU 绑定
结果点数组通过ResourceManager.SetupStructuredBuffer创建结构化缓冲区,并同时创建 SRV 与 UAV(FaceDetection.cs),因此PointBuffer可以直接被 HLSL 着色器读取,实现"AI 检测点直接进 GPU 粒子系统"的零拷贝链路。
十一、模型与原生依赖资源
11.1 内置模型清单
所有模型存放于 Operators/Mediapipe/Assets,共 15 个文件:
| 模型文件 | 用途 |
|---|---|
blaze_face_short_range.tflite | 人脸检测(短距离,FaceDetection 默认模型) |
face_detection_short_range.tflite/face_detection_full_range.tflite | 人脸检测(短/全距离变体) |
face_landmark_with_attention.tflite/face_landmarker.task | 人脸网格关键点 |
hand_landmarker.task | 手部关键点 |
gesture_recognizer.task | 手势识别 |
pose_landmarker.task | 姿态估计 |
selfie_segmenter.tflite/selfie_segmenter_landscape.tflite/selfie_multiclass_256x256.tflite | 人像分割(多类别 256×256、横屏变体) |
deeplabv3.tflite | DeepLabV3 分割模型 |
efficientdet_lite0.tflite/efficientdet_lite2.tflite | 高效目标检测(lite0/lite2 精度档) |
ssd_mobilenet_v2.tflite | SSD MobileNet V2 目标检测 |
*.task为 MediaPipe 打包任务文件(模型 + 元数据 + 标签),*.tflite为纯模型权重,两者都可在运行时通过资产注册表解析。
11.2 原生依赖与工程配置
Mediapipe.csproj 表明该运算符包:
- 目标框架为
net10.0-windows,通过PackageReference引入CppSharp.Runtime、OpenGL.Net、Google.Protobuf; - 每个运算符类通过
[ExportDependencies(...)]声明运行时需要的原生 DLL:mediapipe_c.dll、OpenCvSharpExtern.dll、Emgu.CV.dll、cvextern.dll、OpenGL.Net.dll、CppSharp.Runtime.dll、Google.Protobuf.dll(见 FaceDetection.cs),TiXL 会据此在启动时做依赖校验; - Release 构建会把
Assets/**、Symbols/**(.t3/.t3ui/.cs)按运算符包格式复制到输出目录并生成OperatorPackage.json元数据。
依赖相关的mediapipe_c.dll等原生文件位于 Dependencies 目录(mediapipe_c.dll、cvextern.dll、Emgu.CV.dll等均已在列),确保安装后开箱即用。
十二、在 TiXL 中的实战工作流
结合以上契约,可以总结出四条可直接落地的实时视觉管线模式:
手部/姿态点云可视化:将
Webcam(或视频)纹理 →HandLandmarkDetection/PoseLandmarkDetection→ 把PointBuffer/WorldLandmarksBuffer接入 TiXL 的DrawPoints、Line或Trail类运算符,实时渲染手部骨骼或人体骨架。开启Debug可获得带连线/标签的DebugTexture用于预览对齐。手势驱动参数:
GestureRecognition→ 用PrimaryGesture(字符串)与Confidence(浮点)接入条件分支与数值映射,实现"Thumb_Up 切换配色、Closed_Fist 触发粒子爆发"的交互演出。实时抠像合成:
ImageSegmentation→ 取MaskTexture(或CategoryMask+ConfidenceMask)与背景纹理做混合,实现无绿幕的人物抠像;分割模型在 Assets 目录 中的selfie_*系列即为此设计。人脸表情驱动:
FaceLandmarkDetection→ 用FaceData字典的 bbox/keypoint 键驱动摄像机或遮罩跟随人脸,用Blendshapes字典驱动虚拟角色表情;FaceDetection的FaceData则可快速获得每张脸的置信度与包围盒做统计或 UI 标签。
所有场景中,OutputTexture都透传原图,因此这些分析节点可以放心插入既有渲染链,不会破坏画面输出;UpdateCount可用来做帧率统计或触发周期性逻辑。
十三、注意事项与限制
- 平台前提:
Mediapipe.csproj目标框架为net10.0-windows,且依赖大量 Windows 原生 DLL(MediaPipe C API、OpenCV/Emgu CV),因此本模块面向 Windows 桌面端;相关 安装与系统要求 可在.help/docs中查阅。 - CPU 委托:检测器以
Delegate.CPU创建,推理在 CPU 上完成;精度与速度取决于所用模型(如efficientdet_lite0快于lite2,face_detection_short_range适合近距离)。 - 参数变更代价:修改会触发检测器重建的参数(如 FaceDetection 的
MaxFaces/ConfidenceThreshold变化超过阈值)会经历"停止旧 worker → 重建模型 → 重启 worker"的过程,实时运行时建议保持稳定,避免频繁变动导致卡顿。 - 开关与空结果:
Enabled为 false 或输入纹理为空/已释放时,运算符会停止 worker、清空输出(FaceCount = 0、PointBuffer = null),不会报错,可安全用于动态启停。 - 数据范围:
FaceData/ObjectData等字典中的 bbox 与关键点坐标为归一化值(图像空间 [0,1],Y 轴向上),与PointBuffer中映射到 [-1,1] 的渲染坐标不同,消费时需注意坐标系约定。
十四、延伸阅读
- 模块索引:.help/docs/operators/lib/io/video/mediapipe/README.md
- 运算符文档:FaceDetection、FaceLandmarkDetection、HandLandmarkDetection、GestureRecognition、ObjectDetection、ImageSegmentation、PoseLandmarkDetection
- 核心实现:FaceDetection.cs(异步管线参考实现)、GestureRecognition.cs
- 模型资源:Operators/Mediapipe/Assets
- 工程配置:Operators/Mediapipe/Mediapipe.csproj、Dependencies 目录(原生依赖 DLL)
- 通用概念:TiXL 核心概念(运算符、槽、节点图)、实时渲染指南
- 音视频
- 图形学
- 桌面应用
【免费下载链接】t3
TiXL is an open source software to create realtime motion graphics.
相关推荐
TiXL 图像分割算子 ImageSegmentation 完全指南:基于 MediaPipe 的实时抠像与掩码合成
TiXL 图像分割算子 ImageSegmentation 完全指南:基于 MediaPipe 的实时抠像与掩码合成 本文围绕 TiXL(Lib.io.vide
音视频图形学桌面应用设计师必备神器:awesome-stock-resources免费素材集合全攻略
设计师必备神器:awesome stock resources免费素材集合全攻略 awesome stock resources是一个精选的免费素材资源集合,包
音视频图形学桌面应用TiXL 场运算指南:用 TranslateUV 运算符平移 SDF 场的 UV 坐标
TiXL 场运算指南:用 TranslateUV 运算符平移 SDF 场的 UV 坐标 TiXL(Tooll 3)中的 Lib.field.adjust.Tra
音视频图形学桌面应用
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考