最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python?Timer和TimerFPS計(jì)時(shí)工具類(lèi)

 更新時(shí)間:2022年03月17日 14:20:34   作者:小鋒學(xué)長(zhǎng)生活大爆炸  
這篇文章主要介紹了Python?Timer和TimerFPS計(jì)時(shí)工具類(lèi),文章分享得代碼內(nèi)容詳細(xì),具有一的的參考價(jià)值,需要的小伙伴可以參考一下

以下工具類(lèi)代碼來(lái)自開(kāi)源項(xiàng)目pyslam。

Timer

import cv2
?
class Colors(object):
? ? '''
? ? Colors class:reset all colors with colors.reset; two ?
? ? sub classes fg for foreground ?
? ? and bg for background; use as colors.subclass.colorname.?
? ? i.e. colors.fg.red or colors.bg.greenalso, the generic bold, disable, ?
? ? underline, reverse, strike through,?
? ? and invisible work with the main class i.e. colors.bold
? ? '''
? ? reset='\033[0m'
? ? bold='\033[01m'
? ? disable='\033[02m'
? ? underline='\033[04m'
? ? reverse='\033[07m'
? ? strikethrough='\033[09m'
? ? invisible='\033[08m'
? ? class fg:?
? ? ? ? black='\033[30m'
? ? ? ? red='\033[31m'
? ? ? ? green='\033[32m'
? ? ? ? orange='\033[33m'
? ? ? ? blue='\033[34m'
? ? ? ? purple='\033[35m'
? ? ? ? cyan='\033[36m'
? ? ? ? lightgrey='\033[37m'
? ? ? ? darkgrey='\033[90m'
? ? ? ? lightred='\033[91m'
? ? ? ? lightgreen='\033[92m'
? ? ? ? yellow='\033[93m'
? ? ? ? lightblue='\033[94m'
? ? ? ? pink='\033[95m'
? ? ? ? lightcyan='\033[96m'
? ? class bg:?
? ? ? ? black='\033[40m'
? ? ? ? red='\033[41m'
? ? ? ? green='\033[42m'
? ? ? ? orange='\033[43m'
? ? ? ? blue='\033[44m'
? ? ? ? purple='\033[45m'
? ? ? ? cyan='\033[46m'
? ? ? ? lightgrey='\033[47m'
?
class Printer(object):
? ? @staticmethod
? ? def red(*args, **kwargs):
? ? ? ? print(Colors.fg.red, *args, **kwargs)
? ? ? ? print(Colors.reset, end="")
?
? ? @staticmethod
? ? def green(*args, **kwargs):
? ? ? ? print(Colors.fg.green, *args, **kwargs)
? ? ? ? print(Colors.reset, end="")
?
? ? @staticmethod
? ? def blue(*args, **kwargs):
? ? ? ? print(Colors.fg.blue, *args, **kwargs)
? ? ? ? print(Colors.reset, end="") ? ? ? ?
? ? ? ??
? ? @staticmethod
? ? def cyan(*args, **kwargs):
? ? ? ? print(Colors.fg.cyan, *args, **kwargs)
? ? ? ? print(Colors.reset, end="") ? ? ? ? ? ??
? ? ? ??
? ? @staticmethod
? ? def orange(*args, **kwargs):
? ? ? ? print(Colors.fg.orange, *args, **kwargs)
? ? ? ? print(Colors.reset, end="") ? ??
? ? ? ??
? ? @staticmethod
? ? def purple(*args, **kwargs):
? ? ? ? print(Colors.fg.purple, *args, **kwargs)
? ? ? ? print(Colors.reset, end="") ?
? ? ? ??
? ? @staticmethod
? ? def yellow(*args, **kwargs):
? ? ? ? print(Colors.fg.yellow, *args, **kwargs)
? ? ? ? print(Colors.reset, end="") ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?
? ? @staticmethod
? ? def error(*args, **kwargs):
? ? ? ? print(Colors.fg.red, *args, **kwargs, file=sys.stderr)
? ? ? ? print(Colors.reset, end="") ? ? ? ?
?
?
?
#timer_print = print?
timer_print = Printer.cyan?
?
class Timer:?
? ? def __init__(self, name = '', is_verbose = False):
? ? ? ? self._name = name?
? ? ? ? self._is_verbose = is_verbose
? ? ? ? self._is_paused = False?
? ? ? ? self._start_time = None?
? ? ? ? self._accumulated = 0?
? ? ? ? self._elapsed = 0 ? ? ? ??
? ? ? ? self.start()
?
? ? def start(self):
? ? ? ? self._accumulated = 0 ? ? ? ??
? ? ? ? self._start_time = cv2.getTickCount()
?
? ? def pause(self):?
? ? ? ? now_time = cv2.getTickCount()
? ? ? ? self._accumulated += (now_time - self._start_time)/cv2.getTickFrequency()?
? ? ? ? self._is_paused = True ??
?
? ? def resume(self):?
? ? ? ? if self._is_paused: # considered only if paused?
? ? ? ? ? ? self._start_time = cv2.getTickCount()
? ? ? ? ? ? self._is_paused = False ? ? ? ? ? ? ? ? ? ? ?
?
? ? def elapsed(self):
? ? ? ? if self._is_paused:
? ? ? ? ? ? self._elapsed = self._accumulated
? ? ? ? else:
? ? ? ? ? ? now = cv2.getTickCount()
? ? ? ? ? ? self._elapsed = self._accumulated + (now - self._start_time)/cv2.getTickFrequency() ? ? ? ?
? ? ? ? if self._is_verbose is True: ? ? ?
? ? ? ? ? ? name = ?self._name
? ? ? ? ? ? if self._is_paused:
? ? ? ? ? ? ? ? name += ' [paused]'
? ? ? ? ? ? message = 'Timer::' + name + ' - elapsed: ' + str(self._elapsed)?
? ? ? ? ? ? timer_print(message)
? ? ? ? return self._elapsed ? ? ? ? ? ? ? ?

