刷脸开门-260526

更新-260526 | 发布-260524

✳️ 目录

实验简介

关于MTCNN和FaceNet


MTCNN(Multi-task Cascaded Convolutional Networks)是一种用于人脸检测的级联卷积网络。它通过三个子网络(P-Net、R-Net、O-Net)逐步筛选候选框,同时输出人脸边界框和五个关键点(双眼、鼻子、左右嘴角)。其优势在于兼顾检测精度和速度,且对遮挡、光照有一定鲁棒性。

FaceNet 是 Google 提出的人脸识别网络,核心思想是将人脸图像直接映射到 128 维或 512 维的欧几里得嵌入空间。它使用三元组损失(triplet loss)训练,使同一个人的人脸嵌入距离小、不同人的人脸嵌入距离大。FaceNet 可直接用于人脸验证(比较距离是否小于阈值)、识别(最近邻分类)和聚类,省去了传统的 softmax 分类层,特征泛化能力很强。

简单来说:MTCNN 负责“找出人脸在哪”,FaceNet 负责“判断是谁的人脸”,两者常串联构成完整的人脸识别流程。

关于开发板


本次实验将使用 ascend-log 昇腾开发板kunpeng-log 鲲鹏开发板,完成推理验证。

致谢


本文主要参考资料:gitee_夜雨飘零/Pytorch-MobileFaceNet↗。在此致谢文章作者。


实验任务


基于开发板,采用摄像头自动抓取人脸图像,小组成员的人脸能够识别,识别成功显示 “开门成功”,小组以外成员不能识别,显示 “开门失败”。


实验目的


通过本次实验,期望达成以下目的:

  1. 了解 MTCNN 和 FaceNet
  2. 做一个 刷脸开门 系统
  3. 进一步掌握开发板的使用
  4. 进一步熟悉 Linux 相关操作
  5. 增加解决问题的经验

对号入座


请同学们对号入座、对号使用器材。

  • 16组:请移步2号桌
  • 22组:请使用鲲鹏14
✳️ 座位安排,请对号入座

b102td

✳️ 器材安排,请对号使用

b102ted


注意事项


敬请关注以下事项:

  • 🚫 禁止:水杯、水瓶等,不要放在桌上。临时放桌上,则要拧紧盖子。液体泼洒会损坏开发板。

  • 建议:书包等物品放实验室四周空闲处。以提高效率,并防止器材跌落(已发生跌落)。

  • 建议:电源线等,都从中间穿到桌面上。以提高效率,并防止器材跌落(已发生跌落)。


0-上电开机


插上电源即可开机:

  • ascend-log 昇腾:开发板上电后,3个指示灯会依次绿色常亮,表示启动正常。

  • kunpeng-log 鲲鹏:前面板有2个 Type-C,电源插入➡️边上那个。
  • kunpeng-log 鲲鹏:拿掉顶部的磁吸盖子,看到2个绿灯亮,就表示开机完成。

1-连接外网


开发板上电开机后,先让开发板连接外网,即能访问互联网。后续创建本次实验所需的 Python 虚拟环境,需要开发板能访问外网。开发板如何连接外网,请参考:


2-获取源码


下载样例压缩包(源码+数据),并上传开发板,然后解压缩。

  1. 下载样例压缩包gitee_夜雨飘零/Pytorch-MobileFaceNet↗

    • 打开 gitee 页面后,点击 </br>代码 (左上角)克隆/下载
    • 在“克隆/下载” 页面,点击 ↓下载ZIP (右上角)

    压缩包文件名是:Pytorch-MobileFaceNet-master.zip

  2. HwHiAiUser 用户登录开发板

    用 MobeXterm 软件登录,或在本地电脑执行:

    ssh HwHiAiUser@192.168.137.100
    

    或者已用 root 登录开发板,则切换到 HwHiAiUser:

    su - HwHiAiUser
    

    在权限满足实验要求的前提下,尽量不用超级用户 root 做实验。

  3. 在开发板上新建目录:

    mkdir ~/oss0526
    

    (1)该目录的完整路径是:/home/HwHiAiUser/oss0526
    (2)oss 是 “open sesame 芝麻开门”的意思。

  4. 上传压缩包到开发板的实验目录中

    用 MobaXterm 软件传文件。请参考:MobaXterm简要说明↗ | 传文件

    或者在本地电脑敲命令传文件。请参考:Linux常用操作↗ | scp 远程复制文件/目录。比如进入压缩包保存的目录后,执行:

    scp Pytorch-MobileFaceNet-master.zip HwHiAiUser@192.168.137.100:/home/HwHiAiUser/oss0526
    
  5. 在开发板上解压缩

    先切换目录:

    cd  ~/oss0526
    

    再解压缩:

    unzip Pytorch-MobileFaceNet-master.zip
    

    解压缩后生成子目录 Pytorch-MobileFaceNet-master,完整路径应该是:/home/HwHiAiUser/oss0526/Pytorch-MobileFaceNet-master。


