手把手教你Dlib+VS2013+Win7配置(详细)

版权声明:本文为博主原创文章,转载请注明出处:http://blog.csdn.net/eternity1118_。 https://blog.csdn.net/eternity1118_/article/details/79083757

下载文件

Dlib下载

cmake下载

OpenCV

 关于OpenCV就不在赘述了,很简单;     

C++相关配置:利用CMake编译

  • 首先在解压后的dlib根目录下新建一个文件夹,我这里命名为build2013x64,因为我这里使用vs2013,64位
  • 如果你的vs是32位,请选择win32,64位则选择win64
    这里写图片描述
  • 选择完毕,点击‘Configure’,出现configure done,再点击‘Generate’
    这里写图片描述
    编译完成。
  • 点击‘Open Project’,打开工程
  • 如果你是64位,记得一定要将设备管理器平台改为x64
  • 找到ALLBuild,右键工程名,点击‘生成’
  • 这个过程中报了一条错误:basetsd.h(72): error C2371: “INT32”: 重定义;不同的基类型
  • 解决方法:参考这篇article
    http://blog.csdn.net/zhangxiangweide/article/details/76718686
  • 重新生成,ok, 没有问题,打开你的dlib下你刚创建的文件夹,找到debug文件夹,会看到生成有dlib的lib文件:dlib.lib,这个文件就是我们要用的库文件
    这里写图片描述

dlib的使用

vs2013的相关配置:OpenCV和Dlib

这里写图片描述
- 包含目录
这里写图片描述
- 库目录
这里写图片描述
- 附加依赖项
这里写图片描述

测试:人脸检测及对齐

#include "stdafx.h"
#include <iostream>
#include <dlib/opencv.h>
#include <dlib/image_processing/frontal_face_detector.h>
#include <dlib/image_processing/render_face_detections.h>
#include <dlib/image_processing.h>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int _tmain(int argc, _TCHAR* argv[])
{
    dlib::frontal_face_detector detector = dlib::get_frontal_face_detector();
    dlib::shape_predictor pose_model;

    dlib::deserialize("D:\\zhlWorkDocs\\dl\\faceRecognition\\detection\\faceDetect\\Dlib\\shape_predictor_68_face_landmarks.dat") >> pose_model;
    cv::Mat img = imread("D:\\zhlWorkDocs\\testWorksDemo\\detectface\\faceRecognition\\test_image\\test.jpg", 1);
    dlib::cv_image<dlib::bgr_pixel> cimg(img);
    double t = GetTickCount();
    vector<dlib::rectangle> faces = detector(cimg);
    cout << "dlib detect face time is: " << (GetTickCount() - t) / getTickFrequency() << endl;

    vector<dlib::full_object_detection> shapes;
    for (unsigned long i = 0; i < faces.size(); i++)
    {
        shapes.push_back(pose_model(cimg, faces[i]));
    }

    if (!shapes.empty())
    {
        for (int j = 0; j < shapes.size(); j++)
        {
            for (int i = 0; i < 68; i++)
            {
                circle(img, cv::Point(shapes[j].part(i).x(), shapes[j].part(i).y()),
                    3, Scalar(0, 255, 0), -1);
                //putText(img, to_string(i), cv::Point(shapes[0].part(i).x(), shapes[0].part(i).y()),
                //  CV_FONT_HERSHEY_SCRIPT_SIMPLEX, 1, Scalar(0, 0, 255), 1, 4);

            }

        }

    }

    imshow("show_point", img);
    waitKey();

    return 0;
}

运行结果:
这里写图片描述

从结果上来看,Dlib的效果其实并不是想象中的那么好,漏检率很高,只检测到了10个人脸,显然对大倾斜角度,遮挡半边脸的这种情况无法很好检测,相比于MTCNN的效果差了好多,但是速度比MTCNN快,对这幅图而言,检测时间为12个毫秒;果然是鱼和熊掌不可兼得啊。

猜你喜欢

转载自blog.csdn.net/eternity1118_/article/details/79083757