Holistic Tracking数据导出格式转换:CSV/JSON互转实战教程

Holistic Tracking数据导出格式转换:CSV/JSON互转实战教程

1. 引言

1.1 学习目标

本文将带你掌握如何对Holistic Tracking模型输出的人体关键点数据进行结构化处理,重点实现CSV 与 JSON 格式之间的高效互转。通过本教程,你将能够:

  • 理解 MediaPipe Holistic 输出的关键点数据结构
  • 将原始检测结果导出为标准 CSV 和 JSON 文件
  • 实现两种格式之间的双向转换
  • 构建可复用的数据预处理模块,便于后续动作分析、动画驱动或机器学习建模

完成本教程后,你可以轻松将全息感知系统集成到自动化流水线中,支持数据归档、跨平台传输和可视化分析。

1.2 前置知识

建议具备以下基础: - Python 编程经验(熟悉字典、列表操作) - 了解基本的文件读写操作(json,csv模块) - 对 MediaPipe 或计算机视觉有一定认知

无需深度学习背景,所有代码均可直接运行。

1.3 教程价值

在虚拟人、动作捕捉、行为识别等场景中,结构化存储人体姿态数据是工程落地的关键一步。然而,MediaPipe 默认输出的是嵌套的 Protobuf 结构,难以直接用于数据分析或模型训练。

本教程提供一套完整的“检测 → 提取 → 转换 → 导出”流程,特别聚焦于CSV 与 JSON 的标准化互转逻辑,帮助开发者快速构建数据管道,提升项目迭代效率。


2. 环境准备与数据结构解析

2.1 运行环境配置

确保已安装以下依赖库:

pip install mediapipe opencv-python pandas numpy

推荐使用 Python 3.8+ 版本以保证兼容性。

2.2 Holistic 关键点结构概览

MediaPipe Holistic 模型输出包含三大子模块,共543 个 3D 关键点

模块关键点数量坐标维度示例用途
Pose(姿态)33 点(x, y, z, visibility)动作分类、步态分析
Face Mesh(面部)468 点(x, y, z)表情识别、唇形同步
Hands(手势)左右手各 21 点(x, y, z)手势控制、交互操作

📌 注意:Pose 输出包含visibility字段表示置信度,而 Face 和 Hands 不提供该字段,需自行插值补全。

2.3 原始输出示例(简化版)

results.pose_landmarks.landmark[0] # 第一个姿态点 # -> x: 0.45, y: 0.67, z: -0.12, visibility: 0.98 results.face_landmarks.landmark[10] # 鼻尖位置 # -> x: 0.51, y: 0.32, z: 0.05

这些数据为landmark_pb2.Landmark类型对象,不能直接序列化为 JSON 或写入 CSV,必须先转换为原生 Python 数据类型。


3. 数据提取与标准化封装

3.1 提取函数设计原则

我们定义统一接口,将results对象中的关键点提取为标准字典结构,便于后续格式转换。

3.2 完整提取代码实现

import json import csv import pandas as pd from collections import OrderedDict def extract_holistic_data(results): """ 从 MediaPipe Holistic 结果中提取结构化数据 Args: results: mediapipe.solutions.holistic.HolisticResults Returns: dict: 包含 pose, face, left_hand, right_hand 的有序字典 """ data = OrderedDict() # 提取姿态关键点 (带 visibility) if results.pose_landmarks: data['pose'] = [ { 'x': lm.x, 'y': lm.y, 'z': lm.z, 'visibility': lm.visibility } for lm in results.pose_landmarks.landmark ] else: data['pose'] = [None] * 33 # 提取面部关键点 if results.face_landmarks: data['face'] = [ {'x': lm.x, 'y': lm.y, 'z': lm.z} for lm in results.face_landmarks.landmark ] else: data['face'] = [None] * 468 # 提取左右手 def extract_hand(landmarks): return [{'x': lm.x, 'y': lm.y, 'z': lm.z} for lm in landmarks.landmark] if landmarks else [None]*21 data['left_hand'] = extract_hand(results.left_hand_landmarks) data['right_hand'] = extract_hand(results.right_hand_landmarks) return data

💡 使用说明:此函数返回一个OrderedDict,保证字段顺序一致,适合批量处理视频帧序列。


