Example #1
0
    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)
Example #2
0
    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()
Example #3
0
    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)
Example #4
0
    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 = {}
Example #5
0
    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
Example #6
0
 def updateParameters(self, parameters: Parameters):
     parameters.setName(self._name_text.text())
     parameters.setSrcFolder(self._filepath_text.text())
Example #7
0
 def reset(self, parameters: Parameters):
     self._name_text.setText(parameters.name())
     self._filepath_text.setText(parameters.srcFolder())
Example #8
0
    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()
Example #9
0
    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)
Example #10
0
 def updateParameters(self, parameters: Parameters):
     parameters.setSaveProcessedImages(self._save_cbox.isChecked())
     parameters.setDestFolder(self._filepath_text.text())
Example #11
0
 def reset(self, parameters: Parameters):
     self._save_cbox.setChecked(parameters.saveProcessedImages())
     self._saveCBoxToggled(parameters.saveProcessedImages())
     self._filepath_text.setText(parameters.destFolder())
Example #12
0
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)