前言
基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库)、Caffe(深度学习库)、Dlib(机器学习库)、libfacedetection(人脸检测库)、cudnn(gpu加速库)。
用到了一个开源的深度学习模型:VGG model。
最终的效果是很赞的,识别一张人脸的速度是0.039秒,而且最重要的是:精度高啊!!!
CPU:intel i5-4590
GPU:GTX 980
系统:Win 10
OpenCV版本:3.1(这个无所谓)
Caffe版本:Microsoft caffe (微软编译的Caffe,安装方便,在这里安利一波)
Dlib版本:19.0(也无所谓
CUDA版本:7.5
cudnn版本:4
libfacedetection:6月份之后的(这个有所谓,6月后出了64位版本的)
这个系列纯C++构成,有问题的各位朋同学可以直接在博客下留言,我们互相交流学习。
====================================================================
本篇是该系列的第六篇博客,介绍如何设计一个识别类来用于具体的分类任务。
思路
现在我们希望能够有一个识别的接口来实现输入一张图片,便可以分辨出他是哪个人。我们需要提前:
1、定义一个人脸空间;
2、将一些人脸的图片放到这个人脸空间中;
3、将n个人脸图片提取特征为n个向量,并且合并为一个矩阵;
4、将n个人脸图片的标注(label)合并为一个向量,与矩阵形成对应;
5、将其序列化并保存起来,等待识别时进行读取。
在前五篇博客中,我们已经可以很方便的来完成这些事情了。代码如下:
vector<Mat> imgArray;
vector<string> labelArray;
for ( int i = 0; i < 5; i++)//读入5张图片
{
string img_file = "img/" + Int_String(i) + ".jpg";
Mat img = imread(img_file);
imgArray.push_back(img);
labelArray.push_back(img_file);
}
Register Train;