本博客为人脸识别系统的人脸比对代码解释

人脸识别系统博客汇总:人脸识别系统-博客索引

项目GitHub地址:Su-Face-Recognition: A face recognition for user logining

注意:阅读本博客前请先参考以下博客

工具安装、环境配置:人脸识别系统-简介

UI界面设计:人脸识别系统-UI界面设计

UI事件处理:人脸识别系统-UI事件处理

摄像头展示画面:人脸识别系统-摄像头画面展示

一、关键代码

  • load_image_file —— 加载要识別的人脸图像

    • 加载要识別的人脸图像,加载返回的数据是 Numpy 数組,记录了图片的所有像素的特征向量。

  • face_locations —— 定位图中所有的人脸的像素位置   
    • 返回值是一个列表形式。列表中每一个元素是一张人脸的位置信息,包括[top, right, bottom, left]。
  • face_encodings —— 获取图像文件中所有面部编码信息
    • 返回值是一个编码列表,参数仍然是要识别的图像对象,如果后续访问时需要加上索引或遍历进行访问,每张人脸的编码信息为一个128维向量。
  • face_encodings —— 获取图像文件中所有面部编码信息
    • 返回值是一个编码列表,参数仍然是要识别的图像对象,如果后续访问时需要加上索引或遍历进行访问,每张人脸的编码信息为一个128维向量。
    • 第一个参数是一个面部编码列表(很多张脸), 第二个参数是给出单个面部编码(一张脸), compare_faces 会将第二个参数中的编码信息与第一个参数中的所有编码信息依次匹配,返回值是一个布尔列表,匹配成功则返回 True,匹配失败则返回 False,顺序与第一个参数中脸部编码顺序一致。
    • 参数 tolerance 为识别阈值,默认值是 0.39。tolerance 值越小,匹配越严格。
    def compare_face(self):if self.imgA_path == "":QMessageBox.information(self, "提示", self.tr("请先导入照片一"))elif self.imgB_path == "":QMessageBox.information(self, "提示", self.tr("请先导入照片二"))else:imgA = face_recognition.load_image_file(self.imgA_path)imgB = face_recognition.load_image_file(self.imgB_path)try:A_face_encoding = face_recognition.face_encodings(imgA)[0]B_face_encoding = face_recognition.face_encodings(imgB)[0]known_faces = [A_face_encoding]results = face_recognition.compare_faces(known_faces, B_face_encoding)[0]if results:QMessageBox.information(self, "提示", self.tr("两张图片为同一个人"))else:QMessageBox.information(self, "提示", self.tr("两张图片为两个不同的人"))except IndexError:QMessageBox.information(self, "提示", self.tr("图片导入失败,请重新导入图片!"))quit()

更多关于人脸识别库face_recognition基础使用教程请参考:face_recognition GitHub

二、其余代码

