12.2 系统需求分析
在本接下来的内容中,将详细讲解使用深度学习技术实现一个大型人脸识别项目的过程。在本节将首先讲解本项目的需求分析知识,为步入后面的编码工作打下基础。
12.2.1 系统功能分析
本项目是一个人工智能版的人脸识别系统,使用深度学习技术实现。本项目的具体功能模块如下所示。
(1)采集样本照片
可以调用本地电脑摄像头采集照片作为样本,也可以将拍好的照片放到本地文佳佳内。采集的样本照片越多,后面的人脸识别的成功率越高。
(2)图片处理
处理采集到的原始样本照片,将采集到的原始图像转化为标准数据文件,这样便于被后面的深度学习模块所用。
(3)深度学习
使用处理后的图片创建深度学习模型,实现学习训练,将训练结果保存到本地。
(4)人脸识别
根据训练所得的模型实现人脸识别功能,既可以识别摄像头中的图片,也可以识别Flask Web中的上传照片。
12.2.2 技术分析
本章的人脸识别系统是一个综合性的项目,主要用到了如下所示的框架。
(1)PyTorch:PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。
(2)OpenCV-Python:是著名地图像处理框架OpenCV的Python接口。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。
可以使用如下命令安装OpenCV-Python:
pip install opencv-python
在安装OpenCV-Python时需要安装对应的依赖库,例如常用的Numpy等。如果安装OpenCV-Python失败,可以下载对应的“.whl”文件,然后通过如下命令进行安装:
pip install “.whl”文件
(3)Scikit-Image:Scikit-Image缩写为skimage,是基于Python脚本语言开发的数字图片处理包。在实际应用中,PIL和Pillow只提供最基础的数字图像处理,功能有限;OpenCV-Python实际上是OpenCV(一个C++库)提供的Python接口,更新速度非常慢。而Scikit-Image是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理。可以使用如下命令安装Scikit-Image:
pip install skimage
(4)MobileNet:是一种轻量级的卷积神经网络,它的主要目标是在保持模型准确性的同时,尽可能地减少模型的大小和计算复杂度。MobileNet的设计思想是使用深度可分离卷积层来代替传统的卷积层,以减少计算量和模型大小。
(5)ArcFace:在CVPR2019的论文《Arcface: Additive angular margin loss for deep face recognition》中提出,ArcFace是针对人脸识别的一种损失函数。在SphereFace基础上改进了对特征向量归一化和加性角度间隔,在提高了类间可分性同时加强类内紧度和类间差异。
12.2.3 实现流程分析
实现本项目的具体流程如下图12-1所示。
图12-1 实现流程