mirror of
https://github.com/iperov/DeepFaceLive
synced 2025-08-20 21:43:22 -07:00
code release
This commit is contained in:
parent
b941ba41a3
commit
a902f11f74
354 changed files with 826570 additions and 1 deletions
1
xlib/time/__init__.py
Normal file
1
xlib/time/__init__.py
Normal file
|
@ -0,0 +1 @@
|
|||
from .time_ import timeit, measure, FPSCounter, AverageMeasurer
|
86
xlib/time/time_.py
Normal file
86
xlib/time/time_.py
Normal file
|
@ -0,0 +1,86 @@
|
|||
import platform
|
||||
import time
|
||||
from collections import deque
|
||||
from datetime import datetime
|
||||
|
||||
import numpy as np
|
||||
|
||||
if platform.system() == 'Windows':
|
||||
from xlib.api.win32 import kernel32, wintypes
|
||||
_perf_freq = wintypes.LARGE_INTEGER()
|
||||
if not kernel32.QueryPerformanceFrequency(_perf_freq):
|
||||
raise Exception('QueryPerformanceFrequency')
|
||||
_perf_freq = _perf_freq.value
|
||||
|
||||
if platform.system() == 'Windows':
|
||||
class timeit:
|
||||
def __enter__(self):
|
||||
self._counter = wintypes.LARGE_INTEGER()
|
||||
if not kernel32.QueryPerformanceCounter(self._counter):
|
||||
raise Exception('QueryPerformanceCounter')
|
||||
|
||||
def __exit__(self, a,b,c):
|
||||
new_counter = wintypes.LARGE_INTEGER()
|
||||
if not kernel32.QueryPerformanceCounter(new_counter):
|
||||
raise Exception('QueryPerformanceCounter')
|
||||
t = (new_counter.value-self._counter.value) / _perf_freq
|
||||
print(f'timeit!: {t}')
|
||||
else:
|
||||
class timeit:
|
||||
def __enter__(self):
|
||||
self.t = datetime.now().timestamp()
|
||||
def __exit__(self, a,b,c):
|
||||
print(f'timeit!: {datetime.now().timestamp()-self.t}')
|
||||
|
||||
class measure:
|
||||
def __init__(self):
|
||||
self.t = time.time()
|
||||
|
||||
def elapsed(self):
|
||||
return time.time()-self.t
|
||||
|
||||
class AverageMeasurer:
|
||||
def __init__(self, samples=120):
|
||||
self._samples = samples
|
||||
self._ts = None
|
||||
|
||||
self._measurements = [0]*samples
|
||||
self._n_sample = 0
|
||||
|
||||
def start(self):
|
||||
self._ts = datetime.now().timestamp()
|
||||
|
||||
def discard(self):
|
||||
self._ts = None
|
||||
|
||||
def stop(self) -> float:
|
||||
"""
|
||||
stop measure and return current average time sec
|
||||
"""
|
||||
measurements = self._measurements
|
||||
if self._ts is None:
|
||||
raise Exception('AverageMeasurer was not started')
|
||||
t = datetime.now().timestamp() - self._ts
|
||||
measurements[self._n_sample] = t
|
||||
self._n_sample = (self._n_sample + 1) % self._samples
|
||||
self._ts = None
|
||||
return max(0.001, np.mean(measurements))
|
||||
|
||||
class FPSCounter:
|
||||
def __init__(self, samples=120):
|
||||
self._steps = deque(maxlen=samples)
|
||||
|
||||
def step(self) -> float:
|
||||
"""
|
||||
make a step for FPSCounter and returns current FPS
|
||||
"""
|
||||
steps = self._steps
|
||||
steps.append(datetime.now().timestamp() )
|
||||
if len(steps) >= 2:
|
||||
div = steps[-1] - steps[0]
|
||||
if div != 0:
|
||||
return len(steps) / div
|
||||
return 0.0
|
||||
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue