opencv聯合dlib人臉檢測例子

2021-08-26 15:28:21 字數 2135 閱讀 3989

原始碼比較簡潔,雜餘資訊全部去掉,原始碼中已經做了中文注釋。本例子是用opencv載入影象,然後呼叫dlib進行人臉檢測,得到人臉所在區域以及特徵點,最後還是用opencv描繪人臉特徵點。

例子原始碼以及解釋:

#include 

#include

#include

#include

#include

#include

#include

#include "opencv2/opencv.hpp"

#include

#include

//由於dlib和opencv中有相當一部分類同名,故不能同時對它們使用using namespace,否則會出現一些莫名其妙的問題

//using namespace dlib;

using

namespace

std;

//using namespace cv;

void line_one_face_detections(cv::mat img, std::vector

fs)p1.x = fs[j].part(i).x();

p1.y = fs[j].part(i).y();

p2.x = fs[j].part(i+1).x();

p2.y = fs[j].part(i+1).y();

cv::line(img, p1, p2, cv::scalar(0,0,255), 2, 4, 0);}}

}int main(int argc, char *argv)

cv::mat frame = cv::imread(argv[1]);

cv::mat dst;

//提取灰度圖

cv::cvtcolor(frame, dst, cv_bgr2gray);

//載入dlib的人臉識別器

dlib::frontal_face_detector detector = dlib::get_frontal_face_detector();

//載入人臉形狀探測器

dlib::shape_predictor sp;

dlib::deserialize("./shape_predictor_68_face_landmarks.dat") >> sp;

//mat轉化為dlib的matrix

dlib::array2ddimg;

dlib::assign_image(dimg, dlib::cv_image(dst));

//獲取一系列人臉所在區域

std::vector

dets = detector(dimg);

std::cout

<< "number of faces detected: "

<< dets.size() << std::endl;

if (dets.size() == 0)

return

0; //獲取人臉特徵點分布

std::vector

shapes;

int i = 0;

for(i = 0; i < dets.size(); i++)

//指出每個檢測到的人臉的位置

for(i=0; i//畫出人臉所在區域

cv::rect r;

r.x = dets[i].left();

r.y = dets[i].top();

r.width = dets[i].width();

r.height = dets[i].height();

cv::rectangle(frame, r, cv::scalar(0, 0, 255), 1, 1, 0);

}line_one_face_detections(frame, shapes);

cv::imshow("frame", frame);

cv::waitkey(0);

return

0;}

效果:

Opencv與dlib聯合進行人臉關鍵點檢測與識別

依賴庫 opencv 2.4.9 dlib 19.0 libfacedetection 本篇不記錄如何配置,重點在實現上。使用libfacedetection實現人臉區域檢測,聯合dlib標記人臉特徵點,最後使用opencv的facerecognizer實現人臉識別。訓練模組 人臉檢測 獲取人臉區域...

dlib人臉識別

的編寫在jupyter notebook中來完成 jupyter notebook是乙個工具 pip install jupyter 安裝使用 如何啟動 命令列輸入 jupyter notebook 前提,環境變數配置成功 dlib安裝 pip install dlib dlib有不同的版本,最新版...

基於dlib和opencv庫的人臉識別

檔名為 shape predictor 68 face landmarks.dat img cv2.imread image img cv2.cvtcolor img,cv2.color bgr2rgb cv2.circle img,center,radius,color,thickness cam...