目标检测算法中训练人脸识别检测数据集用 dlib 库和 facenet 模型来进行人脸识别并使用 PyQt5建立构建基于深度学习卷积神经网络的人脸识别系统/小区门禁系统文章目录预实现功能1. 环境搭建安装依赖2. 数据准备3. 人脸录入4. 人脸识别5. 构建 GUI 应用程序以下文字及代码仅供同学参考。预实现功能支持人脸录入人脸识别人脸管理深度学习卷积网络使用dlib库自己facenet网络模型精简的界面本地数据存储人脸信息anaconda与pycharm带人脸管理功能构建一个人脸识别与管理系统用于小区门禁系统需要实现以下功能人脸录入用户可以录入新的人脸信息。人脸识别实时或通过图片进行人脸识别。人脸管理管理已录入的人脸信息包括删除、修改等操作。界面设计精简的界面支持本地数据存储。使用dlib库和facenet模型来进行人脸识别并使用PyQt5构建 GUI 界面。以下是详细的步骤和代码示例。1. 环境搭建安装依赖# 创建虚拟环境可选conda create-nface_recognitionpython3.8conda activate face_recognition# 安装依赖库pipinstalldlib opencv-python-headless numpy PyQt52. 数据准备创建一个文件夹来存储人脸数据mkdirdatasetcddatasetmkdirknown_faces unknown_faces3. 人脸录入编写一个脚本来录入人脸数据importcv2importosimportdlibfromimutilsimportface_utilsdefcapture_face(name):capcv2.VideoCapture(0)detectordlib.get_frontal_face_detector()count0whileTrue:ret,framecap.read()graycv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)facesdetector(gray)forfaceinfaces:x,y,w,hface.left(),face.top(),face.width(),face.height()cv2.rectangle(frame,(x,y),(xw,yh),(0,255,0),2)ifcount10:# Capture 10 imagescv2.imwrite(fdataset/known_faces/{name}_{count}.jpg,frame[y:yh,x:xw])count1cv2.imshow(Capture Face,frame)ifcv2.waitKey(1)0xFFord(q)orcount10:breakcap.release()cv2.destroyAllWindows()if__name____main__:nameinput(Enter the name of the person: )capture_face(name)4. 人脸识别编写一个脚本进行人脸识别importcv2importosimportnumpyasnpimportdlibfromimutilsimportface_utilsfromfacenet_pytorchimportMTCNN,InceptionResnetV1defload_embeddings():embeddings{}modelInceptionResnetV1(pretrainedvggface2).eval()mtcnnMTCNN()forfilenameinos.listdir(dataset/known_faces):img_pathos.path.join(dataset/known_faces,filename)imgcv2.imread(img_path)img_rgbcv2.cvtColor(img,cv2.COLOR_BGR2RGB)boxes,_mtcnn.detect(img_rgb)ifboxesisnotNone:boxboxes[0]img_croppedimg[int(box[1]):int(box[3]),int(box[0]):int(box[2])]img_embmtcnn(img_cropped.unsqueeze(0))embeddingmodel(img_emb).detach().numpy()[0]embeddings[filename.split(_)[0]]embeddingreturnembeddingsdefrecognize_face(frame,embeddings):modelInceptionResnetV1(pretrainedvggface2).eval()mtcnnMTCNN()boxes,_mtcnn.detect(frame)ifboxesisnotNone:forboxinboxes:x,y,w,hint(box[0]),int(box[1]),int(box[2])-int(box[0]),int(box[3])-int(box[1])face_imgframe[y:yh,x:xw]face_imgcv2.cvtColor(face_img,cv2.COLOR_BGR2RGB)face_imgmtcnn(face_img.unsqueeze(0))ifface_imgisnotNone:embeddingmodel(face_img).detach().numpy()[0]min_distancefloat(inf)recognized_nameUnknownforname,embinembeddings.items():distancenp.linalg.norm(embedding-emb)ifdistancemin_distance:min_distancedistance recognized_namename cv2.putText(frame,recognized_name,(x,y-10),cv2.FONT_HERSHEY_SIMPLEX,0.9,(0,255,0),2)cv2.rectangle(frame,(x,y),(xw,yh),(0,255,0),2)returnframeif__name____main__:embeddingsload_embeddings()capcv2.VideoCapture(0)whileTrue:ret,framecap.read()framerecognize_face(frame,embeddings)cv2.imshow(Face Recognition,frame)ifcv2.waitKey(1)0xFFord(q):breakcap.release()cv2.destroyAllWindows()5. 构建 GUI 应用程序使用PyQt5构建一个简单的 GUI 应用程序importsysfromPyQt5.QtWidgetsimportQApplication,QMainWindow,QLabel,QPushButton,QVBoxLayout,QWidget,QFileDialogfromPyQt5.QtGuiimportQPixmapimportcv2importosimportnumpyasnpimportdlibfromimutilsimportface_utilsfromfacenet_pytorchimportMTCNN,InceptionResnetV1classFaceRecognitionApp(QMainWindow):def__init__(self):super().__init__()self.initUI()self.modelInceptionResnetV1(pretrainedvggface2).eval()self.mtcnnMTCNN()self.embeddingsself.load_embeddings()definitUI(self):self.setWindowTitle(人脸识别与管理系统)self.setGeometry(100,100,800,600)layoutQVBoxLayout()self.image_labelQLabel(self)self.image_label.setText(请选择一张图片进行检测)self.image_label.setAlignment(Qt.AlignCenter)layout.addWidget(self.image_label)self.load_buttonQPushButton(加载图像,self)self.load_button.clicked.connect(self.load_image)layout.addWidget(self.load_button)self.recognize_buttonQPushButton(识别人脸,self)self.recognize_button.clicked.connect(self.recognize_face)layout.addWidget(self.recognize_button)containerQWidget()container.setLayout(layout)self.setCentralWidget(container)defload_image(self):optionsQFileDialog.Options()file_name,_QFileDialog.getOpenFileName(self,选择图像文件,,Images (*.png *.jpg *.jpeg),optionsoptions)iffile_name:self.image_pathfile_name pixmapQPixmap(file_name)self.image_label.setPixmap(pixmap.scaled(640,640))defrecognize_face(self):ifhasattr(self,image_path):imgcv2.imread(self.image_path)img_rgbcv2.cvtColor(img,cv2.COLOR_BGR2RGB)boxes,_self.mtcnn.detect(img_rgb)ifboxesisnotNone:forboxinboxes:x,y,w,hint(box[0]),int(box[1]),int(box[2])-int(box[0]),int(box[3])-int(box[1])face_imgimg[y:yh,x:xw]face_imgcv2.cvtColor(face_img,cv2.COLOR_BGR2RGB)face_imgself.mtcnn(face_img.unsqueeze(0))ifface_imgisnotNone:embeddingself.model(face_img).detach().numpy()[0]min_distancefloat(inf)recognized_nameUnknownforname,embinself.embeddings.items():distancenp.linalg.norm(embedding-emb)ifdistancemin_distance:min_distancedistance recognized_namename cv2.putText(img,recognized_name,(x,y-10),cv2.FONT_HERSHEY_SIMPLEX,0.9,(0,255,0),2)cv2.rectangle(img,(x,y),(xw,yh),(0,255,0),2)height,width,channelimg.shape bytes_per_line3*width q_imgImageQt.Image.fromarray(img).convert(RGB).rgbSwapped()self.image_label.setPixmap(QPixmap.fromImage(q_img))defload_embeddings(self):embeddings{}forfilenameinos.listdir(dataset/known_faces):img_pathos.path.join(dataset/known_faces,filename)imgcv2.imread(img_path)img_rgbcv2.cvtColor(img,cv2.COLOR_BGR2RGB)boxes,_self.mtcnn.detect(img_rgb)ifboxesisnotNone:boxboxes[0]img_croppedimg[int(box[1]):int(box[3]),int(box[0]):int(box[2])]img_embself.mtcnn(img_cropped.unsqueeze(0