4. JSON 导出与加载

4.1 导出为 JSON 文件

def save_to_json(data, filepath): """ 将提取的数据保存为 JSON 文件 """ with open(filepath, 'w', encoding='utf-8') as f: json.dump(data, f, indent=2, ensure_ascii=False) print(f"✅ JSON 数据已保存至: {filepath}") # 示例调用 # save_to_json(extracted_data, "output.json")
输出示例 (output.json):
{ "pose": [ {"x": 0.45, "y": 0.67, "z": -0.12, "visibility": 0.98}, ... ], "face": [ {"x": 0.51, "y": 0.32, "z": 0.05}, ... ], "left_hand": [...], "right_hand": [...] }

4.2 加载 JSON 数据

def load_from_json(filepath): """ 从 JSON 文件加载数据 """ with open(filepath, 'r', encoding='utf-8') as f: return json.load(f)

📌 优势:JSON 保留完整层级结构,适合长期存档和 Web 接口通信。


5. CSV 导出策略与实现

5.1 CSV 存储挑战

由于数据具有多层级结构(pose/face/hands),无法直接扁平化为二维表。我们采用以下两种方案:

方案描述适用场景
单文件分 sheet使用 Excel 多工作表本地查看、人工分析
多文件拆分分别生成 pose.csv, face.csv 等自动化流水线、数据库导入

本文采用多文件拆分 + 统一前缀命名的方式,兼顾灵活性与可维护性。

5.2 CSV 导出核心代码

def save_to_csv(data, prefix="holistic"): """ 将各模块分别导出为 CSV 文件 """ def write_module(df, name): filename = f"{prefix}_{name}.csv" df.to_csv(filename, index=False) print(f"✅ {name.upper()} 数据已保存至: {filename}") # Pose to DataFrame df_pose = pd.DataFrame(data['pose']) write_module(df_pose, "pose") # Face df_face = pd.DataFrame(data['face']) write_module(df_face, "face") # Left Hand df_lh = pd.DataFrame(data['left_hand']) write_module(df_lh, "left_hand") # Right Hand df_rh = pd.DataFrame(data['right_hand']) write_module(df_rh, "right_hand")
输出文件结构:
holistic_pose.csv # 33 行 × 4 列 holistic_face.csv # 468 行 × 3 列 holistic_left_hand.csv # 21 行 × 3 列 holistic_right_hand.csv# 21 行 × 3 列

📌 提示:若需合并为单个宽表,可用pandas.concat()按索引对齐拼接。


6. CSV 与 JSON 互转工具链

6.1 JSON → CSV 转换器

def json_to_csv(json_path, output_prefix): """ 将 JSON 文件转换为多个 CSV 文件 """ data = load_from_json(json_path) save_to_csv(data, prefix=output_prefix)

6.2 CSV → JSON 转换器

def csv_to_json(prefix, output_path): """ 将多个 CSV 文件合并回 JSON 结构 """ def read_csv_safe(filename): try: return pd.read_csv(filename).to_dict('records') except FileNotFoundError: print(f"⚠️ 文件未找到: {filename}") return [None] * { 'pose': 33, 'face': 468, 'left_hand': 21, 'right_hand': 21 }.get(filename.split('_')[1], 21) data = OrderedDict() data['pose'] = read_csv_safe(f"{prefix}_pose.csv") data['face'] = read_csv_safe(f"{prefix}_face.csv") data['left_hand'] = read_csv_safe(f"{prefix}_left_hand.csv") data['right_hand'] = read_csv_safe(f"{prefix}_right_hand.csv") with open(output_path, 'w', encoding='utf-8') as f: json.dump(data, f, indent=2, ensure_ascii=False) print(f"✅ 已从 CSV 重建并保存为 JSON: {output_path}")

6.3 使用示例

# 全流程演示 extracted_data = extract_holistic_data(results) # 导出为 JSON save_to_json(extracted_data, "frame_001.json") # 转为 CSV json_to_csv("frame_001.json", "frame_001") # 再转回 JSON csv_to_json("frame_001", "recovered.json")

✅ 验证方法:可用jsondiff库比对原始与恢复后的数据一致性。


7. 实战技巧与常见问题

7.1 批量处理视频帧

