# 程序源代码和运行环境说明
------
## 1、程序源代码
------
### 1.1、主函数代码
> **本次课程大作业的目标是使用基于opencv完成人脸识别,为了完成这个程序需要有一个程序的主入口,这个主入口就是main.py**
首先,因为要使用opencv,所以需要引用opencv库,因此第一段程序为
```python
import cv2
```
在引用完成后,我们需要使用它打开摄像头来进行人脸识别
```python
# 打开摄像头
def video_demo():
capture = cv.VideoCapture(0)
if not capture.isOpened():
print("Cannot open camera")
exit()
while (True):
Read_ref, Read_frame = capture.read()
Read_Image_Data(Read_frame)
cv.imshow("image", Read_frame)
Key_Data = cv.waitKey(1) & 0xff
if Key_Data == 27:
capture.release()
break
```
这段代码的运行逻辑为
首先打开摄像头并把数据传递给**capture**这个变量
然后判断这个变量是否被打开,如果没有被打开就输出**"Cannot open camera"**并退出程序
如果摄像头被成功打开,那么进入死循环并开始执行**capture.read,**读取出来的数据存放到**Read_ref, Read_frame**
随后通过**Read_Image_Data**这个自定义函数进行读取图像的处理
然后在把读取到的图像数据在PC上显示出来,它的窗口title为**"image"**
随后对键盘按键进行读取并把数据存放到**Key_Data**当中,再然后判断**Key_Data**的值,如果等于27,也就是键盘上的按键ESC则退出程序
> **以上代码只是实现了打开摄像头并将其画面显示在电脑上,如想要制作人脸识别,则还需要对读取出的图像进行处理**
```python
def Read_Image_Data(image_Data):
# 读取识别的数据
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('./Data/trainer/trainer.yml')
# 读取图像
# image_Data = cv.imread("image.jpg")
# 把图像转换为灰度图
gray_Data = cv.cvtColor(image_Data, cv2.COLOR_BGR2GRAY)
# 加载人脸识别器
face_cascade = cv.CascadeClassifier(r"./Data/haarcascade_frontalface_alt2.xml")
# 检测灰度图中的所有面孔
Face_Out_Data = face_cascade.detectMultiScale(gray_Data,1.01,5,0,(100,100),(300,300))
# 对识别出来的图像进行画框
for x, y, width, height in Face_Out_Data:
# 人脸识别
id, confidence = recognizer.predict(gray_Data[y:y + height, x:x + width])
# 这里的color是 蓝 黄 红,与rgb相反,thickness设置宽度
cv.rectangle(image_Data, (x, y), (x + width, y + height), color=(255,0,255), thickness=3)
# 保存输出图像
# cv.imwrite("beauty_detected.jpg", image_Data)
name = names[id]
cv.putText(image_Data,name,(x,y),cv2.FONT_HERSHEY_COMPLEX,1,(0,255,255),2)
```
这段代码就是对读取出来的图像进行处理的代码,首先先读取自己提前做好的识别人脸数据的数据集
**recognizer = cv2.face.LBPHFaceRecognizer_create()**
**recognizer.read('./Data/trainer/trainer.yml')**
然后就是对输入的图像数据进行灰度处理并将其存放到**gray_Data**这个变量当中
随后就是加载别人做好的数据集来检测图像中的人脸,加载的数据集存放到**face_cascade**这个变量
再然后检测灰度图中的所有人脸数据,并存档到**Face_Out_Data**
然后就是对识别出来的人脸进行画框,并表明人脸的相关数据,例如ID、姓名
> **在判断完成后就可以把所有代码整合起来,形成一个main函数**
```python
if __name__ == '__main__':
video_demo()
cv.destroyAllWindows()
```
在主函数当中,第一句话是使用**video_demo**函数,第二句话是关闭所有的打开的窗口,也就是当退出程序时,需要清除已经打开的窗口
------
### 1.2、个人数据集创建代码
> **由于需要比较准确的识别出不同的人,并且给他们打上不同的id和姓名,因此需要这样一个个人数据集创建的代码**
首先需要引用比较多的头文件
```python
import cv2 as cv
import numpy as np
from PIL import Image
import os
```
引用完成后就需要对读取到的数据进行处理
```python
def getImageAndLabels(Path):
# 人脸数据
facesSamples = []
# 存储姓名数据
ids = []
# 存储图片信息
imagePaths = [os.path.join(Path,f)for f in os.listdir(Path)]
# 加载分类器
face_detector = cv.CascadeClassifier('./Data/haarcascade_frontalface_default.xml')
for imagePath in imagePaths:
PIL_img = Image.open(imagePath).convert('L')
img_numpy = np.array(PIL_img,'uint8')
faces = face_detector.detectMultiScale(img_numpy)
id = int(os.path.split(imagePath)[1].split('.')[0])
for x,y,w,h in faces:
ids.append(id)
facesSamples.append(img_numpy[y:y+h,x:x+w])
print('id:',id)
print('fs:',facesSamples)
return facesSamples,ids
```
这段代码的运行逻辑为
首先创建相关的人脸数据**facesSamples**和姓名数据**ids**,还有图片的信息**imagePaths**
然后通过加载别人制作好的人脸分类器对人脸进行识别并将其存放到**face_detector** 这个变量
然后对识别样本中的人脸数量进行循环处理(如果Path当中只有一张图片,那么样本数量就是1)
识别出来后将其**id**和相关**faces**数据保存
然后就是保存读取出来的图片样本的框的大小
然后输出相关数据的**id**和**facesSamples**
> **数据处理函数完成后,需要对此函数进行调用并且需要读取的数据集里面有相关的数据才可以进行识别**
```python
if __name__ == '__main__':
Path = './Data/MyPath/'
faces,ids = getImageAndLabels(Path)
recognizer = cv.face.LBPHFaceRecognizer_create()
recognizer.train(faces,np.array(ids))
recognizer.write('./Data/trainer/trainer.yml')
```
读取**./Data/MyPath/**的数据,然后传入**getImageAndLabels**函数,并得到**faces,ids** ,随后对读取出来的所有数据写入**./Data/trainer/trainer.yml**然后给主函数调用
------
## 2、运行环境说明
------
> 本程序编写基于Python3.11环境
![image-20231029142752953](C:\Users\Cossiant\AppData\Roaming\Typora\typora-user-images\image-20231029142752953.png)
> 本程序需要安装较多的软件包才可以正常运行
>
> 但是主要的安装包为以下
![image-20231029142835073](C:\Users\Cossiant\AppData\Roaming\Typora\typora-user-images\image-20231029142835073.png)
> 本程序的文件结构为
![image-20231029143226973](C:\Users\Cossiant\AppData\Roaming\Typora\typora-user-images\image-20231029143226973.png)
其中,在程序的根目录一共有2个**py**文件,main.py是进行打开摄像头进行图像识别的主程序,main2.py是进行个人数据集创建的程序
**在Data文件夹下的MyPath文件夹当中是个人的训练集图片**
**在Data文件夹下的trainer文件夹当中是训练完成后输出的trainer.yml文件**
**在Data文件夹当中的文件是别人训练好的相关数据集**
------
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
期末大作业基于opencv的人脸识别项目源码+数据集+详细代码解释 在程序的根目录一共有2个py文件,main.py是进行打开摄像头进行图像识别的主程序,main2.py是进行个人数据集创建的程序 在Data文件夹下的MyPath文件夹当中是个人的训练集图片 在Data文件夹下的trainer文件夹当中是训练完成后输出的trainer.yml文件 在Data文件夹当中的文件是别人训练好的相关数据集
资源推荐
资源详情
资源评论
收起资源包目录
MyFinalExam-main.zip (39个子文件)
MyFinalExam-main
Project
main2.py 1KB
main3.py 1KB
main.py 2KB
软件库更新失败看这里.txt 256B
.idea
Project.iml 393B
.name 7B
other.xml 186B
vcs.xml 183B
misc.xml 193B
inspectionProfiles
profiles_settings.xml 174B
modules.xml 266B
.gitignore 182B
encodings.xml 178B
程序源代码和运行环境说明.pdf 374KB
Data
haarcascade_profileface.xml 809KB
haarcascade_smile.xml 184KB
haarcascade_frontalface_alt.xml 661KB
haarcascade_russian_plate_number.xml 74KB
haarcascade_license_plate_rus_16stages.xml 45KB
trainer
trainer.yml 1.53MB
haarcascade_frontalcatface.xml 402KB
haarcascade_lefteye_2splits.xml 191KB
haarcascade_eye.xml 333KB
MyPath
6.jpg 18KB
1.jpg 173KB
5.jpg 239KB
3.jpg 47KB
2.png 981KB
4.jpg 28KB
haarcascade_lowerbody.xml 386KB
haarcascade_frontalcatface_extended.xml 374KB
haarcascade_upperbody.xml 767KB
haarcascade_frontalface_default.xml 908KB
haarcascade_righteye_2splits.xml 192KB
haarcascade_frontalface_alt2.xml 528KB
haarcascade_eye_tree_eyeglasses.xml 588KB
haarcascade_fullbody.xml 466KB
.gitignore 3KB
README.md 7KB
共 39 条
- 1
资源评论
- tianyilk2023-11-22资源不错,对我启发很大,获得了新的灵感,受益匪浅。
- guangchengnainai2024-04-21资源内容详细全面,与描述一致,对我很有用,有一定的使用价值。
云哲-吉吉2021
- 粉丝: 3316
- 资源: 1130
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功