python 人脸识别问题

今天做人脸识别遇到一个问题,就是不能退出摄像头:代码如下:


    def openCamera(self):
        cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
        if cap.isOpened():
            engine = pyttsx3.init()
            engine.say('开始识别')
            engine.runAndWait()
            self.rightLabel.show()
            cont = 0
            while cap.isOpened():
                retval, frame = cap.read()
                if not retval:
                    print('can not read frame')
                    break
                self.blinked_detect.detect(frame, name='Null', operation=2)

                frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

                qimg = QImage(frame.data, frame.shape[1], frame.shape[0], QImage.Format_RGB888)
                #                 图片显示到label
                self.rightLabel.setPixmap(QPixmap.fromImage(qimg))
                key = cv2.waitKey(7)
                print(key,"---------------")
                if key == 27:
                    break
        else:

【以下回答由 GPT 生成】

回答:

为了实现在Python中进行人脸识别并退出摄像头的功能,你需要对代码进行以下修改:

  1. 在代码中添加一个变量running,用于判断是否退出循环。
running = True
  1. while循环的条件修改为running
while cap.isOpened() and running:
  1. 在按下ESC键的条件判断中,将break修改为将running设置为False
if key == 27:
    running = False
  1. 在循环结束后,添加一行代码用于释放摄像头。
cap.release()

修改后的代码如下所示:

def openCamera(self):
    cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
    if cap.isOpened():
        engine = pyttsx3.init()
        engine.say('开始识别')
        engine.runAndWait()
        self.rightLabel.show()
        cont = 0
        running = True
        while cap.isOpened() and running:
            retval, frame = cap.read()
            if not retval:
                print('无法读取视频帧')
                break
            self.blinked_detect.detect(frame, name='Null', operation=2)

            frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

            qimg = QImage(frame.data, frame.shape[1], frame.shape[0], QImage.Format_RGB888)
            self.rightLabel.setPixmap(QPixmap.fromImage(qimg))
            key = cv2.waitKey(7)
            print(key, "---------------")
            if key == 27:
                running = False
    else:
        # 摄像头无法打开的处理代码
        pass

    cap.release()

这样修改之后,按下ESC键后,循环会结束,摄像头会被正确地释放,从而实现了退出摄像头的功能。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^