def start(self): self._parameters = Parameters() self._parameters.setName(HistoryManager.generateNewAnalysisName()) self._input_component.reset(self._parameters) self._parameters_component.reset(self._parameters) self._options_component.reset(self._parameters)
def start(self, parameters: Parameters, images: list): self._abort = True if self.isRunning(): self.wait() self._morphotypes = parameters.selectedMorphotypes().keys() self._threshold = parameters.threshold() self._device_id = parameters.deviceId() self._srcPath = parameters.srcFolder() self._destPath = parameters.destFolder() self._images = images self._abort = False super().start()
def reset(self, parameters: Parameters): self._parameters = parameters self._total_label.setText("Éponges détectées : 0") for i in reversed(range(self._legend_layout.count())): self._legend_layout.itemAt(i).widget().setParent(None) self._chart.removeAllSeries() self._legend_items = {} self._series = {} for i, m in parameters.selectedMorphotypes().items(): self._series[i] = QtCharts.QLineSeries(self) self._series[i].setName(m.name()) self._series[i].setColor(m.color()) pen = QPen(m.color(), 3) pen.setCapStyle(Qt.RoundCap) self._series[i].setPen(pen) self._series[i].append(0, 0) self._chart.addSeries(self._series[i]) self._legend_items[i] = ChartLegendItem(m.name(), m.color(), self) self._legend_items[i].toggled.connect(self._legendItemToggled) for i, k in enumerate(self._legend_items.keys()): row = i % 2 + 1 col = i // 2 + 1 self._legend_layout.addWidget(self._legend_items[k], row, col) axis_pen = QPen(Loader.QSSColor("@dark")) axis_pen.setWidth(2) grid_line_pen = QPen(Loader.QSSColor("@light-gray")) labels_font = QFont(Loader.QSSVariable("@font")) labels_font.setPointSize(10) self._chart.createDefaultAxes() for axis in (self._chart.axisX(), self._chart.axisY()): axis.setRange(0, 4) axis.setLinePen(axis_pen) axis.setGridLinePen(grid_line_pen) axis.setLabelFormat("%d") axis.setLabelsFont(labels_font)
def __init__(self, parameters: Parameters, images_filenames: list = []): self._parameters = parameters self._images_filenames = images_filenames self._images_count = len(images_filenames) self._detected_sponges = { key: 0 for key in parameters.selectedMorphotypes() } self._current_img_index = 0 self._img_with_detections = 0 self._end_datetime = None self._base64_chart_image = None self._processed_images = [] self._most_interesting_base64_images = {}
def fromJSON(obj): params = Parameters.fromJSON(obj["_parameters"]) analysis = Analysis(params) for k, v in obj.items(): if k == "_parameters": pass elif k == "_detected_sponges": analysis.__dict__[k] = {int(i): m for i, m in v.items()} elif k == "_processed_images": analysis.__dict__[k] = [] for img in obj["_processed_images"]: analysis.__dict__[k].append(ProcessedImage.fromJSON(img)) elif k in ["_start_datetime", "_end_datetime"]: analysis.__dict__[k] = QDateTime.fromString(v, Qt.ISODate) else: analysis.__dict__[k] = v return analysis
def updateParameters(self, parameters: Parameters): parameters.setName(self._name_text.text()) parameters.setSrcFolder(self._filepath_text.text())
def reset(self, parameters: Parameters): self._name_text.setText(parameters.name()) self._filepath_text.setText(parameters.srcFolder())
def updateParameters(self, parameters: Parameters): parameters.setThreshold(self._threshold_sbox.value()/100) parameters.setDeviceId(self._devices_list.currentData()) for k in parameters.morphotypes(): parameters.morphotypes()[k] = self._tab_cbox[k].isChecked()
def reset(self, parameters: Parameters): self._threshold_sbox.setValue(parameters.threshold()*100) for k,v in parameters.morphotypes().items(): self._tab_cbox[k].setChecked(v)
def updateParameters(self, parameters: Parameters): parameters.setSaveProcessedImages(self._save_cbox.isChecked()) parameters.setDestFolder(self._filepath_text.text())
def reset(self, parameters: Parameters): self._save_cbox.setChecked(parameters.saveProcessedImages()) self._saveCBoxToggled(parameters.saveProcessedImages()) self._filepath_text.setText(parameters.destFolder())
class ParametersController(BaseController): def __init__(self): super().__init__() title = PageTitle("Démarrer une analyse") title.backArrowClicked.connect(self._returnClicked) self._input_component = InputComponent() self._parameters_component = ParametersComponent() self._options_component = OptionsComponent() self._input_component.analysisNameStateChanged.connect( self._analysisNameStateChanged) self._start_button = StylizedButton("Démarrer", "blue") self._start_button.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum) button_layout = QHBoxLayout() button_layout.setAlignment(Qt.AlignRight) button_layout.addWidget(self._start_button) main_layout = QVBoxLayout() main_layout.addWidget(title) main_layout.addWidget(self._input_component) main_layout.addWidget(self._parameters_component) main_layout.addWidget(self._options_component) main_layout.addLayout(button_layout) self.setLayout(main_layout) # Button slots self._start_button.clicked.connect(self._startClick) def start(self): self._parameters = Parameters() self._parameters.setName(HistoryManager.generateNewAnalysisName()) self._input_component.reset(self._parameters) self._parameters_component.reset(self._parameters) self._options_component.reset(self._parameters) @Slot(bool) def _analysisNameStateChanged(self, ok: bool): self._start_button.setEnabled(ok) @Slot() def _returnClicked(self): self.changeWidget.emit("/menu", None) @Slot() def _startClick(self): self._parameters_component.updateParameters(self._parameters) self._input_component.updateParameters(self._parameters) self._options_component.updateParameters(self._parameters) error = self._parameters.checkValidity() if error is None: images = QDir(self._parameters.srcFolder()).entryList( ["*.png", "*.jpg", "*.jpeg"], filters=QDir.Files) if len(images) == 0: error = "Le dossier source ne contient aucune image au format .jpg" if error is None: self.changeWidget.emit("/analysis", (self._parameters, images)) else: QMessageBox.warning(self, "Erreur", error)