前言

这段时间比较闲,看边上屋子里面的老师在玩 opencv ,于是也打算玩玩,因为之前从来没有接触过,于是打算先用人脸识别上个手

语言和库的选择

因为对 Python 比较熟悉,所以当然是用 Py 啦,然后就在 GitHub 上瞎逛,看到了这个 https://github.com/ageitgey/face_recognition ,上面写着

The world’s simplest facial recognition api for Python and the command line

既然是 world’s simplest ,当然就选这个啦

看了一下,是用 Python 调用的 C++ 写的 dlib 来整的

编译 dlib (痛苦面具)

最开始试了一下 CPU 版,卡的鸭皮,因为自己的电脑有显卡,所以还是在自己的电脑上面来整,但是自己的电脑又不方便装 Linux ,双系统系统盘位置又不大够,于是只好在 Windows 上 en 整冷汗滑稽

Windows 整各种和 AI 有关的都非常不友好,dlib 光编译就花了我两天,甚至整的有点小破防,所以下面讲讲咋整

系统准备

硬件、OS

Windows Server 2019 Datacenter + i7-6700 HQ + 32G DDR4 + GTX960M

软件

显卡

首先装好各项驱动,去老黄官网下最新显卡驱动

驱动装好之后,去开始菜单找 NVIDIA 控制面板(NVIDIA Control Panel)

帮助-系统信息-组件,找 NVCUDA64.DLL 对应的值

NVCP

如图,我的显卡对应的 CUDA 版本是 11.6

然后就可以是下载 CUDACUDNN 了,注意 CUDA 必须要装和上图一模一样的版本,而 CUDNN 最好选择能兼容该版本 CUDA 的最老版本,使用新版本很可能会导致各种各样的问题

下载小技巧:把下载链接的地址的 .com 换成 .cn 可以切到老黄在中国的服务器,能提高下载速度

CUDNN 的解压位置:打开文件资源管理器,输入 %CUDA_PATH% 回车,得到的目录就是解压位置,提示同名文件覆盖即可

CUDA 和 CUDNN 安装不需要添加环境变量

CMake

这个简单,没有什么太多的注意事项,记得加入 PATH 环境变量

C:\Program Files\CMake\bin

Visual Studio

只能装 2017 或者 2019 (听说 2015.3 也行,但是我没有试),新了老了都不行,电脑同时只能存在一个版本的 Visual Studio ,其它版本的必须卸载,需要安装 C++ 、C 开发相关库

dlib

版本参考 pip install dlib 安装的版本,我选择了 dlib-19.22

编译 dlib

打开 CMake-gui ,选择 x64 ,Visual Studio 2019,选择 dlib 文件夹位置,点击 “Configure” 然后选择 “DLIB_USE_CUDA” 选项(配置好了应该会自动选择上),然后看 CPU 是否支持 AVX 和 SSE2 SSE4 指令集,支持的话就选上,然后再次点击 “Configure” ,再 “Generate” -> “Open Project” 会自动打开 Visual Studio ,什么都不用管,直接选择 “生成->生成解决方案”,完成之后弹的项目有变化的提示框直接选择忽略,然后关闭 Visual Studio

安装 dlib

cmd 到 dlib 目录,运行

python setup.py install

安装完成!

使用 face_recognition

我写的 demo:https://github.com/luckykeeper/facedemo

我准备了全校 15989 个人的照片(每人一张),因为每次运行计算特征值都会花上大量时间,所以让第一次运行时计算人脸特征值,然后写入到 sqlite 数据库,第二次直接从 sqlite 数据库读人脸和学工号数据,这样速度就快了很多,需要注意 sqlite 是不能直接存储人脸特征值数据的(numpy.ndarray),需要转字符串存储,读取的时候再转回来

来康效果

960M 的性能比较拉,把摄像头设置 640x480 分辨率,15FPS 可以保证单人识别不卡

下图是第一次运行计算特征值的过程,会花费相当多的时间

计算特征值

下图是导入 15989 个人的人脸数据的识别结果,我自己试了一下,效果相当准确

全校特征值对比