def stop(self): try: self.cap.release() self.terminate() except: texto = "Ten paciencia. Has pulsado dos veces. Vuelve a pulsar para reconfigurar el boton" crea_mensaje_alerta(texto)
def obten_nombre_patogeno_analisis(self, nombre_boton): try: self.id_analisis = TEXTO_CARPETAS_ANALISIS[ self.path_seleccionado_del_directorio.split('/')[-2]] except: texto = "Debes de seleccionar antes una carpeta de referencia (COLUMNA CENTRAL)" crea_mensaje_alerta(texto) self.id_num = "" self.id_patogeno = f"_{TEXTO_BOTONES_PATOGENO[nombre_boton.text()]}" self.forma_nombre_imagen()
def fn_boton_validar(self): """Se utiliza el diccioanrio de coordenadas y defectos para crear un fichero xml y dos imagenes, una pintada, y otra sin pintar" """ try: nombre_cliente_comboBox = self.comboBox_ampolla.currentText() nombre_cliente = DICCIONARIO_COORDENADAS_PRODUCTO[ nombre_cliente_comboBox][2] self.DICC_COORDENADAS_PRODUCTOS_AUX[nombre_cliente_comboBox][1] = [ [ 0, 0, self.imagen_capturada.width(), self.imagen_capturada.height() ] ] self.DICC_COORDENADAS_PRODUCTOS_AUX2[nombre_cliente_comboBox][ 1] = [[ 0, 0, self.imagen_capturada2.width(), self.imagen_capturada2.height() ]] guarda_imagen_y_anotacion(imagen_pintada=self.visor.pixmap(), imagen_original=self.imagen_capturada, DICC_COORDENADAS_DEFECTOS_AUX=self. DICC_COORDENADAS_DEFECTOS_AUX, DICC_COORDENADAS_PRODUCTOS_AUX=self. DICC_COORDENADAS_PRODUCTOS_AUX, imagen_pintada2=self.visor_2.pixmap(), imagen_original2=self.imagen_capturada2, DICC_COORDENADAS_DEFECTOS_AUX2=self. DICC_COORDENADAS_DEFECTOS_AUX2, DICC_COORDENADAS_PRODUCTOS_AUX2=self. DICC_COORDENADAS_PRODUCTOS_AUX2, nombre_cliente=nombre_cliente) self.visor.clear() self.visor_2.clear() elimina_imagen_temporal() self.detecta_imagen() self.COORDENADAS_DEFECTOS = [] self.COORDENADAS2_DEFECTOS = [] self.COORDENADAS_PRODUCTOS = [] self.COORDENADAS2_PRODUCTOS = [] self.FLAG_CAPTURA_IMAGEN = False self.NUEVA_IMAGEN = True self.comboBox_ampolla_error.setCurrentIndex(0) except: crea_mensaje_alerta("Selecciona antes el tipo de ampolla") self.boton_cancelar.setEnabled(True) self.boton_validar.setEnabled(True)
def recibePrediccion(self, prediccion): "Se obtiene un diccionario con los paths de las imagenes y la prediccion" self.prediccionQThread.stop() try: guarda_ImagenFichero_prediccion(prediccion) except: texto = "Todas las placas han sido ya evaluadas" Main.setDisabled(self, False) self.progresBar.setValue(0) crea_mensaje_alerta(texto) Main.setDisabled(self, False) self.progresBar.setValue(100)
def fn_boton_anadir_carpeta(self): nombre_nueva_carpeta = self.edit_nombre_nueva_carpeta.text() if len(nombre_nueva_carpeta) != 0: index = self.lista_analisis.currentIndex() path_nueva_carpeta_aux = self.dirModel.filePath(index) path_nueva_carpeta = f"{path_nueva_carpeta_aux}/{nombre_nueva_carpeta}" try: os.mkdir(path_nueva_carpeta) except: texto = "La carpeta que intentas crear ya existe" crea_mensaje_alerta(texto) else: texto = "No has introducido ningun nombre de carpeta" crea_mensaje_alerta(texto)
def mousePressEvent2(self, event): """Depende del flag activado, se dibuja o se borra. Se comprueba si el click se ha realizado dentro de la imagen, se ve el tipo de defecto seleccionado, y se dibuja de su respectivo color teniendo en cuenta los factores de escala.En el caso de borrar, se comrprueba que el click se ha realizado dentro de la region, se elimina esta, y se vuelve a dibujar el resto automaticamente""" if self.FLAG_DIBUJAR: if self.FLAG_PRIMER_CLICK: self.primer_click = self.visor_2.mapFromParent(event.pos()) self.primer_click_x = self.primer_click.x() + ( self.ancho_zonaClick_imagen2[1] ) + self.dim_horizontal_spacer self.primer_click_y = self.primer_click.y() if comprueba_click_dentro_imagen(self.primer_click_x, self.primer_click_y, self.ancho_zonaClick_imagen2, self.alto_zonaClick_imagen2): self.FLAG_PRIMER_CLICK = False self.FLAG_SEGUNDO_CLICK = True else: self.FLAG_PRIMER_CLICK = True self.FLAG_SEGUNDO_CLICK = False elif self.FLAG_SEGUNDO_CLICK: try: color = COLORES_DEFECTOS[self.id_tipo_defecto] self.segundo_click = self.visor_2.mapFromParent( event.pos()) self.segundo_click_x = self.segundo_click.x() + ( self.ancho_zonaClick_imagen2[1] ) + self.dim_horizontal_spacer self.segundo_click_y = self.segundo_click.y() if comprueba_click_dentro_imagen( self.segundo_click_x, self.segundo_click_y, self.ancho_zonaClick_imagen2, self.alto_zonaClick_imagen2): self.FLAG_PRIMER_CLICK = True self.FLAG_SEGUNDO_CLICK = False dibuja_region(QPainter(self.visor_2.pixmap()), self.primer_click_x, self.primer_click_y, self.segundo_click_x, self.segundo_click_y, color, 3, self.offset_X2, self.offset_Y2) self.update() self.visor_2.update() if self.DEFECTO_CLICK: self.COORDENADAS2_DEFECTOS = [ int( min([ self.primer_click_x - self.offset_X2, self.segundo_click_x - self.offset_X2 ]) / self.factor_escala_dimension_x2), int( min([ self.primer_click_y - self.offset_Y2, self.segundo_click_y - self.offset_Y2 ]) / self.factor_escala_dimension_y2), int( max([ self.primer_click_x - self.offset_X2, self.segundo_click_x - self.offset_X2 ]) / self.factor_escala_dimension_x2), int( max([ self.primer_click_y - self.offset_Y2, self.segundo_click_y - self.offset_Y2 ]) / self.factor_escala_dimension_y2) ] # Se va actualizando un diccionario que contiene las clases de los defectos y las coordenadas de cada una de las regiones self.DICC_COORDENADAS_DEFECTOS_AUX2 = almacena_coordenadas_y_defecto( self.COORDENADAS2_DEFECTOS, self.id_tipo_defecto, self.DICC_COORDENADAS_DEFECTOS_AUX2, flag_nueva_imagen=self.NUEVA_IMAGEN) else: self.COORDENADAS2_PRODUCTOS = [ int( min([ self.primer_click_x - self.offset_X2, self.segundo_click_x - self.offset_X2 ]) / self.factor_escala_dimension_x2), int( min([ self.primer_click_y - self.offset_Y2, self.segundo_click_y - self.offset_Y2 ]) / self.factor_escala_dimension_y2), int( max([ self.primer_click_x - self.offset_X2, self.segundo_click_x - self.offset_X2 ]) / self.factor_escala_dimension_x2), int( max([ self.primer_click_y - self.offset_Y2, self.segundo_click_y - self.offset_Y2 ]) / self.factor_escala_dimension_y2) ] # Se va actualizando un diccionario que contiene las clases de los defectos y las coordenadas de cada una de las regiones self.DICC_COORDENADAS_PRODUCTOS_AUX2 = almacena_coordenadas_y_producto( self.COORDENADAS2_PRODUCTOS, self.id_tipo_producto_error, self.DICC_COORDENADAS_PRODUCTOS_AUX2, flag_nueva_imagen=self.NUEVA_IMAGEN) # Se activa el boton de borrar por si se quiere borrar la coordenada introducida self.boton_borrar.setEnabled(True) self.boton_validar.setEnabled(True) self.boton_cancelar.setEnabled(True) self.NUEVA_IMAGEN = False else: self.FLAG_PRIMER_CLICK = False self.FLAG_SEGUNDO_CLICK = True except: crea_mensaje_alerta( "Si vas a dibujar sobre la imagen, primero selecciona un tipo de defecto." ) elif self.FLAG_BORRAR: self.click_borrar = self.visor_2.mapFromParent(event.pos()) self.click_borrar_x = self.click_borrar.x() + ( self.ancho_zonaClick_imagen2[1]) + self.dim_horizontal_spacer self.click_borrar_y = self.click_borrar.y() if comprueba_click_dentro_imagen(self.click_borrar_x, self.click_borrar_x, self.ancho_zonaClick_imagen2, self.alto_zonaClick_imagen2): # self.FLAG_PRIMER_CLICK = True # self.FLAG_SEGUNDO_CLICK = False coordenadas_click = [(self.click_borrar_x), (self.click_borrar_y)] self.DICC_COORDENADAS_DEFECTOS_AUX2, click_correcto1 = borrar_region( coordenadas_click, self.DICC_COORDENADAS_DEFECTOS_AUX2, self.offset_X2, self.offset_Y2, self.factor_escala_dimension_x2, self.factor_escala_dimension_y2) self.DICC_COORDENADAS_PRODUCTOS_AUX2, click_correcto2 = borrar_region( coordenadas_click, self.DICC_COORDENADAS_PRODUCTOS_AUX2, self.offset_X2, self.offset_Y2, self.factor_escala_dimension_x2, self.factor_escala_dimension_y2) if click_correcto1 or click_correcto2: self.coloca_imagen_en_visor(self.imagen_capturada, self.imagen_capturada2, self.FLAG_BORRAR) for keys, values in self.DICC_COORDENADAS_DEFECTOS_AUX2.items( ): if values[1] != '-': try: color = COLORES_DEFECTOS[keys] except: color = 'black' for coordenadas in values[1]: coordenada_x_min = coordenadas[0] * \ self.factor_escala_dimension_x2 coordenada_y_min = coordenadas[1] * \ self.factor_escala_dimension_y2 coordenada_x_max = coordenadas[2] * \ self.factor_escala_dimension_x2 coordenada_y_max = coordenadas[3] * \ self.factor_escala_dimension_y2 dibuja_region(QPainter(self.visor_2.pixmap()), coordenada_x_min, coordenada_y_min, coordenada_x_max, coordenada_y_max, color, 3, 0, 0) for keys, values in self.DICC_COORDENADAS_DEFECTOS_AUX.items( ): if values[1] != '-': try: color = COLORES_DEFECTOS[keys] except: color = 'black' for coordenadas in values[1]: coordenada_x_min = coordenadas[0] * \ self.factor_escala_dimension_x coordenada_y_min = coordenadas[1] * \ self.factor_escala_dimension_y coordenada_x_max = coordenadas[2] * \ self.factor_escala_dimension_x coordenada_y_max = coordenadas[3] * \ self.factor_escala_dimension_y dibuja_region(QPainter(self.visor.pixmap()), coordenada_x_min, coordenada_y_min, coordenada_x_max, coordenada_y_max, color, 3, 0, 0) else: continue for keys, values in self.DICC_COORDENADAS_PRODUCTOS_AUX.items( ): if values[1] != '-': try: color = COLORES_DEFECTOS[keys] except: color = 'black' for coordenadas in values[1]: coordenada_x_min = coordenadas[0] * \ self.factor_escala_dimension_x coordenada_y_min = coordenadas[1] * \ self.factor_escala_dimension_y coordenada_x_max = coordenadas[2] * \ self.factor_escala_dimension_x coordenada_y_max = coordenadas[3] * \ self.factor_escala_dimension_y dibuja_region(QPainter(self.visor.pixmap()), coordenada_x_min, coordenada_y_min, coordenada_x_max, coordenada_y_max, color, 3, 0, 0) else: continue for keys, values in self.DICC_COORDENADAS_PRODUCTOS_AUX2.items( ): if values[1] != '-': try: color = COLORES_DEFECTOS[keys] except: color = 'black' for coordenadas in values[1]: coordenada_x_min = coordenadas[0] * \ self.factor_escala_dimension_x coordenada_y_min = coordenadas[1] * \ self.factor_escala_dimension_y coordenada_x_max = coordenadas[2] * \ self.factor_escala_dimension_x coordenada_y_max = coordenadas[3] * \ self.factor_escala_dimension_y dibuja_region(QPainter(self.visor_2.pixmap()), coordenada_x_min, coordenada_y_min, coordenada_x_max, coordenada_y_max, color, 3, 0, 0)