first commit

This commit is contained in:
2024-09-05 13:29:00 +08:00
commit 53515a5a50
75 changed files with 3863 additions and 0 deletions

BIN
Lab/5_FaceDetection/111.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

BIN
Lab/5_FaceDetection/222.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

BIN
Lab/5_FaceDetection/333.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 708 KiB

View File

@@ -0,0 +1,184 @@
![cover](222.png)
---
# 目录
[TOC]
---
**实验分工**
| 姓名 | 学号 | 分工 |
| :----: | :------: | :----------------------------------------------------------- |
| 柯劲帆 | 21281280 | 负责完成实验代码的主要部分,对模型做细节化调整,设计识别方法与显示效果。检查修正报告。 |
| 李桦炅 | 21281282 | 在实验中协同各个成员进行沟通,确保成员间协作和报告的完成与优化。 |
| 王子励 | 21281292 | 参与实验部分代码的修改调整,撰写实验报告。 |
| 李志民 | 20281146 | 参与报告撰写,记录实验中的问题并总结。 |
# 1. 实验目的
通过互联网等方式对计算机视觉Computer Vision中的Face Detection方向进行自主学习。并进行实践进一步深入理解。
获取摄像头的信息数据使用视频数据实现实时Face Detection任务。人脸检测Face Detection就是给一幅图像找出图像中的所有人脸位置通常用一个矩形框框起来。
# 2. 工具/原料
- PC机一台。
# 3. 实验任务
1.调取本机个人PC摄像头模组。
2.不限编程语言不限算法实现Face Detection任务。
# 4. 实验内容
1.在PC机上通过程序获取无线摄像头的视频数据。
2.在视频数据上做实时的人脸跟踪。实时输出的数据可以各组通过不同算法来实现如多人检测id标志性别等内容
# 5. 核心代码
**配置环境**
```sh
pip install facenet-pytorch opencv-python
```
**运行代码**
```python
import cv2
from facenet_pytorch import MTCNN
# 设置输入图像的大小
image_size = (480, 480)
# 使用MTCNN创建人脸检测流水线
mtcnn = MTCNN(image_size=image_size, keep_all=True)
# 打开摄像头
cap = cv2.VideoCapture(0) # 0 表示默认摄像头,可以根据需要更改为其他数字
# 检查摄像头是否成功打开
if not cap.isOpened():
print("Error: Could not open camera.")
exit()
# 设置窗口名称
cv2.namedWindow("Face Detection", cv2.WINDOW_NORMAL)
while True:
# 读取视频流的帧
ret, frame = cap.read()
# 检查帧是否成功读取
if not ret:
print("Error: Could not read frame.")
break
# 裁剪图像使其成为正方形
min_dim = min(frame.shape[0], frame.shape[1])
start_x = (frame.shape[1] - min_dim) // 2
start_y = (frame.shape[0] - min_dim) // 2
cropped_frame = frame[start_y:start_y+min_dim, start_x:start_x+min_dim]
# 人脸检测
boxes, probs = mtcnn.detect(cropped_frame)
# 绘制人脸边界框
if boxes is not None:
for box in boxes:
# 在原始帧上绘制边界框
cv2.rectangle(frame,
(int(box[0] + start_x), int(box[1] + start_y)),
(int(box[2] + start_x), int(box[3] + start_y)),
(0, 255, 0), 4)
# 在窗口中显示帧
cv2.imshow("Face Detection", frame)
# 检测按键,如果是'q',退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放摄像头资源
cap.release()
# 关闭所有窗口
cv2.destroyAllWindows()
```
代码主要功能模块是MTCNN。
MTCNN的工作原理是通过级联的方式利用多个卷积神经网络来实现人脸检测和对齐。
![cover](111.png)
1. 首先通过P-NetProposal Network粗略地识别出可能包含人脸的区域
2. 然后使用R-NetRefine Network对候选框进行进一步的筛选
3. 最后通过O-NetOutput Network精细化地定位人脸关键点和提取人脸特征。
MTCNN可以同时完成人脸位置的精准定位、人脸对齐和特征提取从而在人脸识别应用中发挥关键作用。
# 6. 实验结果
通过对相关知识的学习后小组成员们最后完成了使用python语言在自己的pc机上完成了调取摄像头画面并框选人脸的任务。不过不尽人意的是由于条件的限制不能够识别框选出侧脸。
<img src="333.png" alt="cover" style="zoom: 33%;" />
# 7. 实验感想
通过实现人脸识别项目,我们深刻体会到了团队合作的重要性和技术创新的挑战。在实验过程中,我们遇到了多种技术难题,例如算法优化和数据处理。通过共同努力,我们克服了这些难关,实现了高效的人脸识别。这个过程不仅提升了我们的编程能力和问题解决技巧,也让我们更深刻地理解了人脸识别技术的潜力与局限。