zoukankan      html  css  js  c++  java
  • 如何快糙好猛的使用libfacedetection库【最新版】

    前言

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

    配置

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

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

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

    代码

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

    #include <opencv.hpp>
    #include <facedetect-dll.h>
    using namespace cv;
    using namespace std;
    
    //define the buffer size. Do not change the size!
    #define DETECT_BUFFER_SIZE 0x20000
    
    int main()
    {
        int * pResults = NULL;
        //pBuffer is used in the detection functions.
        //If you call functions in multiple threads, please create one buffer for each thread!
        unsigned char * pBuffer = (unsigned char *)malloc(DETECT_BUFFER_SIZE);
        if (!pBuffer)
        {
            fprintf(stderr, "Can not alloc buffer.
    ");
            return -1;
        }
        Mat src = imread("img.jpg");
        Mat gray;
        cvtColor(src, gray, CV_BGR2GRAY);
        int doLandmark = 1;// do landmark detection
        pResults = facedetect_multiview_reinforce(pBuffer, (unsigned char*)(gray.ptr(0)), gray.cols, gray.rows, (int)gray.step,
            1.2f, 2, 48, 0, doLandmark);
        //print the detection results
        for (int i = 0; i < (pResults ? *pResults : 0); i++)
        {
            short * p = ((short*)(pResults + 1)) + 142 * i;
            rectangle(src, Rect(p[0], p[1], p[2], p[3]), Scalar(0, 255, 0), 2);
            if (doLandmark)
            {
                for (int j = 0; j < 68; j++)
                    circle(src, Point((int)p[6 + 2 * j], (int)p[6 + 2 * j + 1]), 1, Scalar(0, 0, 255),2);
            }
        }
        imshow("Show", src);
        waitKey(0);
    }

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

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

    #include <opencv.hpp>
    #include <facedetect-dll.h>
    using namespace cv;
    using namespace std;
    
    //define the buffer size. Do not change the size!
    #define DETECT_BUFFER_SIZE 0x20000
    
    int main()
    {
        int * pResults = NULL;
        //pBuffer is used in the detection functions.
        //If you call functions in multiple threads, please create one buffer for each thread!
        unsigned char * pBuffer = (unsigned char *)malloc(DETECT_BUFFER_SIZE);
        if (!pBuffer)
        {
            fprintf(stderr, "Can not alloc buffer.
    ");
            return -1;
        }
        int doLandmark = 1;// do landmark detection
        VideoCapture cap(0);
        if (!cap.isOpened()){
            cout << "Please check your USB camera's interface num." << endl;
            return 0;
        }
        Mat src;
        while (true)
        {
            cap >> src;
            if (!src.empty()){
                Mat gray;
                cvtColor(src, gray, CV_BGR2GRAY);
                pResults = facedetect_multiview_reinforce(pBuffer, (unsigned char*)(gray.ptr(0)), gray.cols, gray.rows, (int)gray.step,
                    1.2f, 2, 48, 0, 1);
                for (int i = 0; i < (pResults ? *pResults : 0); i++)
                {
                    short * p = ((short*)(pResults + 1)) + 142 * i;
                    rectangle(src, Rect(p[0], p[1], p[2], p[3]), Scalar(0, 255, 0), 2);
                    if (doLandmark)
                    {
                        for (int j = 0; j < 68; j++)
                            circle(src, Point((int)p[6 + 2 * j], (int)p[6 + 2 * j + 1]), 1, Scalar(0, 0, 255), 2);
                    }
                }
                imshow("Show", src);
                waitKey(1);
            }
    
        }
    }
  • 相关阅读:
    LeetCode15题: 寻找三数和,附完整代码
    LeetCode 11 水池蓄水问题
    分布式初探——分布式事务与两阶段提交协议
    高等数学——讲透求极限两大方法,夹逼法与换元法
    书籍推荐——一本老书,吴军老师《数学之美》
    概率统计——期望、方差与最小二乘法
    算法浅谈——递归算法与海盗分金问题
    机器学习基础——带你实战朴素贝叶斯模型文本分类
    线性代数精华——从正交向量到正交矩阵
    LeetCode10 Hard,带你实现字符串的正则匹配
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9412024.html
Copyright © 2011-2022 走看看