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。

相关新闻

最新新闻

由普惠均一到按需定制:弹性福利视角下员工满意度提升策略研究

由普惠均一到按需定制:弹性福利视角下员工满意度提升策略研究

目录 1. 传统福利的痛点 2. 弹性福利平台的核心价值 3. 提升满意度的4个关键机制 4. 实施路径与最佳实践 5. 成效评估指标 6. 总结与展望1. 传统福利的痛点 传统企业福利往往采用"一刀切"模式,所有员工享受相同的福利套餐。这种模式存在明显的局限性&…

2026/7/11 7:10:56
Cookie vs Session vs Token:3种身份验证方案在免密登录场景下的对比

Cookie vs Session vs Token:3种身份验证方案在免密登录场景下的对比

Cookie、Session与Token:免密登录场景下的技术选型指南当用户频繁访问需要身份验证的网站时,反复输入账号密码已成为影响体验的主要痛点。免密登录(或"记住我"功能)通过持久化身份凭证,让用户在有效期内无需…

2026/7/11 7:10:56
计算机毕业设计之基于SSM 游戏攻略讨论社区系统

计算机毕业设计之基于SSM 游戏攻略讨论社区系统

当下社会,信息技术充斥社会各个领域,已融入人们生活的点滴,日常中人们管理信息、办理业务、购买商品等都可以网络线上进行,快速而又便利,特别是随着移动互联网时代的到来,更是让人们随时享受着网络给带来的…

2026/7/11 7:10:56
乳腺癌数据集30维特征分析:SVM分类前必须做的3步数据探索

乳腺癌数据集30维特征分析:SVM分类前必须做的3步数据探索

乳腺癌数据集30维特征分析:SVM分类前必须做的3步数据探索在机器学习项目中,数据科学家常犯的一个错误是急于建模而忽视数据探索。威斯康星乳腺癌诊断数据集(Wisconsin Diagnostic Breast Cancer, WDBC)作为经典的二分类数据集,包含569个样本和…

2026/7/11 7:10:56
VPot 2401 文字转语音工具评测:Edge vs Azure 接口,3种音色合成效果对比

VPot 2401 文字转语音工具评测:Edge vs Azure 接口,3种音色合成效果对比

VPot 2401 语音合成引擎深度评测:Edge与Azure接口的实战对比文字转语音技术正在重塑内容创作的工作流程。作为一款轻量级工具,VPot 2401通过集成微软两大语音合成接口——免费的Edge与需要注册的Azure,为用户提供了灵活的声音解决方案。但面对…

2026/7/11 7:10:56
Unity技能系统架构设计:基于GAS框架实现数据驱动与模块化解耦

Unity技能系统架构设计:基于GAS框架实现数据驱动与模块化解耦

1. 项目概述:为什么我们需要一个专业的技能系统?做游戏,尤其是带有角色扮演、动作战斗元素的游戏,技能系统往往是核心玩法的心脏。从《魔兽世界》里法师搓一个寒冰箭,到《英雄联盟》里亚索的“狂风绝息斩”&#xff0c…

2026/7/11 7:05:56

月新闻