1.调用电脑摄像头拍摄,进行人脸识别。检测到人脸并且框选显示。
2.pyqt5界面实时显示, 实时更新画面。
3.代码展示
要在PyQt5界面中显示从电脑摄像头捕获的实时人脸识别视频,并且需要对图像进行镜像处理,你可以使用cv2
来捕获视频并处理图像,然后使用PyQt5
来显示结果。镜像处理可以通过OpenCV的flip
函数来实现。update_frame
方法首先读取摄像头的帧,然后使用cv2.flip
函数将图像在水平方向上翻转(参数为1),实现镜像效果。接着,它继续执行人脸检测,并绘制矩形框。最后,它将OpenCV图像转换为Qt可以显示的格式,并将其显示在QLabel上。
确保你的环境中已经安装了opencv-python
和PyQt5
库。
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级联分类器进行人脸检测。如果你想要更精确的人脸识别(即识别特定的人),你可能需要使用深度学习模型,这通常会更复杂,并需要额外的库和模型文件。