Files
ADAS360/surround_view/base_thread.py
2025-10-28 18:46:04 +08:00

53 lines
1.5 KiB
Python

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