当前位置:   article > 正文

seetaface 使用总结_seetaface是中科院的吗

seetaface是中科院的吗

seetaface,是中科院计算机所山世光老师所带领的团队开发出来的人脸识别库,开源免费可用,据说识别率可达97.1%,实测下来,识别率确实是蛮高的,比opencv自带的人脸识别功能强多了。

在此,感谢开源的分享精神,可以让我们这些软件开发工程师们站在巨人的肩膀上,做一些解决实际问题的项目。同时,避免了大量重复造轮子的工作。

本文主要记录了花费5天的时间,基于seetaface,开发一个小型的人脸识别登录系统。并提供代码下载。

seetaface分为FaceDetection(人脸检测)、FaceAlignment(人脸对齐)、FaceIdentification(人脸识别)三个模块,三个模块相互独立,综合利用起来即可实现最终的人脸识别功能。

1、FaceDetection

  1. const char* img_path = "2.jpg";
  2. seeta::FaceDetection detector("seeta_fd_frontal_v1.0.bin");//seeta_fd_frontal_v1.0.bin 文件是作者已经训练好并提供的
  3. //设置人脸检测的参数
  4. detector.SetMinFaceSize(40);
  5. detector.SetScoreThresh(2.f);
  6. detector.SetImagePyramidScaleFactor(0.8f);
  7. detector.SetWindowStep(4, 4);
  8. cv::Mat img = cv::imread(img_path, cv::IMREAD_UNCHANGED);
  9. cv::Mat img_gray;
  10. if (img.channels() != 1)
  11. cv::cvtColor(img, img_gray, cv::COLOR_BGR2GRAY);
  12. else
  13. img_gray = img;
  14. seeta::ImageData img_data;
  15. img_data.data = img_gray.data;//注意这里必须是单通道的图像
  16. img_data.width = img_gray.cols;
  17. img_data.height = img_gray.rows;
  18. img_data.num_channels = 1;
  19. long t0 = cv::getTickCount();
  20. std::vector<seeta::FaceInfo> faces = detector.Detect(img_data);//人脸检测的主要函数
  21. long t1 = cv::getTickCount();
  22. double secs = (t1 - t0)/cv::getTickFrequency();
  23. cout << "Detections takes " << secs << " seconds " << endl;
  24. #ifdef USE_OPENMP
  25. cout << "OpenMP is used." << endl;
  26. #else
  27. cout << "OpenMP is not used. " << endl;
  28. #endif
  29. #ifdef USE_SSE
  30. cout << "SSE is used." << endl;
  31. #else
  32. cout << "SSE is not used." << endl;
  33. #endif
  34. cout << "Image size (wxh): " << img_data.width << "x"
  35. << img_data.height << endl;
  36. cv::Rect face_rect;
  37. int32_t num_face = static_cast<int32_t>(faces.size());
  38. for (int32_t i = 0; i < num_face; i++) //提取找到的人脸区域
  39. {
  40. face_rect.x = faces[i].bbox.x;
  41. face_rect.y = faces[i].bbox.y;
  42. face_rect.width = faces[i].bbox.width;
  43. face_rect.height = faces[i].bbox.height;
  44. cv::rectangle(img, face_rect, CV_RGB(0, 0, 255), 4, 8, 0);
  45. }
  46. cv::namedWindow("Test", cv::WINDOW_AUTOSIZE);
  47. cv::imshow("Test", img);
  48. cv::waitKey(0);
  49. 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文件夹中即可运行。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/737918
推荐阅读
相关标签
  

闽ICP备14008679号