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

本文介绍如何在PyQt5界面中使用OpenCV和cv2库实现实时从电脑摄像头获取视频流,对图像进行人脸检测并镜像处理,以QLabel显示检测结果。
摘要由CSDN通过智能技术生成

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级联分类器进行人脸检测。如果你想要更精确的人脸识别(即识别特定的人),你可能需要使用深度学习模型,这通常会更复杂,并需要额外的库和模型文件。

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值