用QT做点事(六):编译dlib库

    Dlib是非常优秀的机器学习库,可以无需编译直接用visual studio进行调用,但是需要在release模式下才能成功。对于QT creator MignGM版本编译dlib,现有的教程十分少,在连续几天的失败之后,参考博客:

https://blog.csdn.net/qq_18854309/article/details/78094225

    终于在今天,编译成功,现在总结一下:

1、下载并安装相关软件包:    

    cmake我使用的版本为cmake-3.8.0-rc1-win32-x86,32位的cmake、QT minGM版本为5.9.6, dlib版本为19.7。

    下载地址分别为:

    https://cmake.org/files/v3.8/

    http://dlib.net/files/

   注意,安装完QT后,将以下两个路径添加到系统环境变量path中去:

    D:\softWare\Qt\5.9.6\mingw53_32\bin

    D:\softWare\Qt\Tools\mingw530_32\bin

    注:环境变量配置完成后,最好重启以下电脑,让环境变量生效。

     然后,打开cmake的gui界面,将dlib路径和编译路径配置好,我这里设置的编译路径是新建一个dlib文件夹,然后在里面新建一个build子文件夹,然后将build文件夹设置为二进制文件的存放路径:


    

cmake gui界面:


    2、点击configure,设置生成器及编译器

    生成器设置为MinGW Makefiles


选择Specify native compilers,设置编译器:

这里gcc和g++位于路径:D:\softWare\Qt\Tools\mingw530_32\bin


点击Finish。

3、设置编译选项(这一步很重要)


    取消GIF格式支持,因为这个需要另外安装库,不然会报错,INSTALL_PREFIX对应就是最终编译完成,得到库的保存路径。另外两个矩阵运算库,如果已经提前安装了,可以勾选。

    然后,configure -> Generate

    4、编译

    这一步就很简单了,只需要进入刚才编译的二进制文件保存路径,启动cmd


    依次运行:

    mingw32-make    

    mingw32-make install

    这样就可以完成编译。

    5、测试

    这个就直接贴代码了:

    配置文件:

LIBS+=D:\library\dlib\lib/libdlib.a
INCLUDEPATH+=D:\library\dlib\include

    cpp文件:

void MainWindow::on_pushButton_clicked()
{
    QString imgName = QFileDialog::getOpenFileName( this, tr("Open Image"), ".",tr("Image Files(*.png *.jpg *.jpeg *.bmp)"));
    if(imgName.isNull())return;
    QTextCodec*code=QTextCodec::codecForName("gb2312");
    std::string name=code->fromUnicode(imgName).data();
    //--------------------------------------------------
    QImage*labImg=new QImage;
    if(!(labImg->load(name.data())))
    {
        delete labImg;
        return;
    }
    QPixmap pixmap=QPixmap::fromImage(*labImg);
    QPainter painter(&pixmap);
    painter.setPen(Qt::red);
    //--------------------------------------------------
    frontal_face_detector detector=get_frontal_face_detector();
    dlib::array2d<unsigned char>img;
    load_image(img,name.data());
    dlib::pyramid_up(img);
    std::vector<dlib::rectangle>dets=detector(img);
    dlib::rectangle myRect;
    int faceCount=dets.size();
    ui->textBrowser->append(QString::number(faceCount));
    for(int32_t i=0; i < faceCount; i++)
    {
        myRect=dets.at(i);
        ui->textBrowser->append("x:"+QString::number(myRect.left()/2));
        ui->textBrowser->append("y:"+QString::number(myRect.top()/2));
        ui->textBrowser->append("width:"+QString::number(myRect.width()/2));
        ui->textBrowser->append("height:"+QString::number(myRect.height()/2));
        painter.drawRect(myRect.left()/2,myRect.top()/2,myRect.width()/2,myRect.height()/2);
    }
    ui->label->setPixmap(pixmap);

}

    效果如下:

    


猜你喜欢

转载自blog.csdn.net/sinat_31425585/article/details/80904432
今日推荐