# 人脸比对界面
class FaceCompareWindow(QMainWindow, FaceCompareUi):def __init__(self):super(FaceCompareWindow, self).__init__()self.setupUi(self)self.imgA_path = ""self.imgB_path = ""self.imgB = Noneself.imgA = Noneself.img_a_button.clicked.connect(self.open_imgA)self.img_b_button.clicked.connect(self.open_imgB)self.compare_button.clicked.connect(self.compare_face)self.close_button.clicked.connect(self.close_window)def open_imgA(self):imgA_path, fileType = QtWidgets.QFileDialog.getOpenFileName(self, "选取文件", os.getcwd(),"All Files(*);;Text Files(*.txt)")if not imgA_path.endswith('jpg') | imgA_path.endswith('png'):QMessageBox.about(self, '提示', '请选择jpg或者png类型图片')else:# 如果使用 cv2.imread 不能导入中文路径imgA = cv2.imdecode(np.fromfile(imgA_path, dtype=np.uint8), -1)frame_location = face_recognition.face_locations(imgA)if len(frame_location) == 0:QMessageBox.information(self, "提示", self.tr("没有检测到人脸,请重新导入图片!"))else:QApplication.processEvents()self.imgA = imgAself.imgA_path = imgA_pathshow = cv2.resize(imgA, (221, 261))  # 截取图片show = cv2.cvtColor(show, cv2.COLOR_BGR2RGB)  # 显示原图showImage = QImage(show.data, show.shape[1], show.shape[0], show.shape[1] * 3, QImage.Format_RGB888)self.img_a_show.setPixmap(QPixmap.fromImage(showImage))self.img_a_path.setText(imgA_path)def open_imgB(self):imgB_path, fileType = QtWidgets.QFileDialog.getOpenFileName(self, "选取文件", os.getcwd(),"All Files(*);;Text Files(*.txt)")if not imgB_path.endswith('jpg') | imgB_path.endswith('png'):QMessageBox.about(self, '提示', '请选择jpg或者png类型图片')else:imgB = cv2.imdecode(np.fromfile(imgB_path, dtype=np.uint8), -1)frame_location = face_recognition.face_locations(imgB)if len(frame_location) == 0:QMessageBox.information(self, "提示", self.tr("没有检测到人脸,请重新导入图片!"))else:QApplication.processEvents()self.imgB = imgBself.imgB_path = imgB_pathshow = cv2.resize(imgB, (221, 261))show = cv2.cvtColor(show, cv2.COLOR_BGR2RGB)showImage = QImage(show.data, show.shape[1], show.shape[0], show.shape[1] * 3, QImage.Format_RGB888)self.img_b_show.setPixmap(QPixmap.fromImage(showImage))self.img_b_path.setText(imgB_path)def compare_face(self):if self.imgA_path == "":QMessageBox.information(self, "提示", self.tr("请先导入照片一"))elif self.imgB_path == "":QMessageBox.information(self, "提示", self.tr("请先导入照片二"))else:imgA = face_recognition.load_image_file(self.imgA_path)imgB = face_recognition.load_image_file(self.imgB_path)try:A_face_encoding = face_recognition.face_encodings(imgA)[0]B_face_encoding = face_recognition.face_encodings(imgB)[0]known_faces = [A_face_encoding]results = face_recognition.compare_faces(known_faces, B_face_encoding)[0]if results:QMessageBox.information(self, "提示", self.tr("两张图片为同一个人"))else:QMessageBox.information(self, "提示", self.tr("两张图片为两个不同的人"))except IndexError:QMessageBox.information(self, "提示", self.tr("图片导入失败,请重新导入图片!"))quit()def close_window(self):self.img_a_show.setText("照片一")self.img_b_show.setText("照片二")self.img_a_path.setText("")self.img_b_path.setText("")self.imgA_path = ""self.imgB_path = ""self.imgB = Noneself.imgA = Noneself.close()

阅读完本博客后可以继续阅读:

摄像头画面展示:人脸识别系统-摄像头画面展示

用户端逻辑:

  • 人脸识别:Python | 人脸识别系统 — 人脸识别
  • 活体检测:Python | 人脸识别系统 — 活体检测
  • 背景模糊:Python | 人脸识别系统 — 背景模糊
  • 姿态检测:Python | 人脸识别系统 — 姿态检测
  • 用户操作:Python | 人脸识别系统 — 用户操作

管理员端逻辑:

  • 管理员操作:
  • 用户操作:

注:以上代码仅为参考,若需要运行,请参考项目GitHub完整源代码:Su-Face-Recognition: A face recognition for user logining

