欢迎访问宙启技术站
智能推送

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窗口,窗口中会显示出给定图像的人脸区域,并标注出性别。