Esempio n. 1
0
class Window(QtGui.QMainWindow):
    def __init__(self):
        super(Window, self).__init__()
        self.setGeometry(50, 50, 900, 590)
        self.setWindowTitle("CUBS FaceDemo Enroller")
        self.home()

    def home(self):
        self.imgindex = 0
        self.selectedname = ""
        self.imglen = 0
        self.delbtn = QtGui.QPushButton("Delete Entry", self)
        self.delbtn.resize(100, 30)
        self.delbtn.move(200, 125)
        # self.delbtn.move(0, 0)

        self.rightname = QLabel("", self)
        self.rightname.move(350, 5)
        self.rightname.resize(600, 20)
        self.rightname.setAlignment(Qt.AlignCenter)

        self.btn = QtGui.QPushButton("Enroll", self)
        # self.btn.clicked.connect()
        self.btn.resize(80, 30)
        self.btn.move(10, 125)

        self.nextbtn = QtGui.QPushButton("Next", self)
        self.delimagebtn = QtGui.QPushButton("Delete Image", self)
        self.previousbtn = QtGui.QPushButton("Previous", self)
        self.nextbtn.move(750, 530)
        self.delimagebtn.move(550, 530)
        self.previousbtn.move(450, 530)

        self.firstnametext = QLabel(self)
        self.firstnametext.setText("First Name:")
        self.firstnametext.move(10, 10)

        self.firstnamefield = QLineEdit(self)
        self.firstnamefield.setObjectName("First Name")
        self.firstnamefield.resize(300, 30)
        self.firstnamefield.move(100, 10)

        lastnametext = QLabel(self)
        lastnametext.setText("Last Name:")
        lastnametext.move(10, 50)

        self.lastnamefield = QLineEdit(self)
        self.lastnamefield.setObjectName("First Name")
        self.lastnamefield.resize(300, 30)
        self.lastnamefield.move(100, 50)

        self.dirbtn = QtGui.QPushButton("Choose Directory", self)
        self.dirbtn.resize(140, 30)
        self.dirbtn.move(10, 90)

        self.dirfield = QLineEdit(self)
        self.dirfield.setObjectName("Directory")
        self.dirfield.resize(250, 30)
        self.dirfield.move(150, 90)

        self.status = QLabel(self)
        self.status.move(10, 563)
        self.status.resize(400, 20)
        self.status.setText("Ready")

        self.rebuild = QtGui.QPushButton("Add Image", self)
        self.rebuild.move(650, 530)
        self.rebuild.resize(100, 30)

        self.listsize = QtGui.QLabel(self)
        self.listsize.setText(" Persons Enrolled")
        self.listsize.resize(200, 20)
        self.listsize.move(10, 160)

        self.list = QListWidget(self)
        self.list.resize(389, 380)
        self.list.move(10, 180)
        self.stat("Pulling list")
        refresh_list_elements(self.list, self.listsize)
        self.stat("Ready")

        self.image = QLabel(self)
        self.image.resize(490, 490)
        self.image.move(405, 30)

        self.list.doubleClicked.connect(self.on_double_click)
        self.connect(self, SIGNAL('triggered()'), self.closeEvent)
        self.connect(self.rebuild, SIGNAL("clicked()"), self.add_image)
        self.connect(self.nextbtn, SIGNAL("clicked()"), self.next_image)
        self.connect(self.previousbtn, SIGNAL("clicked()"),
                     self.previous_image)
        self.connect(self.delimagebtn, SIGNAL("clicked()"), self.delete_image)
        self.connect(self.dirbtn, SIGNAL("clicked()"), self.opendir)
        self.connect(self.delbtn, SIGNAL("clicked()"), self.button_delete)
        self.connect(self.btn, SIGNAL("clicked()"), self.button_click)
        self.show()

    def closeEvent(self, event):
        self.stat("Saving Changes")
        save()
        print "Changes saved"
        print "Rebuilding Vectors"
        self.rebuild_vector()
        self.destroy()

    def rebuild_vector(self):
        # feature_build.generate_vectors()
        pass

    def stat(self, stat):
        self.status.setText(stat)

    def add_image(self):
        self.dialog = QFileDialog(self)
        directory = self.dialog.getOpenFileName(self, 'Select Directory')
        if directory:
            self.dirfield.setText(directory)
        img_directory = str(self.dirfield.text())
        picarray = test_create_image(img_directory, True)
        # enroll_images.images_to_array(img_directory, True)
        dict_personinfo[self.selectedname].append(picarray)
        refresh_list_elements(self.list, self.listsize)
        self.init_images()
        self.dirfield.setText('')

    def next_image(self):
        check = self.imgindex + 1
        if (check >= self.imglen):
            self.display_image(0)
            self.imgindex = 0
        else:
            self.display_image(check)
            self.imgindex += 1

    def previous_image(self):
        check = self.imgindex - 1
        if (check < 0):
            self.display_image(self.imglen - 1)
            self.imgindex = self.imglen - 1
        else:
            self.display_image(check)
            self.imgindex -= 1

    def delete_image(self):
        # dict_personinfo = obtain_info()
        dict_personinfo[self.selectedname].pop(self.imgindex)
        if (len(dict_personinfo[self.selectedname]) == 0):
            dict_personinfo.pop(self.selectedname, None)
            # with open('data/gui_dict.pickle', 'wb') as handle:
            #     cPickle.dump(dict_personinfo, handle)
            self.stat("Deleted " + self.selectedname)
            refresh_list_elements(self.list, self.listsize)
            self.image.clear()
            self.rightname.setText("")
        else:
            # with open('data/gui_dict.pickle', 'wb') as handle:
            #     cPickle.dump(dict_personinfo, handle)
            self.stat("Deleted image for " + self.selectedname)
            refresh_list_elements(self.list, self.listsize)
            self.init_images()

    def display_image(self, index=0):
        img = self.get_images()
        self.imglen = len(img)
        img = img[index]
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        height, width, channel = img.shape
        bytesPerLine = 3 * width
        qimg = QImage(img.data, width, height, bytesPerLine,
                      QImage.Format_RGB888)
        pixmap = QtGui.QPixmap(qimg)
        pixmap = pixmap.scaled(self.image.size())
        self.image.setPixmap(pixmap)

    def get_images(self):
        # dict_personinfo = obtain_info()
        arr_images = []
        for i in range(len(dict_personinfo[self.selectedname])):
            frame = dict_personinfo[self.selectedname][i][0]
            rectangle = dict_personinfo[self.selectedname][i][1]
            img = np.array(Image.fromarray(frame))
            cv2.rectangle(img, (int(rectangle[0][0]), int(rectangle[0][3])),
                          (int(rectangle[0][2]), int(rectangle[0][1])),
                          (0, 255, 0), 40)
            cv2.circle(img, (int(rectangle[0][5]), int(rectangle[0][6])), 10,
                       (0, 255, 0), 40)
            cv2.circle(img, (int(rectangle[0][7]), int(rectangle[0][8])), 10,
                       (0, 255, 0), 40)
            cv2.circle(img, (int(rectangle[0][9]), int(rectangle[0][10])), 10,
                       (0, 255, 0), 40)
            cv2.circle(img, (int(rectangle[0][11]), int(rectangle[0][12])), 10,
                       (0, 255, 0), 40)
            cv2.circle(img, (int(rectangle[0][13]), int(rectangle[0][14])), 10,
                       (0, 255, 0), 40)

            print(rectangle)
            arr_images.append(img)
        self.imglen = len(arr_images)
        return arr_images

    def on_double_click(self):
        self.selectedname = str(self.list.currentItem().text())
        self.rightname.setText(self.selectedname)
        self.init_images()

    def init_images(self):
        self.imgindex = 0
        img = self.get_images()
        img = img[0]
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        height, width, channel = img.shape
        bytesPerLine = 3 * width
        qimg = QImage(img.data, width, height, bytesPerLine,
                      QImage.Format_RGB888)
        pixmap = QtGui.QPixmap(qimg)
        pixmap = pixmap.scaled(self.image.size())
        self.image.setPixmap(pixmap)

    def opendir(self):
        self.dialog = QFileDialog(self)
        directory = self.dialog.getExistingDirectory(self, 'Select Directory')
        if directory:
            self.dirfield.setText(directory)

    def button_delete(self):
        if (str(self.list.currentItem().text()) != None):
            # dict_personinfo = obtain_info()
            dict_personinfo.pop(str(self.list.currentItem().text()), None)
            # with open('data/gui_dict.pickle', 'wb') as handle:
            #     cPickle.dump(dict_personinfo, handle)
            self.stat("Deleted " + str(self.list.currentItem().text()))
            refresh_list_elements(self.list, self.listsize)
            self.image.clear()
            self.rightname.clear()
        else:
            pass

    def button_click(self):
        self.stat("Pulling list")
        # dict_personinfo = obtain_info()
        self.stat("Ready")

        name = ['', '']
        name[0] = str(self.firstnamefield.text())
        name[1] = str(self.lastnamefield.text())
        name[0] = name[0].replace(" ", "")
        name[1] = name[1].replace(" ", "")
        img_directory = str(self.dirfield.text())

        self.stat("Detecting Face")
        if img_directory == "" or len(name[0]) == 0:
            picarray = []
        else:
            picarray = test_create_image(
                img_directory, False)  # Just a testing filler for now
            # picarray = enroll_images.images_to_array(img_directory, False)

        # feature_build.generate_vectors()

        if len(picarray) != 0:
            dict_personinfo[name[0] + " " + name[1]] = {}
            dict_personinfo[name[0] + " " + name[1]] = picarray

            if img_directory == "" or len(name[0]) == 0:
                self.stat("Failed to add " + name[0] + " " + name[1])
            else:
                self.stat("Writing")
                # with open('data/gui_dict.pickle', 'wb') as handle:
                #     cPickle.dump(dict_personinfo, handle)
                self.stat("Added " + name[0] + " " + name[1] + " with " +
                          str(len(picarray)) + " images")
        else:
            self.stat("Failed to add " + name[0] + " " + name[1])
        # feature_build.generate_vectors()
        self.firstnamefield.setText('')
        self.lastnamefield.setText('')
        self.dirfield.setText('')
        # self.list.addItem(name[0] + " " + name[1])
        refresh_list_elements(self.list, self.listsize)
Esempio n. 2
0
# Create a button in the window
button = QPushButton('Add', w)
button.move(20, 60)

# Create a button in the window
button_dir = QPushButton('data', w)
button_dir.move(170, 60)

# Create a button in the window
listWidget = QListWidget(w)
tasks = latest_tasks().index.tolist()
for i in tasks:
    item = QListWidgetItem("%s" % i)
    listWidget.addItem(item)
listWidget.resize(240, 115)
listWidget.move(20, 100)


@pyqtSlot()
def on_click_dir():
    import subprocess
    subprocess.call("start " + app_path, shell=True)


@pyqtSlot()
def on_click_choice(curr):
    textbox.setText(curr.text())


# Create the actions