python代码 用pyqt5实现动态人脸识别操作界面
时间: 2023-11-06 11:07:43 浏览: 248
以下是一个简单的基于PyQt5和OpenCV的动态人脸识别操作界面的代码示例:
```python
import sys
import cv2
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import QApplication, QDialog, QLabel, QVBoxLayout
class VideoPlayer(QDialog):
def __init__(self):
super().__init__()
# 创建标签用于显示图像
self.image_label = QLabel(self)
self.image_label.setAlignment(Qt.AlignCenter)
# 创建垂直布局并将标签添加到其中
vbox_layout = QVBoxLayout()
vbox_layout.addWidget(self.image_label)
# 设置布局并设置窗口标题
self.setLayout(vbox_layout)
self.setWindowTitle("Dynamic Face Recognition")
# 创建定时器并将其连接到更新方法
self.timer = QTimer(self)
self.timer.timeout.connect(self.update_frame)
# 加载人脸识别模型
self.face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 打开摄像头
self.capture = cv2.VideoCapture(0)
# 启动定时器以开始捕获帧
self.timer.start(5)
def update_frame(self):
# 从摄像头中捕获帧
ret, frame = self.capture.read()
# 如果捕获失败,则退出
if not ret:
return
# 将帧转换为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces = self.face_cascade.detectMultiScale(gray, 1.3, 5)
# 在图像上绘制矩形框以显示人脸
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
# 将帧转换为Qt图像并在标签上显示
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
image = QImage(frame, frame.shape[1], frame.shape[0], QImage.Format_RGB888)
self.image_label.setPixmap(QPixmap.fromImage(image))
def closeEvent(self, event):
# 停止定时器并释放摄像头
self.timer.stop()
self.capture.release()
if __name__ == '__main__':
app = QApplication(sys.argv)
player = VideoPlayer()
player.show()
sys.exit(app.exec_())
```
在这个示例中,我们创建了一个名为`VideoPlayer`的类,该类继承自`QDialog`并包含一个标签`image_label`,用于显示从摄像头捕获的图像。我们还创建了一个定时器来定期更新图像,并使用OpenCV的人脸识别模型来检测图像中是否有人脸。
在`update_frame`方法中,我们首先从摄像头中捕获帧,然后将其转换为灰度图像。接下来,我们使用人脸识别模型来检测人脸,并在图像上绘制矩形框以显示其位置。最后,我们将帧转换为Qt图像并在标签上显示。
在`closeEvent`方法中,我们停止定时器并释放摄像头以确保正确关闭应用程序。
要运行此代码,您需要安装PyQt5和OpenCV,并将人脸识别模型文件`haarcascade_frontalface_default.xml`放在与代码文件相同的目录中。然后,您可以运行这个脚本并在窗口中看到从摄像头捕获的实时图像,其中人脸上会有绿色框。
阅读全文