class MainWidget(QWidget): def __init__(self): super().__init__() self._setup_ui() self._init_Sim() self.current_show_name = '' self.current_show_image_path = '' self.add_person_btn.clicked.connect(self._clilked_add_persion_btn_slot) self.find_person_btn.clicked.connect( self._clilked_find_persion_btn_slot) def _setup_ui(self): self.lefttop = (100, 100) self.size = (1200, 600) self.setGeometry(*self.lefttop, *self.size) self.add_person_btn = QPushButton('add') self.rm_person_btn = QPushButton('rm') self.find_person_btn = QPushButton('find') self.person_id_lable = QLabel('person_id') self.person_image_lable = QLabel('person_image') self.person_info_list = QListWidget() self.vbox_1L = QVBoxLayout(self) self.vbox_2L_btns = QHBoxLayout() self.vbox_2L_labels = QHBoxLayout() self.vbox_3L_lists = QVBoxLayout() self.vbox_1L.addLayout(self.vbox_2L_btns) self.vbox_1L.addLayout(self.vbox_2L_labels) self.vbox_2L_labels.addLayout(self.vbox_3L_lists, stretch=3) self.vbox_2L_btns.addWidget(self.add_person_btn) self.vbox_2L_btns.addWidget(self.rm_person_btn) self.vbox_2L_btns.addWidget(self.find_person_btn) self.vbox_2L_labels.addWidget(self.person_image_lable, stretch=7) self.vbox_3L_lists.addWidget(self.person_id_lable) self.vbox_3L_lists.addWidget(self.person_info_list) self.show() def _init_Sim(self): self.sim = Similarity() self.shelf_db = shelve.open('image_db.dat') def __del__(self): self.shelf_db.close() def add_person(self, image_path: str): _, name = self.sim.add_person(image_path) self.shelf_db['name'] = image_path def rm_person(self, person_id: str): if person_id in self.shelf_db.keys(): del self.shelf_db[person_id] self.rm_persion(person_id) def find_person(self, image_path: str) -> Union[str, None]: name, score = self.sim.find_person(image_path) if score > 0.7: return name def update_image_ui(self): if self.current_show_image_path and self.current_show_name: self.person_id_lable.setText(self.current_show_name) img = QPixmap(self.current_show_image_path) if img.width() > 300: img = img.scaledToWidth(300) self.person_image_lable.setPixmap(img) else: self.person_id_lable.setText("none") self.person_image_lable.setPixmap(QPixmap()) def update_person_list_ui(self): # for k,v in self.shelf_db.items(): # item=QListWidgetItem(self.person_info_list) pass def _clilked_add_persion_btn_slot(self): files, _ = QFileDialog.getOpenFileNames( self, 'select files', filter='jpg(*.jpg);;png(*.png)') for file in files: is_unique, name = self.sim.add_person(file) if is_unique: self.shelf_db[name] = file def _clilked_find_persion_btn_slot(self): files, _ = QFileDialog.getOpenFileNames( self, 'select files', filter='jpg(*.jpg);;png(*.png)') if files: file = files[0] name, score = self.sim.find_person(file) if score > 0.7: self.current_show_name = name self.current_show_image_path = self.shelf_db[name] else: self.current_show_name = "" self.current_show_image_path = '' self.update_image_ui()