Répertoire d'articles
1. Résolvez le problème du gel de l'écran
Résumé quatre: Système de gestion de la connexion en classe Face (Résumé quatre) Transmission de données en temps réel
L'écran a toujours la cause du gel : le signal est généré par la fenêtre, mais le signal est directement lié à la fonction de détection de demande réseau dans le thread, ce qui équivaut à être directement appelé par la fenêtre, donc cela provoque le gel
Solution : définissez une fonction pour lire les données d'écran dans le thread et définissez-la comme fonction d'emplacement, de sorte que le signal de la fenêtre soit associé à la fonction d'emplacement du thread pour le transfert de données, et non directement pour les requêtes réseau. Les requêtes réseau sont dans le thread la fonction run
Deux, le code de base
-
Créez une nouvelle fonction get_base64 dans la classe de thread ( detectThread ) pour recevoir les données d'écran de lecture
def get_base64(self, base64_image): # 当窗口产生信号,调用该槽函数,将传递数据存放在线程变量中 self.base64_img = base64_image self.condition = True
-
Réécrire la fonction d' exécution dans la classe de thread ( detectThread ) et écouter cycliquement s'il faut envoyer des requêtes réseau
def run(self): while self.flag: if self.condition: self.detect_data(self.base64_img) self.condition = False
-
Le quatrième résumé a également mentionné le problème du mauvais résultat de retour, qui est principalement le problème du mauvais type de données d'image transmises. Le type de données transmis doit être octets au lieu de type chaîne. Redéfinissez le signal et la tranche.
detect_data_signal = pyqtSignal(bytes)
Le signal généré et les données transmises doivent également être de type octets
self.detect_data_signal.emit (octets (image_base64))
-
Lors de la fermeture de la connexion ( on_actionclose ), le minuteur utilisé pour ouvrir la connexion ( on_actionopen ) doit être désactivé, sinon le programme se plantera et se fermera
def on_actionclose(self): # 关闭摄像头 self.camera_data.camera_close() # 关闭定时器 self.timeshow.stop() self.detection_time.stop() # 断开连接 self.timeshow.timeout.disconnect(self.show_camera) self.detection_time.timeout.disconnect(self.get_cameradata) self.detect_thread.transmit_data.disconnect(self.get_detectdata) self.detect_data_signal.disconnect(self.detect_thread.get_base64) # 关闭线程 self.detect_thread.flag = False self.detect_thread.quit() self.detect_thread.wait()
Conseil: la déconnexion peut être omise, car la minuterie est désactivée, aucune information n'est associée à la fonction d'emplacement; cependant, lorsque vous cliquez à nouveau sur "Démarrer la connexion", un nouvel objet de minuterie, un nouvel objet de minuterie, sera redéfini Réassociez la fonction slot, le timer précédent sera automatiquement recyclé par python.
-
L'effet est le suivant:
Troisièmement, créez une bibliothèque de visages
-
Vous pouvez afficher votre propre bibliothèque de visages dans la liste des applications de reconnaissance faciale
-
Code d'implémentation
def add_group(self): # 创建输入对话框 group, ret = QInputDialog.getText(self, "添加用户组", "输入id(由数字、字母、下划线组成)") request_url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/group/add" params = { "group_id": group } access_token = self.access_token request_url = request_url + "?access_token=" + access_token headers = { 'content-type': 'application/json'} response = requests.post(request_url, data=params, headers=headers) if response: message = response.json() if message['error_code'] == 0: QMessageBox.information(self, "addgroup", "添加成功!") else: QMessageBox.warning(self, "addgroup", "添加失败!")
Document technique: créer un groupe d'utilisateurs
-
L'effet est le suivant:
Summary Six Portal: Face Classroom Sign-in Management System (Summary Six) pour ajouter et supprimer des utilisateurs