init
This commit is contained in:
52
surround_view/base_thread.py
Normal file
52
surround_view/base_thread.py
Normal file
@@ -0,0 +1,52 @@
|
||||
from queue import Queue
|
||||
import cv2
|
||||
from PyQt5.QtCore import (QThread, QTime, QMutex, pyqtSignal, QMutexLocker)
|
||||
|
||||
from .structures import ThreadStatisticsData
|
||||
|
||||
|
||||
class BaseThread(QThread):
|
||||
|
||||
"""
|
||||
Base class for all types of threads (capture, processing, stitching, ...,
|
||||
etc). Mainly for collecting statistics of the threads.
|
||||
"""
|
||||
|
||||
FPS_STAT_QUEUE_LENGTH = 32
|
||||
|
||||
update_statistics_gui = pyqtSignal(ThreadStatisticsData)
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super(BaseThread, self).__init__(parent)
|
||||
self.init_commons()
|
||||
|
||||
def init_commons(self):
|
||||
self.stopped = False
|
||||
self.stop_mutex = QMutex()
|
||||
self.clock = QTime()
|
||||
self.fps = Queue()
|
||||
self.processing_time = 0
|
||||
self.processing_mutex = QMutex()
|
||||
self.fps_sum = 0
|
||||
self.stat_data = ThreadStatisticsData()
|
||||
|
||||
def stop(self):
|
||||
with QMutexLocker(self.stop_mutex):
|
||||
self.stopped = True
|
||||
|
||||
def update_fps(self, dt):
|
||||
# add instantaneous fps value to queue
|
||||
if dt > 0:
|
||||
self.fps.put(1000 / dt)
|
||||
|
||||
# discard redundant items in the fps queue
|
||||
if self.fps.qsize() > self.FPS_STAT_QUEUE_LENGTH:
|
||||
self.fps.get()
|
||||
|
||||
# update statistics
|
||||
if self.fps.qsize() == self.FPS_STAT_QUEUE_LENGTH:
|
||||
while not self.fps.empty():
|
||||
self.fps_sum += self.fps.get()
|
||||
|
||||
self.stat_data.average_fps = round(self.fps_sum / self.FPS_STAT_QUEUE_LENGTH, 2)
|
||||
self.fps_sum = 0
|
||||
Reference in New Issue
Block a user