import os def batch_export_frames(results_list, output_dir="frames"): os.makedirs(output_dir, exist_ok=True) for i, results in enumerate(results_list): data = extract_holistic_data(results) save_to_json(data, f"{output_dir}/frame_{i:04d}.json") json_to_csv(f"{output_dir}/frame_{i:04d}.json", f"{output_dir}/frame_{i:04d}")

适用于动作捕捉序列导出。

7.2 时间戳添加(增强实用性)

修改extract_holistic_data函数,在顶层添加时间信息:

data['timestamp'] = time.time() data['frame_id'] = frame_counter

便于后期做时序分析。

7.3 常见问题解答

问题解决方案
CSV 中出现NaN使用df.fillna(0)填充缺失值
JSON 文件过大启用压缩:json.dump(..., separators=(',', ':'))
手部点错位检查是否左右手混淆,可通过手腕位置判断
导出速度慢改用orjsonujson加速序列化

8. 总结

8.1 核心收获

本文围绕Holistic Tracking 模型的数据导出需求,系统讲解了:

  • 如何从 MediaPipe 输出中提取 543 个关键点
  • 设计标准化的OrderedDict数据结构
  • 实现JSON 与 CSV 的双向无损转换
  • 提供可复用的函数模块,支持单帧与批量处理

这套方案已在多个 Vtuber 动捕项目中验证,稳定可靠。

8.2 最佳实践建议

  1. 优先使用 JSON 存档原始数据,保留完整结构;
  2. 用 CSV 进行数据分析,兼容 Excel/Pandas;
  3. 为每条记录添加元数据(如时间戳、设备ID);
  4. 建立校验机制,防止转换过程丢失关键点。

掌握这些技能后,你不仅能高效管理 Holistic Tracking 的输出,还能将其无缝接入下游的动作识别、动画绑定或 AI 训练流程。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1156962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5分钟用AnimeGANv2一键转换照片,秒变宫崎骏动漫风

5分钟用AnimeGANv2一键转换照片,秒变宫崎骏动漫风 1. 引言:让每一张照片都拥有动漫灵魂 在AI生成艺术蓬勃发展的今天,风格迁移技术正以前所未有的方式改变我们对图像创作的认知。你是否曾幻想过,自己的自拍照能像宫崎骏电影中的…

Holistic Tracking与Blender联动:动捕数据导出实战教程

Holistic Tracking与Blender联动:动捕数据导出实战教程 1. 引言 1.1 学习目标 本文将带你完成从 MediaPipe Holistic 模型 获取全身关键点数据,并将其导出为通用格式,最终在 Blender 中实现动作驱动的完整流程。你将掌握: 如何…

GetQzonehistory:构建个人数字记忆档案馆的终极方案

GetQzonehistory:构建个人数字记忆档案馆的终极方案 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字信息快速迭代的时代,QQ空间承载了无数用户的青春记忆与…

3步解锁付费内容:新手也能轻松掌握的免费阅读神器

3步解锁付费内容:新手也能轻松掌握的免费阅读神器 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 你是否曾经遇到过这样的情况:看到一篇精彩的文章&#xff0c…

Holistic Tracking定制化开发:模型微调接口使用说明

Holistic Tracking定制化开发:模型微调接口使用说明 1. 引言 1.1 业务场景描述 在虚拟人、数字孪生、智能交互等前沿AI应用中,对用户动作与表情的精准捕捉是实现沉浸式体验的核心能力。传统的单模态感知方案(如仅姿态或仅手势)…

手把手教学:用AI智能证件照制作工坊10分钟完成简历照片

手把手教学:用AI智能证件照制作工坊10分钟完成简历照片 在数字化求职时代,一张符合规范、形象专业的证件照是简历中的“第一印象”。传统照相馆拍摄耗时耗力,且存在隐私泄露风险;而使用Photoshop手动处理又对技术门槛要求较高。本…

IAR安装后C/C++开发环境初始化设置

IAR安装后如何快速搭建高效C/C开发环境?一份实战派工程师的配置清单 你有没有遇到过这样的场景:刚装好IAR Embedded Workbench,兴冲冲打开项目准备编译,结果弹出一连串错误——“Compiler not found”、“Cannot open include fil…

Bypass Paywalls Clean:突破付费墙的终极解决方案

