Face Classroom Sign-in Management System (Summary Five) Résoudre le problème du gel de l'écran

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

  1. 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
    
  2. 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
    
  3. 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))

  4. 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.

  5. L'effet est le suivant:

Troisièmement, créez une bibliothèque de visages

  1. Vous pouvez afficher votre propre bibliothèque de visages dans la liste des applications de reconnaissance faciale

  2. 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

  3. L'effet est le suivant:

Summary Six Portal: Face Classroom Sign-in Management System (Summary Six) pour ajouter et supprimer des utilisateurs

Je suppose que tu aimes

Origine blog.csdn.net/xwmrqqq/article/details/109249866
conseillé
Classement