如何在YOLOv5中集成代码实现摄像头检测画面FPS显示
你无法直接运行参考FPS代码的核心原因是:参考代码独立调用cv2.VideoCapture(0)抢占摄像头资源,和YOLOv5自带的视频流读取、推理、绘制逻辑冲突。不需要重新写摄像头初始化、窗口显示、资源释放的逻辑,只需要把FPS计算、文字绘制的片段嵌入YOLOv5已有的推理流程即可,操作步骤如下:
具体修改方法
1. 确认依赖导入
打开项目根目录下的detect.py,检查文件顶部的导入区,确保已经导入time和cv2库,缺失的话直接补上:
import time import cv2
2. 初始化FPS计数变量
在detect.py中找到帧遍历循环的入口,也就是for path, im, im0s, vid_cap, s in dataset:这行代码的上方,添加FPS计算的初始化变量:
fps_start_time = time.time() current_fps = 0
3. 嵌入FPS计算与绘制逻辑
在帧遍历循环内部,找到im0 = annotator.result()这行(这行的作用是返回已经画完所有检测框的结果帧),在它后面直接插入你参考代码里的FPS计算、绘制逻辑,注意把绘制目标帧从原来的frame改成YOLOv5的结果帧im0:
# 计算当前帧FPS fps_end_time = time.time() time_diff = fps_end_time - fps_start_time current_fps = 1 / time_diff fps_start_time = fps_end_time fps_text = "FPS: {:.2f}".format(current_fps) # 将FPS文字绘制到结果帧左上角 cv2.putText(im0, fps_text, (5, 30), cv2.FONT_HERSHEY_COMPLEX, 1, (0,255,255), 1)
注意事项
- 上述位置插入的FPS统计覆盖了帧读取、模型前处理、推理、后处理、检测框绘制的全流程,如果只想统计摄像头读流的FPS,可以把FPS计算代码挪到帧读取完成、模型前处理开始之前的位置。
- 运行初期前几帧FPS数值偏低是模型warmup的正常现象,运行2-3秒后数值会稳定到真实水平。
- 不需要修改原有
cv2.imshow、cv2.waitKey、摄像头资源释放的逻辑,YOLOv5源码已经处理了这部分流程,修改完直接按原来的命令python detect.py --source 0运行即可看到左上角的FPS显示。
内容的提问来源于stack exchange,提问作者AbdullahEmin
相关产品推荐
相关产品推荐

