超链接:深度学习工作常用方法汇总,矩阵维度变化、图片、视频等操作,包含(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_utilimport warnings
from tools.parser import get_configwarnings.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.0while 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 了 1skey = cv2.waitKey(1) & 0xFFif key == 27:breakdef main_fps_perfect():os.environ["CUDA_VISIBLE_DEVICES"] = '0'video_capture = cv2.VideoCapture("D:/project/video_reframe/data/video/test.mp4")f_count = 0t1 = time.time()while True:# 50 可以修改,最好是改成跟原视频流一样的帧数if f_count > 50:t1 = time.time()f_count = 0# 每帧读取ret, frame = video_capture.read()f_count += 1if 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) & 0xFFif key == 27:breakif __name__ == '__main__':os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'# 有弊端的方式# main_fps()# 比较完美的方式main_fps_perfect()

python 计算fps,两种方式优缺点总结相关推荐

  1. 基础知识:编程语言介绍、Python介绍、Python解释器安装、运行Python解释器的两种方式、变量、数据类型基本使用

    阅读目录 今日学习内容: 1.编程语言的介绍 2.Python介绍 3.安装Python解释器(多版本共存) 4.运行Python解释器程序两种方式.(交互式与命令行式)(♥♥♥♥♥) 5.变量(♥♥ ...

  2. 运行python程序的两种方式交互式和文件式_Python基础知识2

    运行Python程序的两种方式 小白学习,如有错误欢迎指点 一.每位小白写的第一个Python程序 1.运行Python程序的两种方式 1.1 交互式模式(即时对话) 打开cmd,打开Python解释 ...

  3. 运行python程序的两种方式交互式和文件式_执行Python程序的两种方式

    交互式(了解) 交互式环境下,敲完一条命令按下enter键马上能看到结果,调试程序方便.程序无法永久保存,关掉cmd窗口数据就消失了. 命令行式(了解) 打开文本编辑器,在文本编辑器中写入一串字符. ...

  4. 运行python程序的两种方式交互式和文件式_教你如何编写、保存与运行 Python 程序...

    第一步 接下来我们将看见如何在 Python 中运行一个传统的"Hello World"程序.Python教程本章将会教你如何编写.保存与运行 Python 程序. 通过 Pyth ...

  5. 周一02.3运行python程序的两种方式

    一.运行python程序的两种方式 方法一:交互式:                      优点:输入一行代码立刻返回结果                       缺点:无法永久保存代码 方法 ...

  6. python 发送邮件的两种方式【终极篇】

    python 发送邮件的两种方式[终极篇] 一,利用python自带的库 smtplib简单高效 from email.mime.multipart import MIMEMultipart from ...

  7. python有两个运行程序分别是什么_运行python程序的两种方式

    [单选题]I wonder why ________ are so interested in action movies. [单选题]项目经理的职责不包括以下哪项内容 ? [简答题]结合项目的特点和 ...

  8. python打开方式包括_运行Python程序有两种方式:________和________。

    运行Python程序有两种方式:________和________. 答: 交互式 文件式 自觉的人,心目中有一张蓝图,人生理想.但是不知道世界的游戏规则 答:× 山水画的鉴赏方法? 答:1.首先看风 ...

  9. python程序执行的两种方式_012.执行Python程序的两种方式

    一.执行Python程序的两种方式 1.1 交互式 在终端内输入python3,然后输入python代码 交互式环境下,敲完一条命令按下enter键马上能看到结果,调试程序方便.程序无法永久保存,关掉 ...

  10. Python字符串的两种方式——百分号方式,format的方式

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

最新文章

  1. 以太经典合作社(ECC)获得Digital Finance Group捐赠
  2. json格式值班表解析
  3. Hadoop Map/Reduce教程
  4. Linux Device和Driver注册过程,以及Probe的时机
  5. libsvm java下载_java-libsvm 版 结合已有数据集的demo,方便初学者使用 Develop 238万源代码下载- www.pudn.com...
  6. 你为何如此优秀?| 神策数据 2018 年获奖集锦
  7. linux如何映射Windows下的磁盘为网络盘
  8. Django annotate: 外键字段解析问题
  9. bind() c语言,c/c++ 标准库 bind 函数详解
  10. 售价16999元!心系天下三星W22 5G耀世发布
  11. 【数字IC设计】001. IC设计基础
  12. Gmail打不开登录不了邮箱最新解决方法
  13. windows和linux系统下数据传输工具——tftpd32使用说明
  14. 347. Top K Frequent Elements
  15. 狄利克雷分布公式_一文详解隐含狄利克雷分布(LDA)
  16. 关于AndroBench在Android 10以后性能衰减的问题分析
  17. Python 并行编程教程 | Lynda教程 中文字幕
  18. matplotlib更改窗口图标
  19. CSDN浏览器插件使用教程及功能体验感触
  20. 微信、QQ第三方登录

热门文章

  1. 如何做好外贸邮件营销?记住这几件不要!
  2. java reduce的用法_Java 8系列之Stream中万能的reduce用法说明
  3. UE4 Boss AI试水(BTT BTS BTD EQS)
  4. sleep()和wait()方法有什么区别
  5. java mapping_05.Java属性映射的正确姿势
  6. 【JAVA】【刷题子】732. 我的日程安排表
  7. 2125: 最短路/3047: Freda的传呼机
  8. Mac滚动截屏了解一下?
  9. debuttoolbar
  10. 基于情感词典的文本情感分析