示例#1
0
  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()
示例#2
0
 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)
示例#3
0
 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()
示例#4
0
 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()
示例#5
0
 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()
示例#6
0
 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()
示例#7
0
 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
示例#8
0
  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)
示例#9
0
 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
示例#10
0
 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()
示例#11
0
 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
示例#12
0
  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()
示例#13
0
 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)
示例#14
0
def main():
  app = QtGui.QApplication(sys.argv)
  #ex = WidgetIndividuo()
  from db import ManagerBase
  ex = WidgetListaIndividuosStandaloneScroleable(ManagerBase().all_individuos())
  ex.show()
  sys.exit(app.exec_())
示例#15
0
  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()
示例#16
0
 def refresh(self):
   individuo = ManagerBase().get_individuo(self.id_individuo)
   if individuo:
     self.table.set_data(individuo.capturas)
   else:
     self.parent.refresh()
     self.close()
示例#17
0
 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)
示例#18
0
 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)
示例#19
0
  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()
示例#20
0
  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()
示例#21
0
  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)
示例#22
0
  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)
示例#23
0
  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))
示例#24
0
  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()
示例#25
0
 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 ""))
示例#26
0
 def refresh(self):
   self.table.set_data(ManagerBase().all_fotografos())
示例#27
0
 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 ""))
示例#28
0
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()
示例#29
0
 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()
示例#30
0
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()
示例#31
0
 def refresh(self):
   self.table.set_data(ManagerBase().all_zonas())
示例#32
0
 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()