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

如何基于实时摄像头对已训练的动作检测模型进行预测测试

实时摄像头动作检测实现方案

完整实现代码

以下是基于OpenCV + TensorFlow/Keras的实时动作检测代码,适配单帧CNN或时序类动作检测模型(如3DCNN、LSTM):

import cv2
import numpy as np
from tensorflow.keras.models import load_model

# 配置参数
MODEL_PATH = "your_action_model.h5"  # 替换为你的模型路径
INPUT_SHAPE = (224, 224)  # 替换为模型训练时的输入尺寸
CLASS_NAMES = ["动作1", "动作2", "动作3"]  # 替换为你的动作类别列表
SEQUENCE_LENGTH = 16  # 时序模型需要的连续帧数,单帧模型设为1

# 加载模型
model = load_model(MODEL_PATH)

# 初始化摄像头与帧缓存
cap = cv2.VideoCapture(0)  # 0表示默认摄像头
frame_buffer = []

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    
    # 帧预处理:缩放、归一化
    resized_frame = cv2.resize(frame, INPUT_SHAPE)
    normalized_frame = resized_frame / 255.0  # 与训练时的归一化方式一致
    
    # 适配时序模型:缓存连续帧
    if SEQUENCE_LENGTH > 1:
        frame_buffer.append(normalized_frame)
        if len(frame_buffer) > SEQUENCE_LENGTH:
            frame_buffer.pop(0)
        # 缓存足够帧后才预测
        if len(frame_buffer) == SEQUENCE_LENGTH:
            input_data = np.expand_dims(frame_buffer, axis=0)  # 增加batch维度
            predictions = model.predict(input_data, verbose=0)
            predicted_class = np.argmax(predictions[0])
            predicted_label = CLASS_NAMES[predicted_class]
            confidence = round(predictions[0][predicted_class] * 100, 2)
            display_text = f"{predicted_label}: {confidence}%"
        else:
            display_text = "缓存帧中..."
    else:
        # 单帧模型直接预测
        input_data = np.expand_dims(normalized_frame, axis=0)
        predictions = model.predict(input_data, verbose=0)
        predicted_class = np.argmax(predictions[0])
        predicted_label = CLASS_NAMES[predicted_class]
        confidence = round(predictions[0][predicted_class] * 100, 2)
        display_text = f"{predicted_label}: {confidence}%"
    
    # 在帧上绘制预测结果
    cv2.putText(frame, display_text, (20, 40), 
                cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
    
    # 显示实时画面
    cv2.imshow("Real-time Action Detection", frame)
    
    # 按q退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放资源
cap.release()
cv2.destroyAllWindows()

关键注意事项

  • 模型输入匹配:必须保证实时帧的预处理逻辑(尺寸、归一化、通道顺序)与训练时完全一致,否则预测结果会失真。
  • 时序模型适配:如果是基于视频序列的模型(如3DCNN、LSTM+CNN),需要缓存连续帧组成序列输入,SEQUENCE_LENGTH要和训练时的参数一致。
  • 性能优化:实时推理时关闭model.predict的verbose输出,若帧率过低可考虑降低输入尺寸、使用TensorRT等工具加速模型。

相关学习资源

  • TensorFlow/Keras官方文档:重点关注模型加载与推理章节,学习如何适配不同输入格式的模型。
  • OpenCV官方教程:掌握实时视频捕获、帧处理与文本绘制的基础操作。
  • 经典动作检测项目:参考UCF101、HMDB51数据集的开源推理代码,学习时序动作检测的帧序列处理逻辑。
  • 实操视频:搜索“实时动作检测部署”相关内容,观看基于3DCNN或双流CNN的实时推理演示,理解完整流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:57:15