You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现指定图片中的Pose数据CSV输出格式?

姿态识别CSV输出格式修正方案

现有代码的问题

  1. 错误地将多帧的同一关键点数据聚合到distance_data[pose]中,导致最终写入时所有帧数据被平铺成一行,完全打乱了单帧对应一行的预期格式。
  2. 列表推导式的展开逻辑彻底混淆了帧与帧之间的数据边界。

修正后的代码

# 假设 poses 是你要提取的姿态关键点名称列表,dot_suffixes = ['x', 'y', 'z']
if results.pose_landmarks:
    current_frame_data = []
    for pose in poses:
        landmark_attr = getattr(mp_pose.PoseLandmark, pose)
        landmark = results.pose_landmarks.landmark[landmark_attr]
        for suffix in dot_suffixes:
            val = getattr(landmark, suffix)
            # 按坐标类型缩放
            if suffix in ('x', 'z'):
                val *= 640
            elif suffix == 'y':
                val *= 320
            current_frame_data.append(val)
    
    # 写入当前帧数据到CSV
    with open('distance_pose.csv', 'a', newline='') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerow(current_frame_data)

可选:添加CSV表头

如果需要给每列加上明确的名称(比如NOSE_x、NOSE_y),可以在首次写入文件时添加表头:

import os

poses = ['NOSE', 'LEFT_EYE', 'RIGHT_EYE']  # 替换为你的实际关键点列表
dot_suffixes = ['x', 'y', 'z']

# 生成表头
header = []
for pose in poses:
    for suffix in dot_suffixes:
        header.append(f"{pose}_{suffix}")

# 仅当文件为空或不存在时写入表头
if not os.path.exists('distance_pose.csv') or os.path.getsize('distance_pose.csv') == 0:
    with open('distance_pose.csv', 'w', newline='') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerow(header)

关键说明

  • 每处理一帧姿态数据,就生成对应一行的坐标列表,直接写入CSV,严格保证单帧数据的独立性。
  • 去掉了多余的多帧数据聚合逻辑,简化代码结构的同时彻底避免数据混乱。

内容的提问来源于stack exchange,提问作者Johanes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 15:35:04