用法

import Timer
timer = Timer(is_verbose=True)
timer.start()
?
# 此處是你的代碼
?
timer.elapsed()

效果

TimerFps

在上面的基礎(chǔ)上,再加上下面代碼段:

import os
import numpy as np
import cv2
import math?
?
class MovingAverage:
? ? def __init__(self, average_width = 10, compute_sigma = False): ? ?
? ? ? ? self._average_width = average_width
? ? ? ? self._idx_ring = 0
? ? ? ? self._average = 0
? ? ? ? self._sigma2 = 0
? ? ? ? self._is_init = False?
? ? ? ? self._is_compute_sigma = compute_sigma
? ? ? ? self._one_over_average_width_min_one = 1./(average_width-1)
? ? ? ? self._ring_buffer = np.zeros(average_width)
?
? ? def init(self, initVal=None):
? ? ? ? if initVal is None:
? ? ? ? ? ? initVal = 0.?
? ? ? ? self._ring_buffer = np.full(self._average_width, initVal, dtype=np.float32) ? ? ? ?
? ? ? ? self._average?? ?= initVal;?? ?
? ? ? ? self._sigma2?? ?= 0;
? ? ? ? self._is_init?? ?= True; ? ? ? ?
?
? ? def getAverage(self, new_val=None):
? ? ? ? if not self._is_init:?
? ? ? ? ? ? self.init(new_val)
? ? ? ? if new_val is None:
? ? ? ? ? ? return self._average ? ? ? ? ? ?
? ? ? ? averageOld?? ?= self._average
? ? ? ? oldVal?? ??? ?= self._ring_buffer[self._idx_ring]
? ? ? ? self._average += (new_val - oldVal)/self._average_width
? ? ? ? if self._is_compute_sigma:
? ? ? ? ? ? self._sigma2?? ?= ?self._sigma2 + self._one_over_average_width_min_one*(self._average_width*(averageOld*averageOld - self._average*self._average) - oldVal*oldVal + newVal*newVal)
? ? ? ? self._ring_buffer[self._idx_ring]?? ?= new_val
? ? ? ? self._idx_ring = (self._idx_ring + 1) % self._average_width
? ? ? ? return self._average
?
? ? def getSigma(self):
? ? ? ? return ?math.sqrt(max(self._sigma2,0.)) ? ? ??
?
?
class TimerFps(Timer):
? ? def __init__(self, name='', average_width = 10, is_verbose = True):?
? ? ? ? super().__init__(name, is_verbose) ??
? ? ? ? self.moving_average = MovingAverage(average_width)
?
? ? def refresh(self):?
? ? ? ? elapsed = self.elapsed()
? ? ? ? self.moving_average.getAverage(elapsed)
? ? ? ? self.start()
? ? ? ? if self._is_verbose is True:
? ? ? ? ? ? dT = self.moving_average.getAverage()
? ? ? ? ? ? name = ?self._name
? ? ? ? ? ? if self._is_paused:
? ? ? ? ? ? ? ? name += ' [paused]' ? ? ? ? ? ?
? ? ? ? ? ? message = 'Timer::' + name + ' - fps: ' + str(1./dT) + ', T: ' + str(dT)
? ? ? ? ? ? timer_print(message)

