PyQt5.QtGui.QImage实现图像的人脸识别与性别分类
发布时间:2024-01-13 06:30:46
PyQt5是一个用于Python编程语言的GUI工具包,它的Qt模块提供了一个用于创建图形用户界面的平台无关的应用程序框架。其中,PyQt5.QtGui.QImage是一个提供了图像处理功能的类,可以用于实现图像的人脸识别与性别分类。
以下是一个使用PyQt5.QtGui.QImage实现图像的人脸识别与性别分类的示例:
import cv2
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow
from PyQt5.QtCore import Qt
class FaceRecognitionWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Face Recognition")
self.setGeometry(100, 100, 800, 600)
self.image_label = QLabel(self)
self.image_label.setAlignment(Qt.AlignCenter)
self.setCentralWidget(self.image_label)
self.face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
self.gender_model = cv2.dnn.readNetFromCaffe('deploy_gender.prototxt', 'gender_net.caffemodel')
def classify_gender(self, image):
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = self.face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
faceROI = image[y:y+h, x:x+w]
blob = cv2.dnn.blobFromImage(faceROI, 1.0, (227, 227), (78.4263377603, 87.7689143744, 114.895847746), swapRB=False)
self.gender_model.setInput(blob)
gender_preds = self.gender_model.forward()
gender = "Male" if gender_preds[0][0] > gender_preds[0][1] else "Female"
cv2.rectangle(image, (x,y), (x+w,y+h), (0,255,0), 2)
cv2.putText(image, gender, (x,y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (36,255,12), 2)
qimage = QImage(image.data, image.shape[1], image.shape[0], QImage.Format_RGB888).rgbSwapped()
pixmap = QPixmap.fromImage(qimage)
self.image_label.setPixmap(pixmap)
def display_image(self, image_path):
image = cv2.imread(image_path)
self.classify_gender(image)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = FaceRecognitionWindow()
window.display_image("image.jpg")
window.show()
sys.exit(app.exec_())
以上代码中,我们首先创建了一个名为FaceRecognitionWindow的自定义窗口类,继承自QMainWindow。在该类中,我们创建了一个标签image_label并将其设置为窗口的中心窗口。image_label用于显示人脸识别与性别分类的图像。
在classify_gender方法中,我们首先从传入的图像中检测出人脸,并对每个人脸进行性别分类。通过OpenCV的CascadeClassifier类和已经训练好的人脸分类器文件进行人脸检测。接着,我们将人脸区域的图像转换为模型所需的输入格式,并通过已经训练好的性别分类模型进行性别分类。最后,在图像上绘制人脸区域的矩形和性别标签。
在display_image方法中,我们从给定的图像路径中读取图像,并调用classify_gender方法对图像进行人脸识别与性别分类。最后,我们将处理后的图像显示在窗口中。
当我们运行上述代码时,将会显示一个GUI窗口,窗口中会显示出给定图像的人脸区域,并标注出性别。
