Qt平臺下dlib人臉檢測

一、dlib

Dlib是一個機器學習的C++庫,包含了許多機器學習常用的算法。下載:http://www.dlib.net/ml.html       

 

二、安轉qt,設置環境變量,用qt自帶的mingw工具編譯dlib庫

工具路徑:

設置環境變量:

三、dlib

下載:http://dlib.net/files/

 

               解壓,並新建安裝目錄dlib

 

四、cmake

下載:https://cmake.org/download/

           

           

             使用cmake生成Makefile:

             

Configured點擊兩次後,點擊Generate,在安轉目錄下生成Makefile:

五、編譯

 

          進入安轉目錄下,編譯:

完成編譯:

六、安裝dlib

安裝完成:

七、測試

參考G:\dlib-19.7\examples\face_detection_ex.cpp例子,新建qt工程:

 

編譯運行:

八、源碼

.pro

 

QT       +=coregui
QMAKE_CXXFLAGS+=-std=c++0x 
greaterThan(QT_MAJOR_VERSION,4):QT+=widgets 
TARGET=dlibTest
TEMPLATE=app 
SOURCES+=main.cpp\
    mainwindow.cpp 
HEADERS  +=mainwindow.h 
FORMS  +=mainwindow.ui 
LIBS+=$$PWD/dlib/lib/libdlib.a 
INCLUDEPATH+=$$PWD/dlib

 

 

mainwindow.cpp:

 

#include"mainwindow.h"
#include"ui_mainwindow.h"
#include<dlib/image_processing/frontal_face_detector.h>
#include<dlib/gui_widgets.h>
#include<dlib/image_io.h>
#include<dlib/image_processing.h>
#include<iostream> 
#include<QDebug>
#include<QFileDialog>
#include<QString>
#include<QTextCodec>
#include<QImage>
#include<QPainter>
usingnamespacedlib;
MainWindow::MainWindow(QWidget*parent):
    QMainWindow(parent),
    ui(newUi::MainWindow)
{
    ui->setupUi(this);
} 
MainWindow::~MainWindow()
{
    deleteui;
}
voidMainWindow::on_pushButton_clicked()
{
    QStringimgName=QFileDialog::getOpenFileName(this,tr("File"),tr("./"),tr("ImageFile(*.png*.jpg)"));
    if(imgName.isNull())return;
    QTextCodec*code=QTextCodec::codecForName("gb2312");
    std::stringname=code->fromUnicode(imgName).data();
        //--------------------------------------------------
   QImage*labImg=newQImage;
   if(!(labImg->load(name.data())))
   {
      deletelabImg;
      return;
   }
   QPixmappixmap=QPixmap::fromImage(*labImg);
   QPainterpainter(&pixmap);
   painter.setPen(Qt::red);
   //--------------------------------------------------
    frontal_face_detectordetector=get_frontal_face_detector();
    dlib::array2d<unsignedchar>img;
    load_image(img,name.data()); 
    dlib::pyramid_up(img);
    std::vector<dlib::rectangle>dets=detector(img); 
    dlib::rectanglemyRect;
    intfaceCount=dets.size();
    ui->textBrowser->append(QString::number(faceCount));
    for(int32_ti=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);
}

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章