Face Classroomサインイン管理システム(概要5)画面のフリーズの問題を解決する

1.画面フリーズの問題を解決します

要約4:フェイスクラスルームサインイン管理システム(要約4)リアルタイムデータ送信

画面にはまだフリーズの原因があります。信号はウィンドウによって生成されますが、信号はスレッド内のネットワーク要求検出機能に直接関連しています。これは、ウィンドウから直接呼び出されるのと同じであるため、フリーズが発生します。

解決策:スレッド内の画面データを読み取り、それをスロット関数として設定する関数を定義して、ウィンドウの信号がネットワーク要求に対して直接ではなく、データ転送のためにスレッドのスロット関数に関連付けられるようにします。ネットワーク要求はスレッド内にあります。実行機能

2、コアコード

  1. 読み取り画面データを受信するために、スレッドクラス(detectThread新しい関数get_base64を作成します

        def get_base64(self, base64_image):
            # 当窗口产生信号,调用该槽函数,将传递数据存放在线程变量中
            self.base64_img = base64_image
            self.condition = True
    
  2. スレッドクラス(detectThread)のrun関数書き直しネットワーク要求を送信するかどうかを周期的にリッスンします

        def run(self):
            while self.flag:
                if self.condition:
                    self.detect_data(self.base64_img)
                    self.condition = False
    
  3. 4番目の要約では、返される結果が間違っているという問題についても触れています。これは主に、送信された画像データのタイプが間違っているという問題です。送信されるデータタイプは、文字列タイプではなくバイトにする必要があります。信号とスロットを再定義します。

    detect_data_signal = pyqtSignal(bytes)
    

    生成された信号と渡されるデータもバイトタイプである必要があります

    self.detect_data_signal.emit(bytes(base64_image))

  4. サインインを閉じるとき(on_actionclose)、サインインを開くために使用されるタイマーon_actionopenオフにする必要があります。オフにしないと、プログラムがクラッシュして終了します。

        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()
    

    ヒント:タイマーが閉じているため、切断は省略できます。スロット機能に関連する情報は生成されませんが、[サインインの開始]をもう一度クリックすると、新しいタイマーオブジェクトである新しいタイマーオブジェクトが再定義されます。スロット機能を再度関連付けると、前のタイマーがpythonによって自動的に再利用されます。

  5. 効果は次のとおりです。

3つ目は、フェイスライブラリを作成する

  1. あなたは顔認識-アプリケーションリストであなた自身の顔ライブラリを見ることができます

  2. 実装コード

        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", "添加失败!")
    

    技術文書:ユーザーグループの作成

  3. 効果は次のとおりです。

サマリーシックスポータル:ユーザーを追加および削除するためのフェイスクラスルームサインイン管理システム(サマリーシックス)

おすすめ

転載: blog.csdn.net/xwmrqqq/article/details/109249866