当前位置:   article > 正文

python face_recognition实现人脸识别系统_人脸识别python

人脸识别python

目录

face_recognition介绍

face_recognition函数

load_image_file

face_locations

batch_face_locations

face_landmarks

face_encoding

face_distance

compare_faces

face_recognition的安装

人脸识别系统

制作页面

编写实现代码

运行结果


face_recognition介绍

        face_recognition是最简单的人脸识别库。它是一个 Python 库,用于进行人脸检测、识别和特征提取。它基于 dlib 库,提供了一个简单易用的接口,可以帮助开发者快速构建人脸识别应用。

face_recognition函数

load_image_file

load_image_file(filename)

        加载图像文件,并返回表示该图像的 NumPy 数组。该函数用于从磁盘加载图像数据,以便后续进行人脸识别或分析。

face_locations

face_locations(image, model="hog")

        在图像中检测人脸,并返回一个列表,其中每个元素表示检测到的人脸的位置。位置以 (top, right, bottom, left) 四元组表示,分别代表人脸框的上、右、下、左边界。可以选择使用 "hog" 或 "cnn" 模型进行检测,默认为 "hog"。

batch_face_locations

batch_face_locations(images, number_of_times_to_upsample=1, batch_size=128)

        在一批图像中检测人脸,并返回一个列表,其中每个元素表示一张图像中检测到的所有人脸的位置。与 face_locations 函数类似,但这个函数可以同时处理多张图像。

face_landmarks

face_landmarks(image)

        在图像中检测人脸并标记68个关键特征点,返回一个字典,其中包含了每个检测到的人脸的关键特征点坐标。关键特征点包括眼睛、眉毛、鼻子、嘴巴等。

face_encoding

face_encoding(image,location)

        返回图片的128位特征编码向量,location是人脸的位置。

face_distance

face_distance(face_encodings, face_to_compare)

        计算两个人脸编码之间的欧氏距离,并返回一个数组,其中每个元素表示一个人脸编码与待比较人脸编码之间的距离。这个距离值越小,表示两个人脸越相似。

compare_faces

compare_faces(known_face_encodings, face_encoding_to_check, tolerance=0.6)

        比较一个人脸编码与一组已知人脸编码,并返回一个布尔值数组,表示待比较人脸与已知人脸之间的匹配结果,当两组编码的差距小于阈值时就认为是一个人返回true,否则返回false。可选参数 tolerance 用于指定阈值,取值范围为 0 到 1,默认为 0.6。

face_recognition的安装

如果pip下载太慢了,可以跟换国内的源:

  1. #先升级到最新版
  2. python -m pip install --upgrade pip
  3. #设置清华源
  4. pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

安装依赖,先安装cmake和boost

  1. pip install cmake
  2. pip install boost

安装dlib

pip install dlib

        注意这一步可能会安装失败,大概率的可能原因是dlib版本和Python版本不兼容,可以先查询Python版本,再通过下载whlwhlwhl对应版本的whl文件来安装对应版本的dlib

对应版本的whl文件链接如下:
Python3.6对应.whl文件链接:dlib-19.6.0-cp36-cp36m-win_amd64.whl
Python3.7对应.whl文件链接:dlib-19.17.99-cp37-cp37m-win_amd64.whl
Python3.9对应.whl文件链接:dlib-19.22.99-cp39-cp39-win_amd64

whl文件安装

pip install dlib-19.6.0-cp36-cp36m-win_amd64.whl

安装face_recognition

pip install face_recognition

人脸识别系统

        除了使用face_recognition,我们还使用opencv库对图像进行处理以及使用pyqt库制作gui页面

安装opencv库

pip install opencv-python

安装PyQt

pip install PyQt

制作页面

        通过Qt designer进行页面快速开发并生成*.ui文件,然后使用pyuic5工具将*.ui文件转化成Python代码

        保存*.ui文件到工程目录后,输入以下命令

