PaddleVideo + YOWO 实现实时摄像头视频检测的完整代码示例 在 PaddleVideo 中YOWO 模型主要用于时空动作定位Spatio-Temporal Action Detection。由于 YOWO 需要同时输入一段连续的帧序列如 16 帧来进行时空特征提取因此实现实时摄像头检测的核心在于构建滑动窗口Sliding Window机制。以下是结合 PaddleVideo 官方推理逻辑与 OpenCV 实时流处理的完整代码示例。这段代码展示了如何在内存中维护帧队列并逐窗口进行推理importcv2importnumpyasnpimportpaddlefrompaddlevideo.configsimportget_cfgfrompaddlevideo.modelingimportbuild_model# 1. 配置与模型初始化 # 加载 YOWO 的配置文件请根据实际路径修改cfgget_cfg(configs/detection/yowo/yowo.yaml)# 构建模型并加载预训练权重modelbuild_model(cfg.MODEL)model_statepaddle.load(cfg.MODEL.pretrained)model.set_state_dict(model_state)model.eval()# 视频处理相关参数WINDOW_SIZE16# YOWO 通常需要的连续帧数STEP_SIZE4# 滑动窗口的步长每次滑过几帧用于降低计算量THRESHOLD0.5# 动作置信度阈值# 2. 视频流读取与滑动窗口构建 capcv2.VideoCapture(0)# 0 代表默认摄像头ifnotcap.isOpened():raiseRuntimeError(❌ 无法打开摄像头)frame_buffer[]# 内存中的帧队列frame_count0print( 开始实时动作检测按 ESC 键退出...)whileTrue:ret,framecap.read()ifnotret:print(❌ 无法读取摄像头画面)break# 预处理将 BGR 转换为 RGB 并 resize 到模型输入尺寸 (如 224x224)# 注意实际推理前还需要进行 Normalize 和 Transpose (HWC - CHW)# 这里为展示核心逻辑省略了完整的预处理 pipelinergb_framecv2.cvtColor(frame,cv2.COLOR_BGR2RGB)resized_framecv2.resize(rgb_frame,(224,224))frame_buffer.append(resized_frame)frame_count1# 当帧队列达到窗口大小且满足步长条件时触发一次推理iflen(frame_buffer)WINDOW_SIZEandframe_count%STEP_SIZE0:# 取出当前窗口的 16 帧组成 Batch Tensor: [1, T, C, H, W]clipnp.array(frame_buffer[-WINDOW_SIZE:])clip_tensorpaddle.to_tensor(clip).transpose([3,0,1,2]).unsqueeze(0)# 模型前向推理withpaddle.no_grad():outputsmodel(clip_tensor)# 解析输出假设输出包含 boxes, scores, labels# 具体的解析方式需参考 PaddleVideo YOWO 的官方后处理代码boxes,scores,labelsoutputs# 在原始帧上绘制检测框取窗口内的最新一帧进行绘制display_frameframe.copy()forbox,score,labelinzip(boxes,scores,labels):ifscoreTHRESHOLD:x1,y1,x2,y2map(int,box)cv2.rectangle(display_frame,(x1,y1),(x2,y2),(0,255,0),2)cv2.putText(display_frame,f{label}:{score:.2f},(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,255,0),2)# 实时显示cv2.imshow(YOWO Real-time Action Detection,display_frame)# 滑动窗口弹出最旧的帧保持内存占用稳定frame_bufferframe_buffer[STEP_SIZE:]else:# 未达到推理条件时仅显示实时画面cv2.imshow(YOWO Real-time Action Detection,frame)# 按 ESC 退出ifcv2.waitKey(1)0xFF27:break# 3. 释放资源 cap.release()cv2.destroyAllWindows() 核心工程要点说明内存管理代码中通过frame_buffer frame_buffer[STEP_SIZE:]实现了滑动窗口的滑动确保内存中始终只保留少量帧避免了显存/内存溢出。性能优化通过设置STEP_SIZE 4模型并不是每帧都推理而是每隔 4 帧推理一次。这在保证动作检测连续性的同时将计算开销降低了约 75%。数据预处理在实际工程中frame_buffer中存储的应该是经过完整预处理Resize、Normalize、ToTensor后的 NumPy 数组或 Tensor以加快推理时的组装速度。你可以将此代码作为基础模板根据你实际使用的 PaddleVideo 版本的 API 接口如数据预处理和后处理的具体函数进行微调即可快速跑通实时动作检测 Demo。

相关新闻

最新新闻

深度学习图像隐写分析系统:从CNN模型到PyQt5界面实战

深度学习图像隐写分析系统:从CNN模型到PyQt5界面实战

简介:图像隐写分析是信息安全的重要分支,核心任务是从表象正常的图像中检测隐藏信息。传统方法基于人工设计统计特征,面对新型隐写算法时泛化能力不足。以卷积神经网络(CNN)为代表的深度学习方法能够自动学习嵌入痕迹的…

2026/8/30 2:22:47
Python 330道练习题:七天刷完基础语法与编程思维

Python 330道练习题:七天刷完基础语法与编程思维

很多人在学 Python 的时候,都会遇到一个特别尴尬的阶段:书看完了,视频也刷了,语法好像都认识,但一打开编辑器就不知道自己能写什么。看别人的代码觉得“哇,好简单”,自己一动手就报错&#xff0…

2026/8/30 2:22:47
Python 330道练习题怎么刷?高效学习计划与避坑指南

Python 330道练习题怎么刷?高效学习计划与避坑指南

“Python 330道练习题”最近在学编程的人里传得挺广,很多人把它存进收藏夹,然后就没有然后了。我的看法很直接:这套东西真正值钱的不是“330”这个数字,而是它把入门阶段的练习量做成了一份有梯度、能按天推进的计划。这篇文章不列…

2026/8/30 2:22:47
英伟达Q2财报揭秘:AI算力高景气下的采购与选型策略

英伟达Q2财报揭秘:AI算力高景气下的采购与选型策略

英伟达 Q2 营收翻倍达到 962 亿美元,这个季度数字放在整个半导体行业也是很少见的量级。如果你最近在关心 AI 算力采购、GPU 选型、云服务预算,或者只是持有相关科技公司的股票,这条数据值得认真拆一遍。很多人看到“营收翻倍”就以为利润也同…

2026/8/30 2:22:47
基于FreeRTOS+LVGL+CMSIS-DSP的MCU音频频谱分析实现

基于FreeRTOS+LVGL+CMSIS-DSP的MCU音频频谱分析实现

做嵌入式开发的朋友应该都有过这种想法:想给单片机加一个“看得见声音”的功能,把音频信号变成跳动的柱状图或者频谱曲线。方案有很多种,但组合起来最顺手、资料最完整的,基本就是FreeRTOS LVGL CMSIS-DSP这套组合。这次我们来看…

2026/8/30 2:22:47
LangChain4j实战:Java生态LLM应用与RAG检索

LangChain4j实战:Java生态LLM应用与RAG检索

这次我们来看 Java 生态里的 LLM 应用框架 LangChain4j。项目目标很直接:让 Java 开发者不切换语言,也能把大模型接进业务系统。如果你写过 Python 版 LangChain,再回 Java 项目里查资料,应该能理解那种痛点——官方示例几乎全是 …

2026/8/30 2:17:46