以下工具类代码来自开源项目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='3[0m'
    bold='3[01m'
    disable='3[02m'
    underline='3[04m'
    reverse='3[07m'
    strikethrough='3[09m'
    invisible='3[08m'
    class fg: 
        black='3[30m'
        red='3[31m'
        green='3[32m'
        orange='3[33m'
        blue='3[34m'
        purple='3[35m'
        cyan='3[36m'
        lightgrey='3[37m'
        darkgrey='3[90m'
        lightred='3[91m'
        lightgreen='3[92m'
        yellow='3[93m'
        lightblue='3[94m'
        pink='3[95m'
        lightcyan='3[96m'
    class bg: 
        black='3[40m'
        red='3[41m'
        green='3[42m'
        orange='3[43m'
        blue='3[44m'
        purple='3[45m'
        cyan='3[46m'
        lightgrey='3[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

在上面的基础上,再加上下面代码段:

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()

效果

到此这篇关于python timer和timerfps计时工具类的文章就介绍到这了,更多相关python 计时工具类内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!