3-创建环境


在虚拟环境中开展实验,可做到和开发板的其他项目互不影响。

  1. HwHiAiUser 用户登录开发板

    用 MobeXterm 软件登录,或在本地电脑执行:

    ssh HwHiAiUser@192.168.137.100
    

    或者已用 root 登录开发板,则切换到 HwHiAiUser:

    su - HwHiAiUser
    

    在权限满足实验要求的前提下,尽量不用超级用户 root 做实验。

  2. 用 conda 创建 Python 3.11 的虚拟环境:

    conda create -n oss0526 python=3.11
    

    (1)在虚拟环境中开展实验,可做到和开发板的其他项目互不影响。
    (2)oss0526 是虚拟环境的名字的样例。

  3. 激活刚创建的虚拟环境:

    conda activate oss0526
    
  4. 在虚拟环境中安装相关包:

    先安装 CPU 版本的 PyTorch 和 torchvision:

    pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cpu
    

    增加 --index-url ... 是避免安装不必要的 nvidia 相关的包。

    先切换目录:

    cd ~/oss0526/Pytorch-MobileFaceNet-master
    

    再安装其他需要的包:

    pip3 install -r requirements.txt
    

    如果安装速度较慢(主要是下载速度较慢),可以尝试:pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple


✅ 可以执行以下命令,删除虚拟环境。然后重复上述2、3、4步骤,重新创建虚拟环境。

  • 如果当前在虚拟环境 oss0526 中,则先去激活:

    conda deactivate
    
  • 删除虚拟环境:

    conda remove -n oss0526 --all
    

更多信息请参考:Conda指南↗


4-调通样例


先在开发板上调通样例。样例使用 GPU,开发板上没有 GPU(有类似的 NPU),先改成使用 CPU。主要涉及改动以下 3 个文件,部分目录结构如下:

Pytorch-MobileFaceNet-master
├── dataset
│   ├── lfw_test.txt
│   └── test.jpg
├── detection
│   ├── face_detect.py   # 待修改
│   └── utils.py
├── face_db
│   ├── 杨幂.jpg
│   └── 迪丽热巴.jpg
├── infer.py              # 待修改
├── models
│   ├── aamloss.py
│   ├── fc.py
│   └── mobilefacenet.py
├── requirements.txt
├── save_model
│   ├── mobilefacenet.pth
│   └── mtcnn
│       ├── ONet.pth
│       ├── PNet.pth
│       └── RNet.pth
├── train.py
├── utils
│   ├── predictor.py      # 待修改
│   ├── reader.py
│   ├── scheduler.py
│   ├── simfang.ttf
│   └── utils.py
└── webapp.py             # “5-增加Web客户端”步骤新增
  1. 尝试人脸识别

    先进入目录:

    cd ~/oss0526/Pytorch-MobileFaceNet-master/
    

    然后执行以下命令,尝试人脸识别:

    python3 infer.py --image_path=dataset/test.jpg --face_db_path=face_db --threshold=0.5
    

    –image_path:待识别的人脸图片的路径
    –face_db_path:人脸库图片的路径

  2. AI辅助尝试解决 CUDA 相关报错

    会有 CUDA(GPU相关) 相关报错,屏幕提示信息如下:

    ...
    NotImplementedError: Could not run 'aten::empty_strided' with arguments from the 'CUDA' backend. 
    This could be because the operator doesn't exist for this backend, or was omitted during the 
    selective/custom build process (if using custom build). 
    ...
    

    和 AI 交流,修改相关文件,即可解决。主要修改点:使用 GPU,改成使用 CPU。

    修改后,重复上述第 1 步操作。

  3. AI辅助尝试解决 QT 相关报错

    人脸识别后输出结果,会有 QT(显示窗口相关) 相关报错,屏幕提示信息如下:

    ...
    qt.qpa.xcb: could not connect to display 
    qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/home/HwHiAiUser/.conda/envs/oss0526/lib/python3.11/site-packages/cv2/qt/plugins" even though it was found.
    This application failed to start because no Qt platform plugin could be initialized. 
    Reinstalling the application may fix this problem.
    
    Available platform plugins are: xcb.
    ....
    

    和 AI 交流,修改相关文件,即可解决。主要是 ssh 登录使用开发板,没有显示窗口。主要修改点:有窗口时,在窗口中显示识别结果;是否有窗口可供显示,识别结果都要保存为图片。

    修改后,重复上述第 1 步操作。

  4. 测试人脸识别

    python3 infer.py --image_path=dataset/test.jpg --face_db_path=face_db --threshold=0.5
    

    测试结果保存在 result.jpg 中,如下:

    result

