OpenCV 人体动作识别 Python 程序:跳跃、跑步和行走
以下是基于 OpenCV 进行人体动作识别的视频处理的 Python 程序,可以识别 'jump'、'run' 和 'walk' 三种动作:
import cv2
import numpy as np
# 定义识别的动作列表
actions = ['jump', 'run', 'walk']
# 加载视频文件
cap = cv2.VideoCapture('test_video.mp4')
# 加载预训练的人体姿态估计模型
net = cv2.dnn.readNetFromTensorflow('pose_estimation.pb')
# 定义每个动作需要的姿态
posess = {
'jump': [12, 13, 14, 15],
'run': [4, 5, 6, 7],
'walk': [10, 11, 22, 23]
}
# 定义检测动作的函数
def detect_action(frame):
# 将帧转换为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 运行人体姿态估计模型
blob = cv2.dnn.blobFromImage(gray, 1.0/255, (368, 368), (0, 0, 0), swapRB=False, crop=False)
net.setInput(blob)
output = net.forward()
# 获取关节点信息
points = []
for i in range(25):
# 获取关节点的概率值
prob_map = output[0, i, :, :]
# 在概率图上找到最大值的坐标
min_val, prob, min_loc, point = cv2.minMaxLoc(prob_map)
# 如果概率值大于阈值,则将关节点添加到列表中
if prob > 0.1:
x = int(frame.shape[1] * point[0] / output.shape[3])
y = int(frame.shape[0] * point[1] / output.shape[2])
points.append((x, y))
else:
points.append(None)
# 检查每个动作需要的姿态是否满足
for action in actions:
pose = possess[action]
success = True
for i in pose:
if points[i] is None:
success = False
break
if success:
return action
# 没有检测到任何动作
return None
# 读取视频帧并检测动作
while True:
ret, frame = cap.read()
if not ret:
break
action = detect_action(frame)
if action:
print(action)
# 显示视频帧
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放资源
cap.release()
cv2.destroyAllWindows()
该程序使用 OpenCV 中的 dnn 模块加载预训练的人体姿态估计模型,识别视频中的人体姿态,并根据预定义的动作和姿态来检测视频中的动作。程序可以识别 'jump'、'run' 和 'walk' 三种动作,可以根据需要进行扩展。程序将动作名称打印到控制台,并在视频帧上显示原始图像。如果要保存检测结果,可以使用 OpenCV 中的 VideoWriter 类。
原文地址: http://www.cveoy.top/t/topic/mDEf 著作权归作者所有。请勿转载和采集!