pyuic5 -o page.py *.ui

        -o后面接生成的代码文件,page.py代码如下

  1. # -*- coding: utf-8 -*-
  2. import sys
  3. from PyQt5.QtWidgets import QWidget
  4. # Form implementation generated from reading ui file 'E:\freshman_system_projects\faceRecPy\faceRecPy\form.ui'
  5. #
  6. # Created by: PyQt5 UI code generator 5.15.10
  7. #
  8. # WARNING: Any manual changes made to this file will be lost when pyuic5 is
  9. # run again. Do not edit this file unless you know what you are doing.
  10. from faceRec import *
  11. from PyQt5 import QtCore, QtGui, QtWidgets
  12. class Ui_Widget(QWidget):
  13. def __init__(self):
  14. super().__init__()
  15. self.setupUi()
  16. def setupUi(self):
  17. self.setObjectName("Widget")
  18. self.resize(800, 600)
  19. self.facescanButton = QtWidgets.QPushButton(self)
  20. self.facescanButton.setGeometry(QtCore.QRect(110, 490, 93, 28))
  21. self.facescanButton.setObjectName("facescanButton")
  22. self.facetrainButton = QtWidgets.QPushButton(self)
  23. self.facetrainButton.setGeometry(QtCore.QRect(510, 490, 93, 28))
  24. self.facetrainButton.setObjectName("facetrainButton")
  25. self.retranslateUi()
  26. QtCore.QMetaObject.connectSlotsByName(self)
  27. def closeEvent(self, event):
  28. self.close()
  29. serverClose()
  30. event.accept()
  31. sys.exit(0)
  32. def retranslateUi(self):
  33. _translate = QtCore.QCoreApplication.translate
  34. self.setWindowTitle(_translate("Widget", "Widget"))
  35. self.facescanButton.setText(_translate("Widget", "开始识别"))
  36. self.facetrainButton.setText(_translate("Widget", "人脸编码"))
  37. #与槽函数绑定
  38. self.facetrainButton.clicked.connect(lambda:faceTrian("facedatabase")
  39. self.facescanButton.clicked.connect(faceRec)

编写实现代码

        关于PyQt如何给按钮绑定槽函数,以及如何在代码中调用,可自行查阅相关教程。

        编写faceRec.py文件实现具体功能

  1. """
  2. -人脸识别
  3. 通过compare_faces将待识别的人脸编码和已知的人脸编码数据库比较,
  4. 将序号与名字对应,然后在图像上打印对应序号的名字
  5. """
  6. def faceRec():
  7. global c
  8. cap = cv2.VideoCapture(0)#开启摄像头
  9. while True:
  10. ret, cvframe = cap.read()#读取一帧图像
  11. if ret == True:
  12. frame=cvframe[:,:,::-1]#将OpenCV的BGR格式转化成face_recognition支持的RGB格式
  13. face_locations = face_recognition.face_locations(frame)#得到所有人脸位置
  14. face_encodings = face_recognition.face_encodings(frame,face_locations)#得到所有人脸的编码
  15. faces=[]#名字列表
  16. id=-1#序号
  17. for face_encoding in face_encodings:
  18. res = face_recognition.compare_faces(known_faces, face_encoding, tolerance=0.5)#比较待检测人脸与人脸数据库的编码
  19. print(res,end="\n")
  20. # 如果人脸编码与数据库中的某个编码匹配,则显示相应名字,否则显示未知用户
  21. name=None
  22. if True in res:
  23. id=res.index(True)
  24. name=names[id]
  25. faces.append(name)
  26. for (top,right,bottom,left),name in zip(face_locations,faces):
  27. #将人脸框起来
  28. cv2.rectangle(cvframe, (left, top), (right, bottom), (255, 255, 0))
  29. # 显示名字
  30. if name!=None:#and bind_ids[id]
  31. cv2.putText(cvframe,name,(left,top-5),1,1,(255,255,0),1)
  32. else:
  33. cv2.putText(cvframe, "unknownUser", (left, top - 5), 1,1,(255, 255, 0), 1)
  34. #将这一帧显示
  35. cv2.imshow("videoCaptrue",frame)
  36. #如果输入了“q"则退出循环
  37. if cv2.waitKey(1)==113:
  38. break;
  39. cv2.destroyWindow("videoCaptrue")
  40. cap.release()

        最后写一个main.py运行页面

  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QMainWindow
  3. from mainpage import *
  4. if __name__ == '__main__':
  5. app = QApplication(sys.argv)
  6. ui = Ui_Widget()
  7. readconf()
  8. ui.show()
  9. sys.exit(app.exec_())

运行结果

运行main.py

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/684012
推荐阅读
相关标签
  

闽ICP备14008679号