用法

import TimerFps
timer = TimerFps(name='')
timer.start()
?
# 這里是你的代碼
?
timer.refresh()

效果

到此這篇關(guān)于Python Timer和TimerFPS計(jì)時(shí)工具類(lèi)的文章就介紹到這了,更多相關(guān)Python 計(jì)時(shí)工具類(lèi)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中輸入和輸出格式化操作詳解

    Python中輸入和輸出格式化操作詳解

    這篇文章主要介紹了Python中的輸入與輸出操作,包括使用input()函數(shù)進(jìn)行輸入、數(shù)據(jù)類(lèi)型轉(zhuǎn)換、異常處理,以及使用print()函數(shù)進(jìn)行輸出、格式化輸出方法(如%格式化、str.format()和f-string),需要的朋友可以參考下
    2025-02-02
  • python高級(jí)搜索實(shí)現(xiàn)高效搜索GitHub資源

    python高級(jí)搜索實(shí)現(xiàn)高效搜索GitHub資源

    這篇文章主要為大家介紹了python高級(jí)搜索來(lái)高效搜索GitHub,從而高效獲取所需資源,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • Pandas 內(nèi)置的十種畫(huà)圖方法

    Pandas 內(nèi)置的十種畫(huà)圖方法

    這篇文章主要介紹了Pandas 內(nèi)置的十種畫(huà)圖方法,Pandas是非常常見(jiàn)的數(shù)據(jù)分析工具,我們一般都會(huì)處理好處理數(shù)據(jù)然后使用searbon或matplotlib來(lái)進(jìn)行繪制
    2022-09-09
  • 自定義Django Form中choicefield下拉菜單選取數(shù)據(jù)庫(kù)內(nèi)容實(shí)例

    自定義Django Form中choicefield下拉菜單選取數(shù)據(jù)庫(kù)內(nèi)容實(shí)例

    這篇文章主要介紹了自定義Django Form中choicefield下拉菜單選取數(shù)據(jù)庫(kù)內(nèi)容實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • conda虛擬環(huán)境下使用pyinstaller打包程序?yàn)閑xe文件全過(guò)程

    conda虛擬環(huán)境下使用pyinstaller打包程序?yàn)閑xe文件全過(guò)程

    pyinstaller是一個(gè)支持跨平臺(tái)使用的第三方庫(kù),它可以將腳本執(zhí)行所需的模塊和庫(kù),自動(dòng)分析、收集并生成一個(gè)文件夾或者可執(zhí)行文件,這篇文章主要給大家介紹了關(guān)于conda虛擬環(huán)境下使用pyinstaller打包程序?yàn)閑xe文件的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • Python和Golang協(xié)程的區(qū)別

    Python和Golang協(xié)程的區(qū)別

    這篇文章主要為大家介紹了Python和Golang協(xié)程的區(qū)別示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • python 鏡像環(huán)境搭建總結(jié)

    python 鏡像環(huán)境搭建總結(jié)

    這篇文章主要介紹了python 鏡像環(huán)境搭建總結(jié),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • Python爬取商家聯(lián)系電話以及各種數(shù)據(jù)的方法

    Python爬取商家聯(lián)系電話以及各種數(shù)據(jù)的方法

    今天小編就為大家分享一篇Python爬取商家聯(lián)系電話以及各種數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • Python回調(diào)函數(shù)用法實(shí)例詳解

    Python回調(diào)函數(shù)用法實(shí)例詳解

    這篇文章主要介紹了Python回調(diào)函數(shù)用法,以實(shí)例形式較為詳細(xì)的分析了Python回調(diào)函數(shù)的定義、功能及相關(guān)使用技巧,需要的朋友可以參考下
    2015-07-07
  • 對(duì)Python3之方法的覆蓋與super函數(shù)詳解

    對(duì)Python3之方法的覆蓋與super函數(shù)詳解

    今天小編就為大家分享一篇對(duì)Python3之方法的覆蓋與super函數(shù)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06

最新評(píng)論

南汇区| 岚皋县| 吉首市| 廉江市| 获嘉县| 五家渠市| 循化| 岳普湖县| 监利县| 阿克| 商丘市| 收藏| 滦平县| 大丰市| 青岛市| 余庆县| 两当县| 天水市| 新巴尔虎右旗| 霍州市| 大悟县| 普安县| 甘孜| 米林县| 德格县| 临邑县| 绥滨县| 鹿泉市| 禄丰县| 象山县| 资兴市| 垣曲县| 合阳县| 化德县| 柳林县| 珠海市| 西青区| 马龙县| 伊春市| 修水县| 长沙县|