以下是基于 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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录