mport cv2import mediapipe as mpimport mathimport numpy as npimport pandas as pdfrom sklearnneighbors import KNeighborsClassifieri = 0label = poses = poses_a = poses_b = # 初始化MediaPipe的人体姿势模型mp_drawin
import cv2 import mediapipe as mp import math
import numpy as np import pandas as pd from sklearn.neighbors import KNeighborsClassifier
初始化MediaPipe的人体姿势模型
mp_drawing = mp.solutions.drawing_utils mp_pose = mp.solutions.pose
加载动作数据集
warmup_df = pd.read_csv('dataset_warm-up.csv') combat_df = pd.read_csv('dataset_SHIZHAN POSE.csv') attack_df = pd.read_csv('dataset_hit.csv') respect_df = pd.read_csv('dataset_respect.csv') gongbu_df = pd.read_csv('dataset_gongbu.csv')
将每个小数据集中偏离平均值超过2倍标准差的样本删除
for df in [warmup_df, combat_df, attack_df, respect_df, gongbu_df]: df.drop(df[(np.abs(df[['angle1','angle2','angle3', 'angle4','angle5' ,'angle6', "angle7","angle8","angle9","angle10","angle11"]] - df[['angle1','angle2','angle3', 'angle4','angle5' ,'angle6', "angle7","angle8","angle9","angle10","angle11"]].mean()) > 2 * df[['angle1','angle2','angle3', 'angle4','angle5' ,'angle6', "angle7","angle8","angle9","angle10","angle11"]].std()).any(axis=1)].index, inplace=True)
将数据集合并为一个大的数据集
data = pd.concat([warmup_df, combat_df, attack_df, respect_df,gongbu_df], ignore_index=True)
训练KNN分类器
knn = KNeighborsClassifier(n_neighbors=2) knn.fit(data[['angle1','angle2','angle3', 'angle4','angle5' ,'angle6', "angle7","angle8","angle9","angle10","angle11"]], data['label'])
处理视频文件中的每一帧
with mp_pose.Pose(min_detection_confidence=0.3, min_tracking_confidence=0.3) as pose: # 打开输入视频文件 cap = cv2.VideoCapture('test.mp4') # 获取输入视频的帧率和分辨率 fps = int(cap.get(cv2.CAP_PROP_FPS)) width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv
原文地址: https://www.cveoy.top/t/topic/eB20 著作权归作者所有。请勿转载和采集!