import traceback import cv2 from PySide6.QtCore import QObject, QRunnable, QThreadPool, Signal from PySide6.QtGui import QImage from PySide6.QtWidgets import QMessageBox # DetectionTaskSignals: class definition for ScanSlicer behavior. class DetectionTaskSignals(QObject): status = Signal(str) finished = Signal(object, object, object) failed = Signal(str) # DetectionTask: class definition for ScanSlicer behavior. class DetectionTask(QRunnable): # __init__: function definition for ScanSlicer behavior. def __init__(self, autoslicer): super().__init__() self.autoslicer = autoslicer self.signals = DetectionTaskSignals() # run: function definition for ScanSlicer behavior. def run(self): try: boxes, filter_preview_image = self.autoslicer.autodetect_slices( self.signals.status.emit, preview_filter_output=True, ) normal_preview_image = cv2.cvtColor(self.autoslicer.image, cv2.COLOR_BGR2RGB) self.signals.finished.emit(boxes, filter_preview_image, normal_preview_image) except Exception as exc: details = f"{exc}\n\n{traceback.format_exc()}" self.signals.failed.emit(details) # AutotuneTaskSignals: class definition for ScanSlicer behavior. class AutotuneTaskSignals(QObject): status = Signal(str) finished = Signal(object) failed = Signal(str) # AutotuneTask: class definition for ScanSlicer behavior. class AutotuneTask(QRunnable): # __init__: function definition for ScanSlicer behavior. def __init__(self, autoslicer, profile_name): super().__init__() self.autoslicer = autoslicer self.profile_name = profile_name self.signals = AutotuneTaskSignals() # run: function definition for ScanSlicer behavior. def run(self): try: result = self.autoslicer.autotune_for_current_image( self.signals.status.emit, profile_name=self.profile_name, ) self.signals.finished.emit(result) except Exception as exc: details = f"{exc}\n\n{traceback.format_exc()}" self.signals.failed.emit(details) # rgb_array_to_qimage: function definition for ScanSlicer behavior. def rgb_array_to_qimage(image): h, w, c = image.shape bytes_per_line = c * w return QImage(image.data, w, h, bytes_per_line, QImage.Format_RGB888).copy()