修改后的样例代码

能调通的样例代码如下:

请复制到相应目录中:

Pytorch-MobileFaceNet-master
├── detection
│   ├── face_detect.py
├── infer.py
├── utils
│   ├── predictor.py   

5-增加 Web 客户端


增加 Web 客户端,实现 刷脸开门 功能。

AI辅助实现


可以AI辅助实现功能。一般需要和 AI 交互多轮,才能得到预期的功能。以下是多轮交互后的样例提示词,仅供参考:

新增 Python 程序,实现“刷脸开门”的界面:

1、用连接在开发板上的USB 摄像头进行拍照
2、在浏览器的界面上,要显示摄像头的实时画面
3、在实时画面上,加个尽可能大的正方形黄框,只拍黄框内的画面。黄框和短边一样大。
4、拍摄到的图片(在黄框内),要显示在Web 界面上
5、识别结果,要显示在Web 界面上,就叠加在摄像头的实时画面里。拍到的照片中:
    - 如果没有人脸,显示“没有人脸”;
    - 如果有人脸,但比对后不知道是谁,显示“不认识”;
    - 如果命中人脸库,则显示:对应的姓名,请进

样例实现效果:

oss01

webapp.py样例代码

能调通的样例代码如下:

请复制到目录 Pytorch-MobileFaceNet-master 中。

FAQ


可能遇到的问题:

  1. 开发板可能有多个摄像头。程序打开的摄像头,不是外接的 USB 摄像头。
  2. 拍摄光线、角度,会影响识别别准确度。

增加语音播报(可选)


AI辅助增加语音播报。比如:张三,请进。

多轮交互下得到的样例提示词如下,供参考:

再新增 Python 程序,实现“刷脸开门”的界面。这是一个新的任务。

1、用连接在开发板上的USB 摄像头进行拍照
2、在浏览器的界面上,要显示摄像头的实时画面
3、在实时画面上,加个尽可能大的正方形黄框,只拍黄框内的画面。黄框和短边一样大。
4、拍摄到的图片(在黄框内),要显示在Web 界面上
5、识别结果,要显示在Web 界面上,就叠加在摄像头的实时画面里。拍到的照片中:
    - 如果没有人脸,显示“没有人脸”;
    - 如果有人脸,但比对后不知道是谁,显示“不认识”;
    - 如果命中人脸库,则显示:对应的姓名,请进
6、增加语音播报
    - 如果没有人脸,显示“未识别到人脸”,并语音说出来;
    - 如果有人脸,但比对后不知道是谁,显示“不认识您”,并语音说出来;
    - 如果命中人脸库,则显示:对应的姓名,请进,并语音说:xx,请进
    - 声音要和自然语音接近,用 edge-tts

需要安装软件如下:

sudo apt update && sudo apt install mpg123

在 Python 虚拟环境 oss0526 中安装相关包:

pip3 install edge-tts

样例效果如下:

oss02

样例代码

能调通的样例代码如下:

  • webv3.py:带语音播报
  • test_tts.py:测试声音。可用于修改 webv3.py 中的播报声音。

请复制到目录 Pytorch-MobileFaceNet-master 中。


相关指南


可参考相关指南,已提高操作效率:


关机断电复位离开


实验结束后,请完成以下事项,再离开实验课。

  1. 关机断电

    开发板要先关机、再断电。🚫 严谨开机状态直接断电(拔电源)!

  2. 归还实验器材,给实验室老师

    • 开发板(每组1个)
    • 开发板电源(每组1个)
    • 网线(每组1个)
    • USB摄像头(每桌共用1个)
    • 借用的其他器材
  3. 椅子复位

    • 每个桌子,配套 6 个椅子。请将椅子推到桌子下面。
    • 西侧玻璃门,前中后靠墙,各 6 个。共 18 个。请按此数量靠墙摆放。
  4. 带齐随身物品

✅ 上述事项完成后,可离开实验室。

THE END