Python的cv2调用电脑摄像头进行人脸识别

1.调用电脑摄像头拍摄,进行人脸识别。检测到人脸并且框选显示。

 2.pyqt5界面实时显示, 实时更新画面。

3.代码展示

要在PyQt5界面中显示从电脑摄像头捕获的实时人脸识别视频,并且需要对图像进行镜像处理,你可以使用cv2来捕获视频并处理图像,然后使用PyQt5来显示结果。镜像处理可以通过OpenCV的flip函数来实现。update_frame方法首先读取摄像头的帧,然后使用cv2.flip函数将图像在水平方向上翻转(参数为1),实现镜像效果。接着,它继续执行人脸检测,并绘制矩形框。最后,它将OpenCV图像转换为Qt可以显示的格式,并将其显示在QLabel上。

确保你的环境中已经安装了opencv-pythonPyQt5库。

import sys
import cv2
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget
from PyQt5.QtCore import QTimer, Qt
from PyQt5.QtGui import QPixmap, QImage


class FaceDetectionWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.initUI()
        self.cap = cv2.VideoCapture(0)  # 打开默认摄像头
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.update_frame)
        self.timer.start(30)  # 每30毫秒更新一次帧

    def initUI(self):
        self.setWindowTitle('实时人脸识别(镜像显示)')
        self.setGeometry(100, 100, 640, 480)

        # 创建布局和标签来显示视频帧
        layout = QVBoxLayout()
        self.label = QLabel()
        layout.addWidget(self.label)

        # 设置窗口中央部件
        central_widget = QWidget()
        central_widget.setLayout(layout)
        self.setCentralWidget(central_widget)

    def update_frame(self):
        ret, frame = self.cap.read()
        if ret:
            # 翻转图像实现镜像效果
            frame = cv2.flip(frame, 1)

            # 转换颜色空间,并进行人脸检测
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
            face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
            faces = face_cascade.detectMultiScale(gray, 1.3, 5)

            # 在图像上绘制矩形框以突出显示检测到的人脸
            for (x, y, w, h) in faces:
                cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)

                # 将OpenCV图像转换为Qt可以显示的格式
            rgb_image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
            h, w, ch = rgb_image.shape
            bytes_per_line = ch * w
            qt_img = QImage(rgb_image.data, w, h, bytes_per_line, QImage.Format_RGB888)
            pixmap = QPixmap.fromImage(qt_img)
            self.label.setPixmap(pixmap.scaled(self.label.size(), Qt.KeepAspectRatio))

    def closeEvent(self, event):
        self.cap.release()
        event.accept()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = FaceDetectionWindow()
    ex.show()
    sys.exit(app.exec_())
    
    
    
    

这段代码创建了一个FaceDetectionWindow类,该类继承自QMainWindow。在initUI方法中,我们设置了窗口的基本属性和布局。update_frame方法被定时器调用,用于从摄像头捕获帧,进行人脸检测,并将帧转换为Qt可以显示的格式。closeEvent方法确保在窗口关闭时释放摄像头资源。

请注意,这个示例使用了OpenCV的预训练Haar级联分类器进行人脸检测。如果你想要更精确的人脸识别(即识别特定的人),你可能需要使用深度学习模型,这通常会更复杂,并需要额外的库和模型文件。

 

 

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要使用 Python 进行摄像头人脸识别,你可以使用 OpenCV 和 face_recognition 库。 首先,你需要安装这两个库。你可以使用 pip 安装它们: ``` pip install opencv-python pip install face_recognition ``` 接下来,你需要编写 Python 代码来实现摄像头人脸识别。以下是一个简单的示例代码: ```python import cv2 import face_recognition # 加载已知人脸照片 known_image = face_recognition.load_image_file("known_face.jpg") known_encoding = face_recognition.face_encodings(known_image)[0] # 初始化摄像头 video_capture = cv2.VideoCapture(0) while True: # 读取摄像头画面 ret, frame = video_capture.read() # 检测人脸 face_locations = face_recognition.face_locations(frame) face_encodings = face_recognition.face_encodings(frame, face_locations) # 遍历每张识别到的人脸 for face_encoding, face_location in zip(face_encodings, face_locations): # 比较人脸照片和摄像头画面中的人脸 match = face_recognition.compare_faces([known_encoding], face_encoding) if match[0]: # 识别到已知人脸 top, right, bottom, left = face_location cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2) # 显示摄像头画面 cv2.imshow('Video', frame) # 按下 q 键退出程序 if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放摄像头并关闭窗口 video_capture.release() cv2.destroyAllWindows() ``` 在上面的代码中,我们首先加载了一个已知人脸的照片,并从中提取了人脸编码。然后,我们初始化了摄像头,从中读取每一帧画面,并使用 face_recognition 库检测人脸,并提取人脸编码。接下来,我们将人脸编码与已知人脸的编码进行比较,并在识别到已知人脸时,在摄像头画面中框出人脸。最后,我们显示摄像头画面,并等待用户按下 q 键退出程序。 你可以根据自己的需求修改代码,并使用更高级的算法来进行人脸识别

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值