基于树莓派的人脸识别门禁系统(python+OpenCV+PyQt)

技术难点:

  1. 登录界面准确的将数据输入到指定的 QLineEdit上
  2. 多线程实现识别人脸、录入人脸和加载进度条
  3. 获取人脸图片和训练人脸
  4. 实现人脸和姓名一一对应

获取人脸图片和训练人脸


我这里将获取的人脸照片存放到一个文件夹里面,将训练好的yml文件存放在另一个文件夹下面,如下,Face_data 存放的是人脸照片,Face_training 存放的是训练好的 yml 文件,faceReco.py 就是源码文件了,这三个文件都在同一级目录下。直接使用代码创建存放文件夹和训练文件夹。

1、捕获人脸照片

  • 图像处理
  • 创建文件夹(满权限创建,否则不能将图片写进文件夹)
  • 捕获人脸照片并保存
# 创建目录,将获取的人脸照片放入指定的文件夹
self.file = "./Face_data/"while(True):ret, self.img = self.cap.read()# 垂直翻转视频图像self.img = cv2.flip(self.img, -1)# 灰度化处理gray = cv2.cvtColor(self.img, cv2.COLOR_BGR2GRAY)faces = faceCascade2.detectMultiScale(gray, 1.3, 5)# 判断是否存在文件夹如果不存在则创建为文件夹self.folder = os.path.exists(self.file)if not self.folder:  # makedirs 满权限创建文件时如果路径不存在会创建这个路径os.makedirs(self.file)  os.chmod(self.file,0777)for (x,y,w,h) in faces:cv2.rectangle(self.img, (x,y), (x+w,y+h), (255,0,0), 2)     self.count += 1# 将捕获的图像保存到指定的文件夹中bool = cv2.imwrite(self.file + "/User." + str(self.Edit_ID.text()) + '.' + str(self.count) + ".png", gray[y:y+h,x:x+w])# 取60张人脸样本,停止录像if self.count >= 60: print("OK!")break

2、训练人脸

从数据集文件夹中载入训练图片,获取到人脸和id,整理成list并返回,人后调用函数进行训练

  • 创建文件夹(满权限创建,否则不能将图片写进文件夹)
  • 对捕获的人脸照片进行训练
  • 将训练好的数据保存
# 函数获取图像和标签数据
def getImagesAndLabels(path):imagePaths = [os.path.join(path,f) for f in os.listdir(path)]     faceSamples=[]ids = []self.progressBar.setProperty("value", 65)for imagePath in imagePaths:# 转换为灰度PIL_img = Image.open(imagePath).convert('L') img_numpy = np.array(PIL_img,'uint8')id = int(os.path.split(imagePath)[-1].split(".")[1])faces = faceCascade3.detectMultiScale(img_numpy)for (x,y,w,h) in faces:faceSamples.append(img_numpy[y:y+h,x:x+w])ids.append(id)return faceSamples,ids
self.progressBar.setProperty("value", 75)
print ("\n [INFO] Training faces. It will take a few seconds. Wait ...")# 调用函数,传递文件夹路径参数
faces,ids = getImagesAndLabels(self.file)
# 训练人脸
self.recognizer.train(faces, np.array(ids))
self.progressBar.setProperty("value", 85)# 创建文件夹
self.triningfile = "./Face_training/"
self.folder1 = os.path.exists(self.triningfile)
if not self.folder1:  os.makedirs(self.triningfile)  os.chmod(self.triningfile,0777)# 将训练好的数据保存到指定文件夹中
self.recognizer.write(self.triningfile + "/trainer.yml")# 打印经过训练的人脸编号和结束程序
print("\n [INFO] {0} faces trained. Exiting Program".format(len(np.unique(ids))))
self.progressBar.setProperty("value", 100)

