超链接:深度学习工作常用方法汇总,矩阵维度变化、图片、视频等操作,包含(torch、numpy、opencv等)
——————————————————————————————————————————
看视频进行代码讲解,更容易理解。https://www.bilibili.com/video/BV1HS4y1i7Wh/
import datetime
import os
from tkinter import *
from timeit import time
import cv2
import numpy as np
import yolo_util
import warnings
from tools.parser import get_config
warnings.filterwarnings("ignore", category=DeprecationWarning)
def main_fps():
'''
此方式计算的是程序处理这一帧,所用的时间
当处理实时流时,假如实时流为 25帧/s, 也就是两帧之间的间隔为: 1 / 25 = 0.04s
当你的处理一帧的速度很快的时候(快于 0.04s),那么你会发现,你每秒处理的帧数是大于原视频的 25帧
假设处理速度为: 0.02s,那么你的处理速度fps = 1 / 0.02 = 50
'''
os.environ["CUDA_VISIBLE_DEVICES"] = '0'
video_capture = cv2.VideoCapture("D:/project/video_reframe/data/video/test.mp4")
fps = 0.0
while True:
t1 = time.time()
# 每帧读取
ret, frame = video_capture.read()
if ret != True:
break
# yolov5,进行预测,替换成自己的处理程序
bbox, classes, results_xml = yolo_util.predict(frame)
# 此处的画框操作,也是非常耗时的,尤其是图片越大,耗时越多(可以试试4K,耗时超乎你的想象),
# 在进行fps测试时,最好将此处注释掉,直接print输出fps
# 不要画在图片上,直接看
for box, cla in zip(bbox, classes):
cv2.rectangle(frame, (box[0][0], box[0][1]), (box[1][0], box[1][1]), (0, 0, 255), 3)
cv2.putText(frame, str(cla), (box[0][0], box[0][1] - 20), 0, 5e-3 * 150, (0, 0, 255), 2)
cv2.putText(frame, "FPS: %.1f" % (fps), (int(20), int(40)), 0, 5e-3 * 200, (0, 255, 0), 3)
image = cv2.resize(frame, None, fx=0.6, fy=0.6)
cv2.imshow('YOLO5', image)
fps = int(1 / (time.time() - t1))
# 在进行fps测试时, 此处cv2.waitKey(1),一定写成1,
# 0:代表无限等待,等到键盘输入
# 1000:代表等待1000ms,也就是如果输入1000的话,相当于sleep 了 1s
key = cv2.waitKey(1) & 0xFF
if key == 27:
break
def main_fps_perfect():
os.environ["CUDA_VISIBLE_DEVICES"] = '0'
video_capture = cv2.VideoCapture("D:/project/video_reframe/data/video/test.mp4")
f_count = 0
t1 = time.time()
while True:
# 50 可以修改,最好是改成跟原视频流一样的帧数
if f_count > 50:
t1 = time.time()
f_count = 0
# 每帧读取
ret, frame = video_capture.read()
f_count += 1
if ret != True:
break
# yolov5,进行预测,替换成自己的处理程序
bbox, classes, results_xml = yolo_util.predict(frame)
# 此处的画框操作,也是非常耗时的,尤其是图片越大,耗时越多(可以试试4K,耗时超乎你的想象),
# 在进行fps测试时,最好将此处注释掉,直接print输出fps
# 不要画在图片上,直接看
for box, cla in zip(bbox, classes):
cv2.rectangle(frame, (box[0][0], box[0][1]), (box[1][0], box[1][1]), (0, 0, 255), 3)
cv2.putText(frame, str(cla), (box[0][0], box[0][1] - 20), 0, 5e-3 * 150, (0, 0, 255), 2)
fps = int(f_count / (time.time() - t1))
cv2.putText(frame, "FPS: %.1f" % (fps), (int(20), int(40)), 0, 5e-3 * 200, (0, 255, 0), 3)
image = cv2.resize(frame, None, fx=0.6, fy=0.6)
cv2.imshow('YOLO5', image)
key = cv2.waitKey(1) & 0xFF
if key == 27:
break
if __name__ == '__main__':
os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'
# 有弊端的方式
# main_fps()
# 比较完美的方式
main_fps_perfect()