Bypass Paywalls Clean:突破付费墙的终极解决方案 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 还在为付费内容望而却步吗?想看的深度报道被付费墙阻挡&…

5分钟学会QQ空间说说永久备份:GetQzonehistory使用指南

5分钟学会QQ空间说说永久备份:GetQzonehistory使用指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 想要永久珍藏那些记录青春岁月的QQ空间说说吗?现在只需简…

终极前端图片压缩方案:用browser-image-compression实现性能突破

终极前端图片压缩方案:用browser-image-compression实现性能突破 【免费下载链接】browser-image-compression Image compression in web browser 项目地址: https://gitcode.com/gh_mirrors/br/browser-image-compression 在当今Web应用中,图片上…

一位全加器多级扩展思路:从零实现教学

从一个比特开始:如何用全加器“搭”出整个加法世界你有没有想过,计算机里两个数字相加这件事,底层到底发生了什么?不是调用a b那么简单——在硬件层面,这是一场由无数个微小逻辑门共同完成的精密协作。而这一切的起点…

如何安全备份QQ空间全部历史说说?GetQzonehistory详细操作指南

如何安全备份QQ空间全部历史说说?GetQzonehistory详细操作指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字时代,QQ空间承载着无数珍贵的青春记忆。那些…

胡桃工具箱:智能原神游戏数据管理解决方案

胡桃工具箱:智能原神游戏数据管理解决方案 【免费下载链接】Snap.Hutao 实用的开源多功能原神工具箱 🧰 / Multifunctional Open-Source Genshin Impact Toolkit 🧰 项目地址: https://gitcode.com/GitHub_Trending/sn/Snap.Hutao 你是…

MediaPipe Holistic实战案例:虚拟现实中的动作捕捉

MediaPipe Holistic实战案例:虚拟现实中的动作捕捉 1. 引言:虚拟现实中的人体感知需求 随着虚拟现实(VR)、增强现实(AR)和元宇宙概念的快速发展,对高精度、低延迟的人体动作捕捉技术需求日益增…

Holistic Tracking能做什么?543关键点捕捉实战入门必看

Holistic Tracking能做什么?543关键点捕捉实战入门必看 1. 技术背景与核心价值 在虚拟现实、数字人驱动和智能交互系统快速发展的今天,单一模态的人体感知技术已难以满足复杂场景的需求。传统方案往往需要分别部署人脸关键点检测、手势识别和人体姿态估…

Holistic Tracking与Unity集成:实时动捕驱动3D模型教程

Holistic Tracking与Unity集成:实时动捕驱动3D模型教程 1. 引言 随着虚拟现实、元宇宙和数字人技术的快速发展,对高精度、低成本动作捕捉的需求日益增长。传统光学动捕系统价格昂贵、部署复杂,而基于AI的视觉动捕方案正逐步成为主流。其中&…

GetQzonehistory完整使用教程:快速备份QQ空间所有历史记录

GetQzonehistory完整使用教程:快速备份QQ空间所有历史记录 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 还在担心QQ空间里的珍贵回忆会随着时间流逝而消失吗?G…

MediaPipe Holistic技术揭秘:跨平台优化策略解析

MediaPipe Holistic技术揭秘:跨平台优化策略解析 1. 引言:AI 全身全息感知的技术演进 随着虚拟现实、数字人和元宇宙应用的兴起,对全维度人体行为理解的需求日益增长。传统方案往往需要多个独立模型分别处理面部、手势和姿态,带…

如何在Dev-C++中配置GCC 7.0+?

在Dev-C中使用较新的GCC版本需要额外配置,因为官方Dev-C自带的编译器版本较旧(通常为GCC 4.9.2)。以下是详细步骤: 方法一:手动集成新版GCC 下载TDM-GCC套件 访问TDM-GCC官网下载最新版(如GCC 10.3&#xf…

胡桃工具箱:原神玩家的智能游戏伴侣全面解析

胡桃工具箱:原神玩家的智能游戏伴侣全面解析 【免费下载链接】Snap.Hutao 实用的开源多功能原神工具箱 🧰 / Multifunctional Open-Source Genshin Impact Toolkit 🧰 项目地址: https://gitcode.com/GitHub_Trending/sn/Snap.Hutao 在…