Mediapipe 多动作人体姿态识别:生成骨骼角度数据集
使用 Mediapipe 从图片生成人体骨骼角度数据集
本教程介绍如何使用 Mediapipe Python 库从图片生成人体骨骼角度数据集。数据集将包含不同动作的骨骼角度信息,可用于训练机器学习模型进行动作识别。
**代码:**pythonimport mediapipe as mpimport cv2import osimport csv
定义动作列表actions = ['wave', 'fist', 'palm', 'thumb']
初始化 Mediapipemp_drawing = mp.solutions.drawing_utilsmp_pose = mp.solutions.pose
初始化 CSV 文件with open('data.csv', mode='w', newline='') as f: csv_writer = csv.writer(f, delimiter=',', quotechar=''', quoting=csv.QUOTE_MINIMAL) csv_writer.writerow(['Action'] + [f'X{i+1}' for i in range(33)] + [f'Y{i+1}' for i in range(33)] + [f'Z{i+1}' for i in range(33)] + [f'Angle{i+1}' for i in range(len(mp_pose.POSE_CONNECTIONS))])
遍历每个动作文件夹for action in actions: for filename in os.listdir(f'./{action}'): if filename.endswith('.jpg'): # 读取图片 image = cv2.imread(f'./{action}/{filename}') # 转换为 RGB 格式 image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# 初始化 Mediapipe pose 模型 with mp_pose.Pose(min_detection_confidence=0.5, min_tracking_confidence=0.5) as pose: # 将图片输入模型,获取关键点 results = pose.process(image)
# 获取关键点坐标 landmarks = results.pose_landmarks.landmark
# 将关键点坐标转换为列表 landmarks_list = [landmark.x for landmark in landmarks] + [landmark.y for landmark in landmarks] + [landmark.z for landmark in landmarks]
# 计算骨骼角度 angles = [] # 以鼻子为起始点 nose = landmarks[mp_pose.PoseLandmark.NOSE.value] for connection in mp_pose.POSE_CONNECTIONS: angle = mp_pose.calc_angle(nose, landmarks[connection[0]], landmarks[connection[1]]) angles.append(angle)
# 将动作名称和关键点坐标、骨骼角度写入 CSV 文件 with open('data.csv', mode='a', newline='') as f: csv_writer = csv.writer(f, delimiter=',', quotechar=''', quoting=csv.QUOTE_MINIMAL) csv_writer.writerow([action] + landmarks_list + angles)
代码说明:
- 导入必要的库: 包括
mediapipe,cv2,os, 和csv。2. 定义动作列表:actions列表包含所有要识别的动作。3. 初始化 Mediapipe: 初始化mp_drawing和mp_pose对象。4. 初始化 CSV 文件: 创建名为 'data.csv' 的文件,并写入表头。5. 遍历每个动作文件夹: * 读取文件夹中的所有图片。 * 使用 Mediapipe pose 模型检测人体关键点。 * 计算以鼻子为基准点的骨骼角度。 * 将动作名称、关键点坐标和骨骼角度写入 CSV 文件。
**最终生成的 'data.csv' 文件可以用于训练机器学习模型进行动作识别。
原文地址: http://www.cveoy.top/t/topic/gnVI 著作权归作者所有。请勿转载和采集!