项目效果图
人脸识别.py
核心代码
import cv2
from csv import QUOTE_MINIMAL
from turtle import onclick
from PySide2 import QtWidgets, QtGui
from FaceRecognitionMain_ui import Ui_MainWindow
# 加载模型
fd_model_path = "face_recognizer_fast/yunet.onnx"
fr_model_path = "face_recognizer_fast/face_recognizer_fast.onnx"
address_image_1 = "address_image_1"
address_image_2 = "address_image_2"
class MyWidget(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.btn_add1.clicked.connect(self.on_clicked_add_1)
self.ui.btn_add2.clicked.connect(self.on_clicked_add_2)
self.ui.btn_distinguish_cos.clicked.connect(self.on_clicked_distinguish_cos)
self.ui.btn_distinguish_l2.clicked.connect(self.on_clicked_distinguish_l2)
def get_face_feature(address_image):
src = cv2.imread(address_image)
# print(src)
# 创建人脸检测对象 模型 配制 尺寸
faceDetector = cv2.FaceDetectorYN.create(fd_model_path, "", (src.shape[1], src.shape[0]))
faces = faceDetector.detect(src)
print(faces)
# 判断是否有人脸
if faces[1] is None:
print('------ 未发现人脸!')
exit(0)
faceRecognizer = cv2.FaceRecognizerSF.create(fr_model_path, "")
align_face = faceRecognizer.alignCrop(src, faces[1][0])
face_feature = faceRecognizer.feature(align_face)
return face_feature
def on_clicked_distinguish_cos(self):
print("第一张图片的地址:",address_image_1)
print("第二张图片的地址:",address_image_2)
faceRecognizer = cv2.FaceRecognizerSF.create(fr_model_path, "")
face_feature_1 = MyWidget.get_face_feature(address_image_1)
face_feature_2 = MyWidget.get_face_feature(address_image_2)
# 人脸匹配
score = faceRecognizer.match(face_feature_1, face_feature_2)
print("score = ", score)
self.ui.label_4.setText(str(score))
if score > 0.363:
self.ui.label_result.setText("是同一个人!")
else:
self.ui.label_result.setText("不是同一个人!")
def on_clicked_distinguish_l2(self):
faceRecognizer = cv2.FaceRecognizerSF.create(fr_model_path, "")
face_feature_1 = MyWidget.get_face_feature(address_image_1)
face_feature_2 = MyWidget.get_face_feature(address_image_2)
# L2匹配方式
score = faceRecognizer.match(face_feature_1, face_feature_2,cv2.FaceRecognizerSF_FR_NORM_L2)
print("score = ", score)
self.ui.label_4.setText(str(score))
if score < 1.128:
self.ui.label_result.setText("是同一个人!")
else:
self.ui.label_result.setText("不是同一个人!")
def on_clicked_add_1(self):
filename = QtWidgets.QFileDialog.getOpenFileName(self)
print("filename = ", filename)
pix = QtGui.QPixmap()
pix.load(filename[0])
global address_image_1
address_image_1 = filename[0]
self.ui.label_image_1.setPixmap(pix)
def on_clicked_add_2(self):
filename = QtWidgets.QFileDialog.getOpenFileName(self)
print("filename = ", filename)
pix = QtGui.QPixmap()
pix.load(filename[0])
global address_image_2
address_image_2 = filename[0]
self.ui.label_image_2.setPixmap(pix)
def main():
app = QtWidgets.QApplication([])
w = MyWidget()
w.show()
app.exec_()
if __name__ == "__main__":
main()
FaceRecognitionMain_ui.py
== 这个文件是你通过Python自带的QT设计工具设计了一个后缀为.ui的文件后,通过编译自动生成的文件 ==
# -*- coding: utf-8 -*-
################################################################################
## Form generated from reading UI file 'FaceRecognitionMain.ui'
##
## Created by: Qt User Interface Compiler version 5.15.2
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
self.label_image_1 = QLabel(self.centralwidget)
self.label_image_1.setObjectName(u"label_image_1")
self.label_image_1.setGeometry(QRect(70, 50, 250, 250))
self.label_image_1.setFrameShape(QFrame.Box)
self.label_image_2 = QLabel(self.centralwidget)
self.label_image_2.setObjectName(u"label_image_2")
self.label_image_2.setGeometry(QRect(510, 50, 250, 250))
self.label_image_2.setFrameShape(QFrame.Box)
self.btn_add1 = QPushButton(self.centralwidget)
self.btn_add1.setObjectName(u"btn_add1")
self.btn_add1.setGeometry(QRect(130, 330, 121, 51))
font = QFont()
font.setPointSize(15)
self.btn_add1.setFont(font)
self.btn_add2 = QPushButton(self.centralwidget)
self.btn_add2.setObjectName(u"btn_add2")
self.btn_add2.setGeometry(QRect(580, 330, 131, 51))
self.btn_add2.setFont(font)
self.label_3 = QLabel(self.centralwidget)
self.label_3.setObjectName(u"label_3")
self.label_3.setGeometry(QRect(90, 440, 90, 40))
self.label_3.setFont(font)
self.btn_distinguish_cos = QPushButton(self.centralwidget)
self.btn_distinguish_cos.setObjectName(u"btn_distinguish_cos")
self.btn_distinguish_cos.setGeometry(QRect(350, 260, 121, 51))
self.btn_distinguish_cos.setFont(font)
self.label_result = QLabel(self.centralwidget)
self.label_result.setObjectName(u"label_result")
self.label_result.setGeometry(QRect(280, 490, 221, 51))
self.label_result.setFont(font)
self.label_result.setFrameShape(QFrame.NoFrame)
self.label_4 = QLabel(self.centralwidget)
self.label_4.setObjectName(u"label_4")
self.label_4.setGeometry(QRect(180, 440, 531, 40))
self.label_4.setFont(font)
self.btn_distinguish_l2 = QPushButton(self.centralwidget)
self.btn_distinguish_l2.setObjectName(u"btn_distinguish_l2")
self.btn_distinguish_l2.setGeometry(QRect(350, 330, 121, 51))
self.btn_distinguish_l2.setFont(font)
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QStatusBar(MainWindow)
self.statusbar.setObjectName(u"statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QMetaObject.connectSlotsByName(MainWindow)
# setupUi
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
self.label_image_1.setText("")
self.label_image_2.setText("")
self.btn_add1.setText(QCoreApplication.translate("MainWindow", u"\u6dfb\u52a0\u56fe\u7247", None))
self.btn_add2.setText(QCoreApplication.translate("MainWindow", u"\u6dfb\u52a0\u56fe\u7247", None))
self.label_3.setText(QCoreApplication.translate("MainWindow", u"\u76f8\u4f3c\u5ea6:", None))
self.btn_distinguish_cos.setText(QCoreApplication.translate("MainWindow", u"\u4f59\u5f26\u5339\u914d", None))
self.label_result.setText("")
self.label_4.setText("")
self.btn_distinguish_l2.setText(QCoreApplication.translate("MainWindow", u"L2\u5339\u914d", None))
# retranslateUi