---
#### 项目名称:
基于OpenCv和tensorflow的人脸识别
#### 环境配置:
- Python
- tensorflow2
- OpenCv
categories: 人工智能
description: Opencv是一个开源的的跨平台计算机视觉库,内部实现了图像处理和计算机视觉方面的很多通用算法,对于python而言,在引用opencv库的时候需要写为import cv2。其中,cv2是opencv的C++命名空间名称,使用它来表示调用的是C++开发的opencv的接口
---
> 实验环境:python 3.10 + opencv 4.7.0 + tensorflow 2.10
> 建议使用 anaconda配置相同环境
# 更新日志:
#### demo1版本:
2023/6/7 19:00:00:需要分别执行三个文件,face_catch.py, face_train.py, face_apply.py
#### demo2版本:
2023/6/12 12:00:00:直接运行ui.py文件即可,修复了一些问题,增添几个功能,主要新增给项目一个UI界面,并优化了实际运行的操作
![](https://gitee.com/yq233/images/raw/master/face_3.png)
![](https://gitee.com/yq233/images/raw/master/20230614185612.png)
![](https://gitee.com/yq233/images/raw/master/20230614185637.png)![](https://gitee.com/yq233/images/raw/master/20230614185713.png)
![](https://gitee.com/yq233/images/raw/master/20230614185851.png)
![](https://gitee.com/yq233/images/raw/master/20230614185934.png)
![](https://gitee.com/yq233/images/raw/master/20230614190009.png)
![](https://gitee.com/yq233/images/raw/master/20230614190046.png)
# 背景
## 人脸识别步骤
![](https://gitee.com/yq233/images/raw/master/face_1.png)
### 人脸采集
采集人脸图片的方法多种多样,可以直接从网上下载数据集,可以从视频中提取图片,还可以从摄像头实时的采集图片。
### 人脸检测方法
人脸检测在实际中主要用于人脸识别的预处理,即在图像中准确标定出人脸的位置和大小。人脸图像中包含的模式特征十分丰富,如直方图特征、颜色特征、模板特征、结构特征及Haar特征等。人脸检测就是把这其中有用的信息挑出来,并利用这些特征实现人脸检测。
### 人脸图像预处理
对于人脸的图像预处理是基于人脸检测结果,对图像进行处理并最终服务于特征提取的过程。系统获取的原始图像由于受到各种条件的限制和随机 干扰,往往不能直接使用,必须在图像处理的早期阶段对它进行灰度校正、噪声过滤等图像预处理。对于人脸图像而言,其预处理过程主要包括人脸图像的光线补 偿、灰度变换、直方图均衡化、归一化、几何校正、滤波以及锐化等。
### 人脸特征提取
人脸识别系统可使用的特征通常分为视觉特征、像素统计特征、人脸图像变换系数特征、人脸图像代数 特征等。人脸特征提取就是针对人脸的某些特征进行的。人脸特征提取,也称人脸表征,它是对人脸进行特征建模的过程。人脸特征提取的方法归纳起来分为两大 类:一种是基于知识的表征方法;另外一种是基于代数特征或统计学习的表征方法。
### 匹配与识别
提取的人脸图像的特征数据与数据库中存储的特征模板进行搜索匹配,通过设定一个阈值,当相似度超过这一阈值,则把匹配得到的结果输 出。人脸识别就是将待识别的人脸特征与已得到的人脸特征模板进行比较,根据相似程度对人脸的身份信息进行判断。这一过程又分为两类:一类是确认,是一对一 进行图像比较的过程,另一类是辨认,是一对多进行图像匹配对比的过程。
## 关于OpenCv
Opencv是一个开源的的跨平台计算机视觉库,内部实现了图像处理和计算机视觉方面的很多通用算法,对于python而言,在引用opencv库的时候需要写为import cv2。其中,cv2是opencv的C++命名空间名称,使用它来表示调用的是C++开发的opencv的接口
目前人脸识别有很多较为成熟的方法,这里调用OpenCv库,而OpenCV又提供了三种人脸识别方法,分别是LBPH方法、EigenFishfaces方法、Fisherfaces方法。本文采用的是LBPH(Local Binary Patterns Histogram,局部二值模式直方图)方法。在OpenCV中,可以用函数cv2.face.LBPHFaceRecognizer_create()生成LBPH识别器实例模型,然后应用cv2.face_FaceRecognizer.train()函数完成训练,最后用cv2.face_FaceRecognizer.predict()函数完成人脸识别。
CascadeClassifier,是Opencv中做人脸检测的时候的一个级联分类器。并且既可以使用Haar,也可以使用LBP特征。其中Haar特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征。它分为三类:边缘特征、线性特征、中心特征和对角线特征。
# 程序设计
## 人脸识别算法:
![](https://gitee.com/yq233/images/raw/master/face_2.png)
### 1.录入人脸
![](https://gitee.com/yq233/images/raw/master/face_5.png)
#### 1.1数据源准备与采集
```python
# 加载haar人脸识别分类器
classfier = cv2.CascadeClassifier("./haarcascade_frontalface_alt2.xml")
# 视频来源,这里选择使用摄像头
cap = cv2.VideoCapture(camera_idx)
#循环读取到每一帧
while cap.isOpened():
ok, frame = cap.read()
if not ok:
break
```
#### 1.2识别器收集
```python
# 将当前桢图像转换成灰度图像,便于分类器识别
grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
#通过detectMultiScale函数对人脸进行识别
faceRects = classfier.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
# 将当前帧保存为图片
img_name = '%s/%d.jpg' % (path_name, num)
cv2.imwrite(img_name, image)
```
#### 1.3收集过程
提前定义好准备收集的图片个数,捕获每一帧的识别出的人脸图片,当捕获图片数量到达时就退出循环,最后在定义保存的路径
**这边是demo2更新后的方法:**
```
#这是后续demo2版本指定路径的方法,不再自己去定义每个人的名称了,统一划分一个userX类名
def create_new_dataset(path_name):
i = 1
while True:
new_path = os.path.join(path_name, f'user{i}')
if not os.path.exists(new_path):
os.makedirs(new_path)
break
i += 1
return new_path
```
### 2.模型训练
![](https://gitee.com/yq233/images/raw/master/face_6.png)
#### 2.1读取数据集
现在创建一个face_data_predeal.py专门写一个子程序对图像进行预处理(处理图片大小、设置标签等都在这里完成)
通过读取存放数据集的文件,读取到每一张图片,并把图片和图片名称添加到列表中
```python
def read_path(path_name):
for dir_item in os.listdir(path_name):
# 从初始路径开始叠加,合并成可识别的操作路径
full_path = os.path.abspath(os.path.join(path_name, dir_item))
if os.path.isdir(full_path): # 如果是文件夹,继续递归调用
read_path(full_path)
else: # 文件
if dir_item.endswith('.jpg'):
image = cv2.imread(full_path)
image = resize_image(image, IMAGE_SIZE, IMAGE_SIZE)
images.append(image)
labels.append(path_name)
return images, labels
```
#### 2.2图片预处理
图片预处理我写得有点乱又在子程序上写一点,有在构建模型前处理处理一点,总体来说,无论对于这种实时录入的图片来说,还是规定图片来说还是先用老模板处理一部分,比如:规定图片大小后计算好图片尺寸进行修改这种,灰度图这种,图像归一化这种,标注数据这种,在后续甚至可以用keras接口来图像增强加强数据,主要头疼的是使用每个函数要给数据进行格式转化才能使用
在图片处理也可以给图像增加边界,是图片长、宽等长,cv2.
没有合适的资源?快使用搜索试试~ 我知道了~
基于opencv和tensorflow实现人脸识别项目源码+可执行文件,采用python中的tkinter库做可视化.zip
共22个文件
xml:6个
py:5个
gitkeep:4个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 110 浏览量
2024-03-02
13:15:24
上传
评论 1
收藏 116KB ZIP 举报
温馨提示
基于opencv和tensorflow实现人脸识别项目源码+可执行文件,采用python中的tkinter库做可视化.zip 基于opencv和tensorflow实现人脸识别项目源码+可执行文件,采用python中的tkinter库做可视化.zip基于opencv和tensorflow实现人脸识别项目源码+可执行文件,采用python中的tkinter库做可视化.zip基于opencv和tensorflow实现人脸识别项目源码+可执行文件,采用python中的tkinter库做可视化.zip基于opencv和tensorflow实现人脸识别项目源码+可执行文件,采用python中的tkinter库做可视化.zip基于opencv和tensorflow实现人脸识别项目源码+可执行文件,采用python中的tkinter库做可视化.zip基于opencv和tensorflow实现人脸识别项目源码+可执行文件,采用python中的tkinter库做可视化.zip
资源推荐
资源详情
资源评论
收起资源包目录
基于opencv和tensorflow实现人脸识别 (1).zip (22个子文件)
opencv-tensorflow主-main
face_data
.gitkeep 0B
ui_test.py 9KB
face_data_apply.py 3KB
face_data_train.py 8KB
face_data_catch.py 2KB
.idea
pythonProject.iml 325B
other.xml 233B
vcs.xml 167B
misc.xml 306B
inspectionProfiles
profiles_settings.xml 174B
modules.xml 278B
.gitignore 176B
face_data_predeal.py 3KB
labels.txt 0B
model
.gitkeep 0B
logs
train
.gitkeep 0B
validation
.gitkeep 0B
__pycache__
face_data_train.cpython-310.pyc 4KB
face_data_predeal.cpython-310.pyc 2KB
haarcascade_frontalface_alt2.xml 528KB
README.md 16KB
tensorboard.bat 69B
共 22 条
- 1
资源评论
盈梓的博客
- 粉丝: 6845
- 资源: 1247
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功