def guardar(self, individuo_id = None): db_man = ManagerBase() if (individuo_id == None): individuo_id = self.parent.radios[self.parent.iRadioChecked].id_individuo img_original = self.parent.q_img img_transformada = self.parent.qimage_transformada img_segmentada = self.parent.qimage_segmentada vector_regiones = self.parent.vector_regiones fecha = self.fecha.dateTime().toPython() if self.fecha.dateTime() != '01/01/2000 00:00:00' else None lat = self.latitud.text() if self.latitud.text() != '' else None lon = self.longitud.text() if self.longitud.text() != '' else None acompaniantes = self.cantidadSapitos.text() if self.cantidadSapitos.text() != '' else None observaciones = self.observaciones.toPlainText() if self.observaciones.toPlainText() != '' else None nombre_imagen = self.parent.filename_nopath puntos = self.parent.getPoints() angulos = self.parent.getAngles() largos = self.parent.getLarges() fotografo_id = self.fotografos.items.itemData(self.fotografos.items.currentIndex()) zona_id = self.zona.items.itemData(self.zona.items.currentIndex()) superficie_ocupada = self.parent.superficie_ocupada posicion_algoritmo = self.posicion_algoritmo if (individuo_id and img_original and img_segmentada and img_transformada): ManagerBase().crear_captura(individuo_id, img_original, img_transformada, img_segmentada, vector_regiones, fecha, lat, lon,\ acompaniantes, observaciones, nombre_imagen, puntos, angulos, largos, fotografo_id, zona_id, superficie_ocupada, posicion_algoritmo) self.close()
def __init__(self, imagen_inicial=None): super(WindowSapito, self).__init__() self.db_man = ManagerBase() self.initUI() #Para debugear, recibimos una imagen inicial, en vez de tener que abrirla desde la gui. if imagen_inicial is not None: self.loadImage(imagen_inicial)
def verificar_nombre_imagen(self, nombre_imagen): db_man = ManagerBase() capturas = db_man.get_captura_por_nombre_imagen(nombre_imagen) if capturas.count() > 0: self.widget = WidgetArchivoConMismoNombre(self, nombre_imagen, capturas) #self.hide() self.widget.show()
def guardar(self): db_man = ManagerBase() n = self.name_input.text() if self.name_input.text() != '' else None ln = self.lastname_input.text() if self.lastname_input.text() != '' else None em = self.email_input.text() if self.email_input.text() != '' else None if (n and ln and em): db_man.modificar_fotografo(self.id_fotografo, n, ln, em) self.close() self.refresh_table()
def guardar(self): db_man = ManagerBase() n = self.name_input.text() la = self.lat_input.text() if self.lat_input.text() != '' else None lo = self.lon_input.text() if self.lon_input.text() != '' else None if (n): db_man.modificar_zona(self.id_zona, n, la, lo) self.close() self.refresh_table()
def _get_item_table(self, data_contain): item_img = QtGui.QTableWidgetItem() data = self.extract_data(data_contain) qimage = ManagerBase().bytes_a_imagen(data) if self.width != -1 and self.height != -1: qimage = qimage.scaled(self.width, self.height) item_img.setData(QtCore.Qt.DecorationRole, QtGui.QPixmap.fromImage(qimage)) if self.set_size_row: item_img.size_row = qimage.height() return item_img
def buscar(self): individuo_id = self.id_individuo.text() if self.id_individuo.text() != '' else None sexo = self.sexo.items.currentText() sexo = sexo if sexo != "..." else None observaciones = self.observaciones.text() if self.observaciones.text() != '' else None db_man = ManagerBase() individuos = db_man.buscar_individuos(individuo_id, sexo, observaciones) self.table.set_data(individuos)
def guardar(self): db_man = ManagerBase() n = self.name_input.text() la = self.lat_input.text() if self.lat_input.text() != '' else None lo = self.lon_input.text() if self.lon_input.text() != '' else None if (n): zona = db_man.nueva_zona(n, la, lo) self.close() if self.widget_extend != None: self.widget_extend.extend(zona) return True return False
def guardar(self): db_man = ManagerBase() sexo = self.sexo observaciones_individuo = self.texto.toPlainText() try: individuo_id = db_man.crear_individuo_ret_id(sexo, observaciones_individuo) self.widgetAgregarCaptura.guardar(individuo_id) self.close() self.parent.hideUIResult() except: print("error!") traceback.print_exc()
def guardar(self): db_man = ManagerBase() n = self.name_input.text() ln = self.lastname_input.text() em = self.email_input.text() if (n and ln and em): fotografo = db_man.nuevo_fotografo(n, ln, em) self.close() if self.widget_extend != None: self.widget_extend.extend(fotografo) return True return False
def guardar(self): db_man = ManagerBase() fecha = self.fecha.dateTime().toPython() if self.fecha.dateTime() != '01/01/2000 00:00:00' else None lat = self.latitud.text() if self.latitud.text() != '' else None lon = self.longitud.text() if self.longitud.text() != '' else None acompaniantes = self.cantidadSapitos.text() if self.cantidadSapitos.text() != '' else None observaciones = self.observaciones.toPlainText() if self.observaciones.toPlainText() != '' else None fotografo_id = self.fotografos.items.itemData(self.fotografos.items.currentIndex()) zona_id = self.zona.items.itemData(self.zona.items.currentIndex()) db_man.modificar_captura(self.id_captura,fecha, lat, lon, acompaniantes, observaciones, fotografo_id, zona_id) self.close() self.refresh_table()
def main(): app = QtGui.QApplication(sys.argv) #ex = WidgetIndividuo() from db import ManagerBase ex = WidgetListaIndividuosStandaloneScroleable(ManagerBase().all_individuos()) ex.show() sys.exit(app.exec_())
def iniciar_ui(self): vbox = QtGui.QVBoxLayout() qgridLayout = QtGui.QGridLayout() vbox.addLayout(qgridLayout) boton_buscar = QtGui.QPushButton("Buscar") boton_buscar.clicked.connect(self.buscar) vbox.addWidget(boton_buscar) self.table = WidgetTableIndividuos(self) vbox.addWidget(self.table) db_man = ManagerBase() self.id_individuo = QtGui.QLineEdit() self.id_individuo.setValidator(QtGui.QIntValidator()) self.sexo = WidgetComboBoxList(sexo, self.parent) self.observaciones = QtGui.QLineEdit() qgridLayout.addWidget(QtGui.QLabel("id individuo: "), 0, 0) qgridLayout.addWidget(self.id_individuo, 0, 1) qgridLayout.addWidget(QtGui.QLabel("Sexo: "), 0, 2) qgridLayout.addWidget(self.sexo, 0, 3) qgridLayout.addWidget(QtGui.QLabel("Observaciones: "), 0, 4) qgridLayout.addWidget(self.observaciones, 0, 5) self.setLayout(vbox) self.show()
def refresh(self): individuo = ManagerBase().get_individuo(self.id_individuo) if individuo: self.table.set_data(individuo.capturas) else: self.parent.refresh() self.close()
def iniciar_ui(self): self.items = QtGui.QComboBox() self.items.addItem("...", -1) for item in ManagerBase().all(self.type): self.items.addItem(item.description(), item.id) layout = QtGui.QHBoxLayout() layout.addWidget(self.items) self.setLayout(layout)
def load_items(self): items = self.hBox.takeAt(0) if items != None: items.widget().deleteLater() self.items = QtGui.QComboBox() for item in ManagerBase().all(self.type): self.items.addItem(item.description(), item.id) self.hBox.insertWidget(0, self.items)
def borrar(self): reply = QtGui.QMessageBox.question(self, 'Message', "Realmente desea borrar esta zona?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No) if reply == QtGui.QMessageBox.Yes: ManagerBase().borrar_zona(self.id_zona) self.close() self.refresh_table()
def borrar(self): reply = QtGui.QMessageBox.question(self, 'Message', "Realmente desea borrar este individuo?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No) if reply == QtGui.QMessageBox.Yes: ManagerBase().borrar_individuo(self.id_individuo) self.close() self.parent.refresh()
def iniciar_ui(self): self.setWindowTitle("Zonas") self.table = WidgetTableZonas(self) self.table.set_data(ManagerBase().all_zonas()) self.button_nuevo = QtGui.QPushButton("Nuevo") self.button_nuevo.clicked.connect(self.launch_nueva_zona) vbox = QtGui.QVBoxLayout() vbox.addWidget(self.table) vbox.addWidget(self.button_nuevo) self.setLayout(vbox)
def buscar(self): individuo_id = self.id_individuo.text() if self.id_individuo.text() != '' else None captura_id = self.id_captura.text() if self.id_captura.text() != '' else None sexo = self.sexo.items.itemText(self.sexo.items.currentIndex()) sexo = sexo if sexo != "..." else None date_time_inic = self.date_time_inic.dateTime().toPython() if self.date_time_inic.dateTime() != self.default_date_time else None date_time_fin = self.date_time_fin.dateTime().toPython() if self.date_time_fin.dateTime() != self.default_date_time else None zona_id = self.zona.items.itemData(self.zona.items.currentIndex()) zona_id = zona_id if zona_id != -1 else None fotografo_id = self.fotografo.items.itemData(self.fotografo.items.currentIndex()) fotografo_id = fotografo_id if fotografo_id != -1 else None cant_sapitos_min = self.cant_sapitos_min.text() if self.cant_sapitos_min.text() != '' else None cant_sapitos_max = self.cant_sapitos_max.text() if self.cant_sapitos_max.text() != '' else None observaciones = self.observaciones.text() if self.observaciones.text() != '' else None observaciones_individuo = self.observaciones_individuo.text() if self.observaciones_individuo.text() != '' else None archivo = self.archivo.text() if self.archivo.text() != '' else None db_man = ManagerBase() capturas_individuos = db_man.buscar_capturas_join_individuos(individuo_id, captura_id, sexo, date_time_inic, date_time_fin, zona_id, fotografo_id,\ cant_sapitos_min, cant_sapitos_max, observaciones, observaciones_individuo, archivo) self.table.set_data(capturas_individuos)
def llenar(self): if self.id_captura: captura = ManagerBase().get_captura(self.id_captura) date_time = QtCore.QDateTime(QtCore.QDateTime.fromString(str(captura.fecha), "yyyy-MM-dd hh:mm:ss")) self.fecha.setDateTime(date_time) index = self.fotografos.items.findData(captura.fotografo_id) self.fotografos.items.setCurrentIndex(index) index = self.zona.items.findData(captura.zona_id) self.zona.items.setCurrentIndex(index) self.latitud.setText(str(captura.lat if captura.lat != None else "")) self.longitud.setText(str(captura.lon if captura.lon != None else "")) self.cantidadSapitos.setText(str(captura.cantidad_acompaniantes if captura.cantidad_acompaniantes != None else "")) self.observaciones.setText(captura.observaciones) db_man = ManagerBase() otra_captura = db_man.get_captura(captura.id) qimage = ManagerBase().bytes_a_imagen(otra_captura.imagen_original_thumbnail_mediana) self.imagen_label.setPixmap(QtGui.QPixmap.fromImage(qimage))
def iniciar_ui(self): vbox = QtGui.QVBoxLayout() qgridLayout = QtGui.QGridLayout() vbox.addLayout(qgridLayout) boton_buscar = QtGui.QPushButton("Buscar") boton_buscar.clicked.connect(self.buscar) vbox.addWidget(boton_buscar) self.table = WidgetTableCapturasIndividuosJoin(self) vbox.addWidget(self.table) db_man = ManagerBase() self.id_individuo = QtGui.QLineEdit() self.id_individuo.setValidator(QtGui.QIntValidator()) self.id_captura = QtGui.QLineEdit() self.id_captura.setValidator(QtGui.QIntValidator()) self.sexo = WidgetComboBoxList(sexo, self.parent) self.zona = WidgetComboBoxType(Zona, self.parent) self.fotografo = WidgetComboBoxType(Fotografo, self.parent) self.cant_sapitos_min = QtGui.QLineEdit() self.cant_sapitos_min.setValidator(QtGui.QIntValidator()) self.cant_sapitos_max = QtGui.QLineEdit() self.cant_sapitos_max.setValidator(QtGui.QIntValidator()) self.observaciones = QtGui.QLineEdit() self.observaciones_individuo = QtGui.QLineEdit() self.archivo = QtGui.QLineEdit() self.date_time_inic = QtGui.QDateTimeEdit() self.date_time_inic.setCalendarPopup(True) self.date_time_inic.setCalendarWidget(QtGui.QCalendarWidget()) self.date_time_fin = QtGui.QDateTimeEdit() self.date_time_fin.setCalendarPopup(True) self.date_time_fin.setCalendarWidget(QtGui.QCalendarWidget()) qgridLayout.addWidget(QtGui.QLabel("id individuo: "), 0, 0) qgridLayout.addWidget(self.id_individuo, 0, 1) qgridLayout.addWidget(QtGui.QLabel("id captura: "), 0, 2) qgridLayout.addWidget(self.id_captura, 0, 3) qgridLayout.addWidget(QtGui.QLabel("fecha inicio: "), 0, 4) qgridLayout.addWidget(self.date_time_inic, 0, 5) qgridLayout.addWidget(QtGui.QLabel("fecha fin: "), 0, 6) qgridLayout.addWidget(self.date_time_fin, 0, 7) qgridLayout.addWidget(QtGui.QLabel("Zona: "), 1, 0) qgridLayout.addWidget(self.zona, 1, 1) qgridLayout.addWidget(QtGui.QLabel("Fotografo: "), 1, 2) qgridLayout.addWidget(self.fotografo, 1, 3) qgridLayout.addWidget(QtGui.QLabel("Sapitos acomp min: "), 1, 4) qgridLayout.addWidget(self.cant_sapitos_min, 1, 5) qgridLayout.addWidget(QtGui.QLabel("Sapitos acomp max: "), 1, 6) qgridLayout.addWidget(self.cant_sapitos_max, 1, 7) qgridLayout.addWidget(QtGui.QLabel("Observaciones: "), 2, 0) qgridLayout.addWidget(self.observaciones, 2, 1) qgridLayout.addWidget(QtGui.QLabel("Observaciones Individuo: "), 2, 2) qgridLayout.addWidget(self.observaciones_individuo, 2, 3) qgridLayout.addWidget(QtGui.QLabel("Archivo: "), 2, 4) qgridLayout.addWidget(self.archivo, 2, 5) qgridLayout.addWidget(QtGui.QLabel("Sexo: "), 2, 6) qgridLayout.addWidget(self.sexo, 2, 7) self.setLayout(vbox) self.show()
def llenar(self): if self.id_zona: zona = ManagerBase().get_zona(self.id_zona) self.name_input.setText(str(zona.nombre if zona.nombre != None else "")) self.lat_input.setText(str(zona.lat if zona.lat != None else "")) self.lon_input.setText(str(zona.lon if zona.lon != None else ""))
def refresh(self): self.table.set_data(ManagerBase().all_fotografos())
def llenar(self): if self.id_fotografo: fotografo = ManagerBase().get_fotografo(self.id_fotografo) self.name_input.setText(str(fotografo.nombre if fotografo.nombre != None else "")) self.lastname_input.setText(str(fotografo.apellido if fotografo.apellido != None else "")) self.email_input.setText(str(fotografo.email if fotografo.email != None else ""))
class WindowSapito(QtGui.QMainWindow): def __init__(self, imagen_inicial=None): super(WindowSapito, self).__init__() self.db_man = ManagerBase() self.initUI() #Para debugear, recibimos una imagen inicial, en vez de tener que abrirla desde la gui. if imagen_inicial is not None: self.loadImage(imagen_inicial) def initUI(self): #self.buttonShape = QtGui.QPushButton() #self.buttonShape.setIcon(QtGui.QIcon("sapito.png")) self.iniciadaUIResult = False self.iRadioChecked = -1 self.filename = None self.filename_path = None self.mainLayout = QtGui.QHBoxLayout() selectorLayout = QtGui.QVBoxLayout() self.mainLayout.addLayout(selectorLayout) self.selectorWidget = SelectorWidget() selectorLayout.addWidget(self.selectorWidget) centralWidget = QtGui.QWidget() centralWidget.setLayout(self.mainLayout) self.setCentralWidget(centralWidget) self.createActions() self.createMenus() #Este widget muestra la imagen proyectada y segmentada. self.imageResult = QtGui.QLabel() #self.imageResult.resize(300, 300) self.imageResult.resize(100, 100) #Este widget muestra la imagen proyectada. self.imageTransform = QtGui.QLabel() #self.imageTransform.resize(300, 300) self.imageTransform.resize(100, 100) self.showMaximized() def initUIResult(self, qimage_transformada, qimage_segmentada): if (self.iniciadaUIResult): self.hideUIResult() self.imageTransform.setPixmap(QtGui.QPixmap.fromImage(qimage_transformada.scaled(150, 150))) self.imageResult.setPixmap(QtGui.QPixmap.fromImage(qimage_segmentada.scaled(150, 150))) self.resultLayout = QtGui.QVBoxLayout() self.imageResultLayout = QtGui.QHBoxLayout() self.resultLayout.addLayout(self.imageResultLayout) self.widget_botones = WidgetBotonesAgregarCaptura(self) self.resultLayout.addWidget(self.widget_botones) self.mainLayout.addLayout(self.resultLayout) self.imageResultLayout.addWidget(self.imageTransform) self.imageResultLayout.addWidget(self.imageResult) self.imageTransform.setVisible(True) self.imageResult.setVisible(True) self.iniciadaUIResult = True def hideUIResult(self): resultLayout = self.mainLayout.takeAt(1) if resultLayout: resultLayout.deleteLater() image1 = self.imageResultLayout.takeAt(1) image2 = self.imageResultLayout.takeAt(0) image1.widget().setVisible(False) image2.widget().setVisible(False) self.widget_listado.deleteLater() self.widget_botones.deleteLater() self.iniciadaUIResult = False self.selectorWidget.resetShape() def loadImage(self, filename): self.filename = filename self.cv_img = cv.imread(self.filename) # Abrimos la imagen con opencv self.q_img = QtGui.QImage(self.filename) # Abrimos la imagen con qt if not (self.cv_img.any() and self.cv_img.size): QtGui.QMessageBox.information(self, "Image Viewer", "Error al cargar la imagen %s." % filename) else: if (self.filename != None): self.selectorWidget.reset() if (self.iniciadaUIResult): self.hideUIResult() self.selectorWidget.addImage(self.q_img) self.setWindowTitle(self.filename) self.filename_nopath = self.filename.split("/")[-1] self.filename_path = self.filename[:-len(self.filename_nopath) - 1] self.verificar_nombre_imagen(self.filename_nopath) def verificar_nombre_imagen(self, nombre_imagen): db_man = ManagerBase() capturas = db_man.get_captura_por_nombre_imagen(nombre_imagen) if capturas.count() > 0: self.widget = WidgetArchivoConMismoNombre(self, nombre_imagen, capturas) #self.hide() self.widget.show() #self.widget.activateWindow() def open(self): path = QtCore.QDir.currentPath() if self.filename_path == None else QtCore.QDir.absolutePath( QtCore.QDir(self.filename_path)) filename, _ = QtGui.QFileDialog.getOpenFileName(self, "Open File", path) if filename: self.loadImage(filename) def transform(self): """ Aplicamos la transformacion a la region seleccionada y llenamos la lista de similares. """ points = self.selectorWidget.getPoints() # Los puntos que marco el usuario. pointsDest = self.selectorWidget.getPointsDest() # Los puntos a los que va la proyeccion. width = int(self.selectorWidget.getWidthDest()) # Ancho bounding box destino. height = int(self.selectorWidget.getHeightDest()) # Alto bounding box destino. #Imagen proyectada en cv y en qt. cv_dest = wi.warpImage(self.cv_img, points, pointsDest, width, height) qimage_proyectada = adaptrImg.OpenCVImageToQImage(cv_dest) #Crea imagen de la forma destino con blanco adentro y negro afuera. #Esta imagen la vamos a usar para borrar lo que no queremos de la proyectada. #Es como un crop. qimage_resta = self.selectorWidget.shapeDest.getImage() #A la proyectada le sacamos lo que no queremos. #Por ahora pasamos las imagenes en el wrapper proy = ImagenQImage() proy.from_instance(qimage_proyectada) segm = ImagenQImage() segm.from_instance(qimage_resta) self.qimage_transformada = algoritmos.borrar(proy, segm).get_img() #Obtenemos la segmentada y el vector de regiones a partir de la resta que hicimos antes. #Por ahora pasamos las imagenes en el wrapper trans = ImagenQImage() trans.from_instance(self.qimage_transformada) imagen_wrapper, self.vector_regiones, self.superficie_ocupada = algoritmos.calcular_regiones(trans) self.qimage_segmentada = imagen_wrapper.get_img() # Sacamos la imagen del wrapper. #Cargamos los widgets de la barra de costado con las imagenes obtenidas. self.initUIResult(self.qimage_transformada, self.qimage_segmentada) self.completar_similares(self.vector_regiones) def resetShape(self): self.selectorWidget.resetShape() self.hideUIResult() def completar_similares(self, regiones): #buscar en la bd a partir del vector generado para la imagen #actualizar el WidgetListaIndividuos con lo que traemos de la bd similares = self.db_man.similares(regiones) self.widget_listado = WidgetListaIndividuosRadiosScroleable(similares, self) self.resultLayout.addWidget(self.widget_listado) def individuos(self): """ Llamamos al widget que muestra todos los individuos. Este metodo se llama desde la barra de menu. """ self.widget_individuos = WidgetBuscarIndividuo() self.widget_individuos.show() #self.lista_individuos = WidgetListaIndividuosStandaloneScroleable(ManagerBase().all_individuos()) #self.lista_individuos.show() def add_photographer(self): """ Muestra el widget a usar para agregar un Fotografo """ self.add_photographer_widget = WidgetAgregarFotografo() #self.add_photographer_widget.show() def capturas(self): """ Llamamos al widget que muesstra el formulario de busqueda, este meotodo se llama desde la barra de menu. """ self.search_widget = WidgetBuscarCaptura() self.search_widget.show() def fotografos(self): """ Llamamos al widget que muesstra el formulario de busqueda, este meotodo se llama desde la barra de menu. """ self.search_widget = WidgetFotografos() self.search_widget.show() def zonas(self): """ Llamamos al widget que muesstra el formulario de busqueda, este meotodo se llama desde la barra de menu. """ self.search_widget = WidgetZonas() self.search_widget.show() def createActions(self): self.openAct = QtGui.QAction("Abrir Imagen", self, shortcut="Ctrl+A", enabled=True, triggered=self.open) self.exitAct = QtGui.QAction("Salir", self, shortcut="Ctrl+Q", triggered=self.close) self.zoomOutAct = QtGui.QAction("Zoom -", self, shortcut="Ctrl+-", enabled=True, triggered=self.selectorWidget.zoomOut) self.zoomInAct = QtGui.QAction("Zoom +", self, shortcut="Ctrl++", enabled=True, triggered=self.selectorWidget.zoomIn) self.resetSizeAct = QtGui.QAction("Original", self, shortcut="Ctrl+O", enabled=True, triggered=self.selectorWidget.resetSizeImage) self.rotateAct = QtGui.QAction("&Rotar Imagen", self, shortcut="Ctrl+R", enabled=True, triggered=self.selectorWidget.rotateImage) self.transformAct = QtGui.QAction("&Transformar", self, shortcut="Ctrl+T", enabled=True, triggered=self.transform) self.resetShapeAct = QtGui.QAction("&Resetear", self, shortcut="Ctrl+E", enabled=True, triggered=self.resetShape) #self.add_photographer_act = QtGui.QAction("Agregar &fotografo", self, shortcut="Ctrl+F", enabled=True, triggered=self.add_photographer) self.individuos_act = QtGui.QAction("Individuos", self, triggered=self.individuos) self.capturas_act = QtGui.QAction("Capturas", self, enabled=True, triggered=self.capturas) self.fotografos_act = QtGui.QAction("Fotografos", self, enabled=True, triggered=self.fotografos) self.zonas_act = QtGui.QAction("Zonas", self, enabled=True, triggered=self.zonas) def createMenus(self): self.fileMenu = QtGui.QMenu("&Archivo", self) self.fileMenu.addAction(self.openAct) self.fileMenu.addSeparator() self.fileMenu.addAction(self.exitAct) self.datosMenu = QtGui.QMenu("&Datos", self) self.datosMenu.addAction(self.individuos_act) self.datosMenu.addAction(self.capturas_act) self.datosMenu.addAction(self.fotografos_act) self.datosMenu.addAction(self.zonas_act) self.viewMenu = QtGui.QMenu("&Vista", self) self.viewMenu.addAction(self.zoomInAct) self.viewMenu.addAction(self.zoomOutAct) self.viewMenu.addAction(self.resetSizeAct) self.viewMenu.addAction(self.rotateAct) self.transformMenu = QtGui.QMenu("&Forma", self) self.transformMenu.addAction(self.transformAct) self.transformMenu.addAction(self.resetShapeAct) self.menuBar().addMenu(self.fileMenu) self.menuBar().addMenu(self.datosMenu) self.menuBar().addMenu(self.viewMenu) self.menuBar().addMenu(self.transformMenu) # def saveIndividuo(self, attr): # self.db_man.crear_individuo(self.q_img, self.qimage_transformada, self.qimage_segmentada, self.vector_regiones, attr) # def agregarCaptura(self, id_individuo, attr): # self.db_man.crear_captura(id_individuo, self.q_img, self.qimage_transformada, self.qimage_segmentada, self.vector_regiones, attr) def getPoints(self): return self.selectorWidget.getPoints() def getAngles(self): return self.selectorWidget.getAngles() def getLarges(self): return self.selectorWidget.getLarges()
def __init__(self, parent, id_individuo, ident): super(WidgetIndividuoConCapturas, self).__init__(parent, ident) self.id_individuo = id_individuo individuo = ManagerBase().get_individuo(id_individuo) self.setLayout(self.iniciar_ui(individuo)) self.show()
class WindowSapito(QtGui.QMainWindow): def __init__(self, imagen_inicial=None): super(WindowSapito, self).__init__() self.db_man = ManagerBase() self.initUI() #Para debugear, recibimos una imagen inicial, en vez de tener que abrirla desde la gui. if imagen_inicial is not None: self.loadImage(imagen_inicial) def initUI(self): #self.buttonShape = QtGui.QPushButton() #self.buttonShape.setIcon(QtGui.QIcon("sapito.png")) self.iniciadaUIResult = False self.iRadioChecked = -1 self.filename = None self.filename_path = None self.mainLayout = QtGui.QHBoxLayout() selectorLayout = QtGui.QVBoxLayout() self.mainLayout.addLayout(selectorLayout) self.selectorWidget = SelectorWidget() selectorLayout.addWidget(self.selectorWidget) centralWidget = QtGui.QWidget() centralWidget.setLayout(self.mainLayout) self.setCentralWidget(centralWidget) self.createActions() self.createMenus() #Este widget muestra la imagen proyectada y segmentada. self.imageResult = QtGui.QLabel() #self.imageResult.resize(300, 300) self.imageResult.resize(100, 100) #Este widget muestra la imagen proyectada. self.imageTransform = QtGui.QLabel() #self.imageTransform.resize(300, 300) self.imageTransform.resize(100, 100) self.showMaximized() def initUIResult(self, qimage_transformada, qimage_segmentada): if (self.iniciadaUIResult): self.hideUIResult() self.imageTransform.setPixmap( QtGui.QPixmap.fromImage(qimage_transformada.scaled(150, 150))) self.imageResult.setPixmap( QtGui.QPixmap.fromImage(qimage_segmentada.scaled(150, 150))) self.resultLayout = QtGui.QVBoxLayout() self.imageResultLayout = QtGui.QHBoxLayout() self.resultLayout.addLayout(self.imageResultLayout) self.widget_botones = WidgetBotonesAgregarCaptura(self) self.resultLayout.addWidget(self.widget_botones) self.mainLayout.addLayout(self.resultLayout) self.imageResultLayout.addWidget(self.imageTransform) self.imageResultLayout.addWidget(self.imageResult) self.imageTransform.setVisible(True) self.imageResult.setVisible(True) self.iniciadaUIResult = True def hideUIResult(self): resultLayout = self.mainLayout.takeAt(1) if resultLayout: resultLayout.deleteLater() image1 = self.imageResultLayout.takeAt(1) image2 = self.imageResultLayout.takeAt(0) image1.widget().setVisible(False) image2.widget().setVisible(False) self.widget_listado.deleteLater() self.widget_botones.deleteLater() self.iniciadaUIResult = False self.selectorWidget.resetShape() def loadImage(self, filename): self.filename = filename self.cv_img = cv.imread(self.filename) # Abrimos la imagen con opencv self.q_img = QtGui.QImage(self.filename) # Abrimos la imagen con qt if not (self.cv_img.any() and self.cv_img.size): QtGui.QMessageBox.information( self, "Image Viewer", "Error al cargar la imagen %s." % filename) else: if (self.filename != None): self.selectorWidget.reset() if (self.iniciadaUIResult): self.hideUIResult() self.selectorWidget.addImage(self.q_img) self.setWindowTitle(self.filename) self.filename_nopath = self.filename.split("/")[-1] self.filename_path = self.filename[:-len(self.filename_nopath) - 1] self.verificar_nombre_imagen(self.filename_nopath) def verificar_nombre_imagen(self, nombre_imagen): db_man = ManagerBase() capturas = db_man.get_captura_por_nombre_imagen(nombre_imagen) if capturas.count() > 0: self.widget = WidgetArchivoConMismoNombre(self, nombre_imagen, capturas) #self.hide() self.widget.show() #self.widget.activateWindow() def open(self): path = QtCore.QDir.currentPath( ) if self.filename_path == None else QtCore.QDir.absolutePath( QtCore.QDir(self.filename_path)) filename, _ = QtGui.QFileDialog.getOpenFileName( self, "Open File", path) if filename: self.loadImage(filename) def transform(self): """ Aplicamos la transformacion a la region seleccionada y llenamos la lista de similares. """ points = self.selectorWidget.getPoints( ) # Los puntos que marco el usuario. pointsDest = self.selectorWidget.getPointsDest( ) # Los puntos a los que va la proyeccion. width = int( self.selectorWidget.getWidthDest()) # Ancho bounding box destino. height = int( self.selectorWidget.getHeightDest()) # Alto bounding box destino. #Imagen proyectada en cv y en qt. cv_dest = wi.warpImage(self.cv_img, points, pointsDest, width, height) qimage_proyectada = adaptrImg.OpenCVImageToQImage(cv_dest) #Crea imagen de la forma destino con blanco adentro y negro afuera. #Esta imagen la vamos a usar para borrar lo que no queremos de la proyectada. #Es como un crop. qimage_resta = self.selectorWidget.shapeDest.getImage() #A la proyectada le sacamos lo que no queremos. #Por ahora pasamos las imagenes en el wrapper proy = ImagenQImage() proy.from_instance(qimage_proyectada) segm = ImagenQImage() segm.from_instance(qimage_resta) self.qimage_transformada = algoritmos.borrar(proy, segm).get_img() #Obtenemos la segmentada y el vector de regiones a partir de la resta que hicimos antes. #Por ahora pasamos las imagenes en el wrapper trans = ImagenQImage() trans.from_instance(self.qimage_transformada) imagen_wrapper, self.vector_regiones, self.superficie_ocupada = algoritmos.calcular_regiones( trans) self.qimage_segmentada = imagen_wrapper.get_img( ) # Sacamos la imagen del wrapper. #Cargamos los widgets de la barra de costado con las imagenes obtenidas. self.initUIResult(self.qimage_transformada, self.qimage_segmentada) self.completar_similares(self.vector_regiones) def resetShape(self): self.selectorWidget.resetShape() self.hideUIResult() def completar_similares(self, regiones): #buscar en la bd a partir del vector generado para la imagen #actualizar el WidgetListaIndividuos con lo que traemos de la bd similares = self.db_man.similares(regiones) self.widget_listado = WidgetListaIndividuosRadiosScroleable( similares, self) self.resultLayout.addWidget(self.widget_listado) def individuos(self): """ Llamamos al widget que muestra todos los individuos. Este metodo se llama desde la barra de menu. """ self.widget_individuos = WidgetBuscarIndividuo() self.widget_individuos.show() #self.lista_individuos = WidgetListaIndividuosStandaloneScroleable(ManagerBase().all_individuos()) #self.lista_individuos.show() def add_photographer(self): """ Muestra el widget a usar para agregar un Fotografo """ self.add_photographer_widget = WidgetAgregarFotografo() #self.add_photographer_widget.show() def capturas(self): """ Llamamos al widget que muesstra el formulario de busqueda, este meotodo se llama desde la barra de menu. """ self.search_widget = WidgetBuscarCaptura() self.search_widget.show() def fotografos(self): """ Llamamos al widget que muesstra el formulario de busqueda, este meotodo se llama desde la barra de menu. """ self.search_widget = WidgetFotografos() self.search_widget.show() def zonas(self): """ Llamamos al widget que muesstra el formulario de busqueda, este meotodo se llama desde la barra de menu. """ self.search_widget = WidgetZonas() self.search_widget.show() def createActions(self): self.openAct = QtGui.QAction("Abrir Imagen", self, shortcut="Ctrl+A", enabled=True, triggered=self.open) self.exitAct = QtGui.QAction("Salir", self, shortcut="Ctrl+Q", triggered=self.close) self.zoomOutAct = QtGui.QAction("Zoom -", self, shortcut="Ctrl+-", enabled=True, triggered=self.selectorWidget.zoomOut) self.zoomInAct = QtGui.QAction("Zoom +", self, shortcut="Ctrl++", enabled=True, triggered=self.selectorWidget.zoomIn) self.resetSizeAct = QtGui.QAction( "Original", self, shortcut="Ctrl+O", enabled=True, triggered=self.selectorWidget.resetSizeImage) self.rotateAct = QtGui.QAction( "&Rotar Imagen", self, shortcut="Ctrl+R", enabled=True, triggered=self.selectorWidget.rotateImage) self.transformAct = QtGui.QAction("&Transformar", self, shortcut="Ctrl+T", enabled=True, triggered=self.transform) self.resetShapeAct = QtGui.QAction("&Resetear", self, shortcut="Ctrl+E", enabled=True, triggered=self.resetShape) #self.add_photographer_act = QtGui.QAction("Agregar &fotografo", self, shortcut="Ctrl+F", enabled=True, triggered=self.add_photographer) self.individuos_act = QtGui.QAction("Individuos", self, triggered=self.individuos) self.capturas_act = QtGui.QAction("Capturas", self, enabled=True, triggered=self.capturas) self.fotografos_act = QtGui.QAction("Fotografos", self, enabled=True, triggered=self.fotografos) self.zonas_act = QtGui.QAction("Zonas", self, enabled=True, triggered=self.zonas) def createMenus(self): self.fileMenu = QtGui.QMenu("&Archivo", self) self.fileMenu.addAction(self.openAct) self.fileMenu.addSeparator() self.fileMenu.addAction(self.exitAct) self.datosMenu = QtGui.QMenu("&Datos", self) self.datosMenu.addAction(self.individuos_act) self.datosMenu.addAction(self.capturas_act) self.datosMenu.addAction(self.fotografos_act) self.datosMenu.addAction(self.zonas_act) self.viewMenu = QtGui.QMenu("&Vista", self) self.viewMenu.addAction(self.zoomInAct) self.viewMenu.addAction(self.zoomOutAct) self.viewMenu.addAction(self.resetSizeAct) self.viewMenu.addAction(self.rotateAct) self.transformMenu = QtGui.QMenu("&Forma", self) self.transformMenu.addAction(self.transformAct) self.transformMenu.addAction(self.resetShapeAct) self.menuBar().addMenu(self.fileMenu) self.menuBar().addMenu(self.datosMenu) self.menuBar().addMenu(self.viewMenu) self.menuBar().addMenu(self.transformMenu) # def saveIndividuo(self, attr): # self.db_man.crear_individuo(self.q_img, self.qimage_transformada, self.qimage_segmentada, self.vector_regiones, attr) # def agregarCaptura(self, id_individuo, attr): # self.db_man.crear_captura(id_individuo, self.q_img, self.qimage_transformada, self.qimage_segmentada, self.vector_regiones, attr) def getPoints(self): return self.selectorWidget.getPoints() def getAngles(self): return self.selectorWidget.getAngles() def getLarges(self): return self.selectorWidget.getLarges()
def refresh(self): self.table.set_data(ManagerBase().all_zonas())
def guardar(self): sexo = self.sexo_input.itemText(self.sexo_input.currentIndex()) observaciones = self.observaciones_input.toPlainText() if self.observaciones_input.toPlainText() != '' else None ManagerBase().modificar_individuo(self.id_input.text(), sexo, observaciones) self.close() self.parent.refresh()