我是靠谱客的博主 玩命茉莉,最近开发中收集的这篇文章主要介绍人脸特征点检测-于老师算法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近已经很少看CSDN了。这一年多准备考研,基本上怕是不会再怎么上了。以前有一个http://blog.csdn.net/mr_curry/article/details/51804072 如何快糙好猛的使用Shiqi.Yu老师的公开人脸检测库(附源码)的BLOG,因为于老师的库已经更新了,所以重新写一下吧。 
PS:这个库越来越强了,已经可以做人脸关键点检测了。关键点检测可以用于矫正人脸,再也不要用慢的要死的dlib啦~~

转载地址::http://blog.csdn.net/mr_curry/article/details/65945071

配置

五张图带你解决问题:(X64,Debug) 
这里写图片描述
这里写图片描述
这里写图片描述

然后你需要把opencv的属性表也引进来: 
这里写图片描述

两个方法,加系统变量或者放到和exe同一个文件夹下。加了系统变量后重启一次才生效,所以这里就直接放咯 
这里写图片描述

代码

我们直接用FDDB上评测效果最好的函数:facedetect_multiview_reinforce 
这里写图片描述

      #include <opencv.hpp>
     #include <facedetect-dll.h>
  1. using namespace cv;

  2. using namespace std;

  3.  
  4. //define the buffer size. Do not change the size!

  5. #define DETECT_BUFFER_SIZE 0x20000

  6.  
  7. int main()

  8. {

  9. int * pResults = NULL;

  10. //pBuffer is used in the detection functions.

  11. //If you call functions in multiple threads, please create one buffer for each thread!

  12. unsigned char * pBuffer = (unsigned char *)malloc(DETECT_BUFFER_SIZE);

  13. if (!pBuffer)

  14. {

  15. fprintf(stderr, "Can not alloc buffer.n");

  16. return -1;

  17. }

  18. Mat src = imread("img.jpg");

  19. Mat gray;

  20. cvtColor(src, gray, CV_BGR2GRAY);

  21. int doLandmark = 1;// do landmark detection

  22. pResults = facedetect_multiview_reinforce(pBuffer, (unsigned char*)(gray.ptr(0)), gray.cols, gray.rows, (int)gray.step,

  23. 1.2f, 2, 48, 0, doLandmark);

  24. //print the detection results

  25. for (int i = 0; i < (pResults ? *pResults : 0); i++)

  26. {

  27. short * p = ((short*)(pResults + 1)) + 142 * i;

  28. rectangle(src, Rect(p[0], p[1], p[2], p[3]), Scalar(0, 255, 0), 2);

  29. if (doLandmark)

  30. {

  31. for (int j = 0; j < 68; j++)

  32. circle(src, Point((int)p[6 + 2 * j], (int)p[6 + 2 * j + 1]), 1, Scalar(0, 0, 255),2);

  33. }

  34. }

  35. imshow("Show", src);

  36. waitKey(0);

  37. }

效果还是很赞: 
这里写图片描述

视频流中的人脸检测代码就是用VideoCapture解析为Mat然后循环检测啊:

 
  1. #include <opencv.hpp>

  2. #include <facedetect-dll.h>

  3. using namespace cv;

  4. using namespace std;

  5.  
  6. //define the buffer size. Do not change the size!

  7. #define DETECT_BUFFER_SIZE 0x20000

  8.  
  9. int main()

  10. {

  11. int * pResults = NULL;

  12. //pBuffer is used in the detection functions.

  13. //If you call functions in multiple threads, please create one buffer for each thread!

  14. unsigned char * pBuffer = (unsigned char *)malloc(DETECT_BUFFER_SIZE);

  15. if (!pBuffer)

  16. {

  17. fprintf(stderr, "Can not alloc buffer.n");

  18. return -1;

  19. }

  20. int doLandmark = 1;// do landmark detection

  21. VideoCapture cap(0);

  22. if (!cap.isOpened()){

  23. cout << "Please check your USB camera's interface num." << endl;

  24. return 0;

  25. }

  26. Mat src;

  27. while (true)

  28. {

  29. cap >> src;

  30. if (!src.empty()){

  31. Mat gray;

  32. cvtColor(src, gray, CV_BGR2GRAY);

  33. pResults = facedetect_multiview_reinforce(pBuffer, (unsigned char*)(gray.ptr(0)), gray.cols, gray.rows, (int)gray.step,

  34. 1.2f, 2, 48, 0, 1);

  35. for (int i = 0; i < (pResults ? *pResults : 0); i++)

  36. {

  37. short * p = ((short*)(pResults + 1)) + 142 * i;

  38. rectangle(src, Rect(p[0], p[1], p[2], p[3]), Scalar(0, 255, 0), 2);

  39. if (doLandmark)

  40. {

  41. for (int j = 0; j < 68; j++)

  42. circle(src, Point((int)p[6 + 2 * j], (int)p[6 + 2 * j + 1]), 1, Scalar(0, 0, 255), 2);

  43. }

  44. }

  45. imshow("Show", src);

  46. waitKey(1);

  47. }

  48.  
  49. }

  50. }

最后

以上就是玩命茉莉为你收集整理的人脸特征点检测-于老师算法的全部内容,希望文章能够帮你解决人脸特征点检测-于老师算法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部