seetaface 使用总结
seetaface,是中科院计算机所山世光老师所带领的团队开发出来的人脸识别库,开源免费可用,据说识别率可达97.1%,实测下来,识别率确实是蛮高的,比opencv自带的人脸识别功能强多了。
在此,感谢开源的分享精神,可以让我们这些软件开发工程师们站在巨人的肩膀上,做一些解决实际问题的项目。同时,避免了大量重复造轮子的工作。
本文主要记录了花费5天的时间,基于seetaface,开发一个小型的人脸识别登录系统。并提供代码下载。
seetaface分为FaceDetection(人脸检测)、FaceAlignment(人脸对齐)、FaceIdentification(人脸识别)三个模块,三个模块相互独立,综合利用起来即可实现最终的人脸识别功能。
1、FaceDetection
const char* img_path = "2.jpg";
seeta::FaceDetection detector("seeta_fd_frontal_v1.0.bin");//seeta_fd_frontal_v1.0.bin 文件是作者已经训练好并提供的
//设置人脸检测的参数
detector.SetMinFaceSize(40);
detector.SetScoreThresh(2.f);
detector.SetImagePyramidScaleFactor(0.8f);
detector.SetWindowStep(4, 4);
cv::Mat img = cv::imread(img_path, cv::IMREAD_UNCHANGED);
cv::Mat img_gray;
if (img.channels() != 1)
cv::cvtColor(img, img_gray, cv::COLOR_BGR2GRAY);
else
img_gray = img;
seeta::ImageData img_data;
img_data.data = img_gray.data;//注意这里必须是单通道的图像
img_data.width = img_gray.cols;
img_data.height = img_gray.rows;
img_data.num_channels = 1;
long t0 = cv::getTickCount();
std::vector<seeta::FaceInfo> faces = detector.Detect(img_data);//人脸检测的主要函数
long t1 = cv::getTickCount();
double secs = (t1 - t0)/cv::getTickFrequency();
cout << "Detections takes " << secs << " seconds " << endl;
#ifdef USE_OPENMP
cout << "OpenMP is used." << endl;
#else
cout << "OpenMP is not used. " << endl;
#endif
#ifdef USE_SSE
cout << "SSE is used." << endl;
#else
cout << "SSE is not used." << endl;
#endif
cout << "Image size (wxh): " << img_data.width << "x"
<< img_data.height << endl;
cv::Rect face_rect;
int32_t num_face = static_cast<int32_t>(faces.size());
for (int32_t i = 0; i < num_face; i++) //提取找到的人脸区域
{
face_rect.x = faces[i].bbox.x;
face_rect.y = faces[i].bbox.y;
face_rect.width = faces[i].bbox.width;
face_rect.height = faces[i].bbox.height;
cv::rectangle(img, face_rect, CV_RGB(0, 0, 255), 4, 8, 0);
}
cv::namedWindow("Test", cv::WINDOW_AUTOSIZE);
cv::imshow("Test", img);
cv::waitKey(0);
cv::destroyAllWindows();
运行效果如下图所示:
2、FaceAlignment
运行效果如下图所示
3、FaceIdentification
其主要为计算两张图片中人脸的相似度。输入为两张图片,经过前面人脸检测,人脸对齐,得到人脸的特征,输出为人脸相似度。
作者提供的人脸相似度试验,同一张照片,其相似度可为1。
博主以自己不同环境下拍摄的照片做实验,可得到如下图所示的结果。可以发现,几乎都在0.6分以上。
然后又对比了博主与另外一个人不同环境下的脸,结果如下图所示,可以发现相似度都在0.5以下
那么,博主得到了这样的结论:相似度在0.7分以下,为不同的人脸,0.7分以上为同一个人的脸,有了这个结论,就可以用seetaface来开发一个小型的人脸识别登录系统了。
其他注意事项:
1、下载了别人的代码和工程,特别想要直接可以跑起来,最头疼的是各种报错,请参考我的博文 包含目录、库目录等注意事项
2、提供修改后的和部分注释的seetaface下载,分为三部分 人脸检测 人脸对齐 人脸识别
3、如果不想调试作者的源代码,想要跟opencv一样直接使用,仅需要lib dll include即可,点击下载
最终,基于seetaface的人脸识别demo开发出来了,可以添加人脸,删除人脸,识别人脸,点击下载 。因为上传文件大小的限制,把seeaface所需的三个bin文件放到了百度云盘,链接:http://pan.baidu.com/s/1qYGW84c 密码:in6o 下载后,将其放到model文件夹中即可运行。
更多推荐
所有评论(0)