获取人脸图片和训练人脸相关推荐

  1. 简单用Python+OpenCv实现AI人脸识别--(3)—训练人脸识别模型

    案例引入 首先简要讲解数据集训练生成模型的原理,这里使用的是LBPH算法,在OpenCV模块中已经有内嵌的方法cv2.face.LBPHFaceRecognizer_create(),为了方便小伙伴们 ...

  2. 基于 PCA 的人脸识别系统及人脸姿态分析

    文章目录 1 PCA 1.1 原理 1.2 算法流程 1.2.1 零均值化 1.2.2 计算协方差矩阵 1.2.3 特征值和特征向量 1.2.4 降维得到 K 维特征 1.2.5 PCA 的优缺点 2 ...

  3. 利用人脸微笑数据集训练识别模型,完成对人脸图片微笑识别

    目录 一.数据集下载 二.提取人脸并判别是否为笑脸 (一)数据处理 (二)测试 三.视频识别并保存图片 四.总结 五.参考链接 一.数据集下载 1.链接:https://pan.baidu.com/s ...

  4. python照片过人脸_python openCV实现摄像头获取人脸图片

    本文实例为大家分享了python openCV实现摄像头获取人脸图片的具体代码,供大家参考,具体内容如下 在机器学习中,训练模型需要大量图片,通过openCV中的库可以快捷的调用摄像头,截取图片,可以 ...

  5. opencv 训练人脸对比_【项目案例python与人脸识别】基于OpenCV开源计算机视觉库的人脸识别之python实现...

    " 本项目是一个基于OpenCV开源库使用python语言程序实现人脸检测的项目,该项目将从[项目基础知识](即人脸识别的基本原理).[项目实践](人脸识别所需要的具体步骤及其python程 ...

  6. 目标检测 YOLO v3 训练 人脸检测模型

    YOLO,是You Only Look Once的缩写,一种基于深度卷积神经网络的物体检测算法,YOLO v3是YOLO的第3个版本,检测算法更快更准. 本文源码:https://github.com ...

  7. matlab中识别过程训练,人脸识别PCA算法matlab实现及详细步骤讲解

    %FaceRec.m %PCA人脸识别修订版,识别率88% %calc xmean,sigma and its eigen decomposition allsamples=[];%所有训练图像 fo ...

  8. 《OpenCv视觉之眼》Python图像处理十九:Opencv图像处理实战四之通过OpenCV进行人脸口罩模型训练并进行口罩检测

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  9. Python+OpenCv实现AI人脸识别身份认证系统(3)——训练人脸识别模型

    目录 案例引入 本节项目 最近有小伙伴们一直在催本项目的进度,好吧,今晚熬夜加班编写,在上一节中,实现了人脸数据的采集,在本节中将对采集的人脸数据进行训练,生成识别模型. 案例引入 首先简要讲解数据集 ...

  10. FSRNet:端到端深度可训练人脸超分辨网络

    作者丨左育莘 学校丨西安电子科技大学 研究方向丨计算机视觉 这篇文章 FSRNet: End-to-End Learning Face Super-Resolution with Facial Pri ...

最新文章

  1. CSS那些事笔记(一入门)
  2. python写管理系统-基于Python实现用户管理系统
  3. Redis 总结精讲 看一篇成高手系统 四
  4. ZOJ 3720 Magnet Darts (计算几何,概率,判点是否在多边形内)
  5. PHP在浏览器中被拒绝请求,php控制请求页面浏览器缓
  6. Hadoop--克隆3x虚拟机
  7. Word中两端对齐、分散对齐的区别
  8. 基于spring-redis发布订阅模式的实现
  9. X86汇编语言从实模式到保护模式09:32位x86处理器编程架构
  10. openSSH服务及其应用
  11. 从C#开发人员到Windows Phone 7高级开发人员只需3周 – 序
  12. iOS底层探索之LLVM(一)——初识LLVM
  13. 汽车常识全面介绍 - 刹车系统
  14. c# wince 小技巧
  15. stata软件不出图_Stata软件的图形绘制—1
  16. 网站被黑了不要慌,4招教你如何破解!网站被黑的10大原因
  17. oracle adpatch 回退,Oracle EBS施用adpatch工具打patch过程
  18. LDAP管理用户数据,用户UserAccountControl属性详解
  19. 有关HTML的学习笔记
  20. 【GIT】git常用命令

热门文章

  1. SHT30温湿度传感器使用记录(AVR atmega128)
  2. 郝斌c语言视频笔记,郝斌老师C语言专题笔记
  3. Nginx搭建视频流媒体服务(直播点播)
  4. 模式识别与机器学习 第一章 绪论
  5. 虚假信息成物联网“毒瘤”
  6. IT6302 电源后面板的 DB9 接口输出为 TTL 电平,您需要通过附件电平转换后才可连接到 PC 机的串口上
  7. PTA离散数学集合论自测(有答案)
  8. 山东大学项目实训十五——开源万能解码框架解决
  9. 【ihaonet微测试】你出题,我开发
  10. Android动态生成答题卡,好分数怎样制作答题卡