Python | 人脸识别系统 — 人脸比对 代码部分相关推荐

  1. Python | 人脸识别系统 — 人脸识别

    博客汇总:Python | 人脸识别系统 - 博客索引 GitHub地址:Su-Face-Recognition 注:阅读本博客前请先参考 工具安装.环境配置:Python | 人脸识别系统 - 简介 ...

  2. 【毕业设计/Matlab系列】基于PCA和BP神经网络的人脸识别系统(附matlab代码)

    Date: 2022.4.26 文章目录 前言 1.总体介绍 2.详细分析 2.1.训练程序 2.2.测试程序 3.测试效果图 4.测试部分matlab代码 前言 在毕业设计中实现了基于PCA和BP神 ...

  3. 微信小程序之百度人脸识别系统-人脸登录前后端代码

    前面写了人脸注册的功能.现在再来实现人脸登录的功能就要简单得多了,还是先上PHP部分的代码: PHP代码(搜索人脸库并返回对比结果) <?php date_default_timezone_se ...

  4. 使用gpu服务器搭建人脸识别系统,人脸识别gpu服务器配置

    人脸识别gpu服务器配置 内容精选 换一换 设置动态Batch档位参数,适用于执行推理时,每次处理图片数量不固定的场景.在某些推理场景,如检测出人脸后再执行人脸识别网络,由于人脸个数不固定导致人脸识别 ...

  5. 如何开发一个人脸识别,人脸识别系统,人脸识别考勤系统毕业设计毕设作品

    开发准备 第1步:准备好百度智能云的账号 第2步:在百度智能云领取对应AI开发的免费资源包 第3步:创建对应的应用,然后获取对应的开发信息,主要是下面几个 AppID:应用列表中 API Key:应用 ...

  6. AI人工智能毕业设计课题:人脸识别,人脸识别系统,人脸识别考勤系统

    开发准备 第1步:准备好百度智能云的账号 第2步:在百度智能云领取对应AI开发的免费资源包 第3步:创建对应的应用,然后获取对应的开发信息,主要是下面几个 AppID:应用列表中 API Key:应用 ...

  7. Python | 人脸识别系统 — 用户操作

    本博客为人脸识别系统的摄像头画面展示代码解释 人脸识别系统博客汇总:人脸识别系统-博客索引 项目GitHub地址:Su-Face-Recognition: A face recognition for ...

  8. 【Python实现人脸比对】——打造智能人脸识别系统

    [Python实现人脸比对]--打造智能人脸识别系统 人脸比对是指对两张或多张人脸图像进行对比,判断它们是否属于同一个人的过程.在现代化社会的各个领域中,如金融.安防.旅游等等,人脸识别技术得到广泛应 ...

  9. Python | 人脸识别系统 — 活体检测

    本博客为人脸识别系统的活体检测代码解释 人脸识别系统博客汇总:人脸识别系统-博客索引 项目GitHub地址:Su-Face-Recognition: A face recognition for us ...

最新文章

  1. 一些前端开发的代码审查和意见
  2. 郴州郴锦机器人_减税降费宣传走进郴州市民营企业高质量发展专题培训班
  3. ORA-01555 原因与解决
  4. React系列---Babel
  5. android listview 选中状态,Android:在ListView打开时将项目设置为选中状态?
  6. Jquery中选择器
  7. 新风系统风速推荐表_实验室通风系统的设计和应用
  8. WEB小项目-账务管理系统(2020年03月24日更新,附数据库和源码包)
  9. db4o java_DB4O 社区版 8.1.3 发布,面向对象数据库
  10. 【材料计算】输入文件INCAR
  11. 一位全减器逻辑电路图_半减器逻辑原理图 [全减器]
  12. 基于.net开发chrome核心浏览器【三】
  13. 折线统计html,canvas制作简单的HTML图表,折线或者矩形统计(原创)
  14. 软件开发延期引发纠纷-律师随笔
  15. 人类一败涂地!DeepMind再次制霸Atari游戏,比两年前快了200倍
  16. PhoneWindowManager().interceptKeyBeforeQueueing()中的interactive变量值的来源
  17. 子线程何时开启、何时结束
  18. Java实现背包问题之01背包(是否装满),完全背包
  19. 浅谈struts2漏洞(检测工具及S2-052漏洞及漏洞平台的搭建复现)
  20. 【Git/GitHub/VSCode】Git提交时使用EMOJI表情、在VS Code中使用emoji commit

热门文章

  1. golang 源码分析之channel
  2. android手机锁屏了打不开怎么办?
  3. 如何快速拆分PDF文件(照片快速转换成pdf)
  4. 图像极坐标变换的研究
  5. JavaWeb--用户注册登录案例
  6. 一条命令实现树莓派摄像头直播推流哔哩哔哩
  7. 与MySQL相识的第二天
  8. VMware解决:未能将管道连接到虚拟机: 所有的管道范例都在使用中。
  9. 操作系统PV大题_小和尚老和尚喝水问题
  10. [Constraints 18-5210] No constraints selected for write.