千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:西安千锋IT培训  >  技术干货  >  OpenCV系列教程(十一)dlib人脸检测

OpenCV系列教程(十一)dlib人脸检测

来源:千锋教育
发布人:qyf
时间: 2023-01-12 16:48:49

  一 人脸检测

  dlib 人脸检测器参考代码:

#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 <dlib/gui_widgets.h>

#include <opencv/cv.h>

#include <opencv/highgui.h>

#include <opencv2/opencv.hpp>

#include <opencv2/highgui/highgui.hpp>

#include <opencv2/core/core.hpp>

#include <opencv2/imgproc/imgproc.hpp>

using namespace dlib;

using namespace std;

using namespace cv;

int main(int argc,char *argv[]) 

  {

  frontal_face_detector detector = get_frontal_face_detector();

  cv::Mat mimg = cv::imread(argv[1]);

  dlib::cv_image<bgr_pixel> img(mimg);

  //转成 dlib 格式提取特征

  std::vectorfaces = detector(img);

  for (unsigned int i = 0; i < faces.size(); ++i)

  cv::rectangle(mimg, cv::Rect(faces[i].left(), faces[i].top(), faces[i].width(), faces[i].width()), cv::Scalar(0, 0, 255), 1, 1, 0);

  //画矩形框

  cv::imshow("人脸", mimg);

  cv::waitKey(0);

  }

  二 提取人脸特征点

  dlib 官网有一个训练好的特征模型 shape_predictor_68_face_landmarks.dat,搭建环境时下载的,

  人脸特征提取参考代码:

#include <dlib/image_processing/frontal_face_detector.h>

#include <dlib/image_processing/render_face_detections.h>

#include <dlib/image_processing.h>

#include <dlib/gui_widgets.h>

#include <opencv/cv.h>

#include <opencv/highgui.h>

#include <opencv2/opencv.hpp>

#include <opencv2/highgui/highgui.hpp>

#include <opencv2/core/core.hpp>

#include <opencv2/imgproc/imgproc.hpp>

#include <opencv2/freetype.hpp>

using namespace dlib;

using namespace std;

using namespace cv; 

  int main(int argc,char *argv[])

  {

  frontal_face_detector detector = get_frontal_face_detector();

  shape_predictor sp;

  //提取特征

  deserialize("shape_predictor_68_face_landmarks.dat") >> sp;

  cv::Mat mimg = cv::imread(argv[1]);dlib::cv_image<bgr_pixel> img(mimg);

  std::vectorfaces = detector(img);

  std::vector<full_object_detection> shapes;

  for (unsigned long i = 0; i < faces.size(); ++i)

  shapes.push_back(sp(img, faces[i]));

  for (unsigned long j = 0; j < faces.size(); ++j)

  if (!shapes.empty())

  {

  for (int i = 0; i < 68; i++)//标记特征

  circle(mimg, cvPoint(shapes[j].part(i).x(), shapes[j].part(i).y()), 1, cv::Scalar(0, 255, 0), -1);

  }

  cv::imshow("Dlib 特征点", mimg);

  waitKey(0);

  }

  如果要绘制出人脸特征,dlib 提供了 render_face_detections(shapes)接口,可以通过 dlib 自带 的 image_window 类进行绘制。

  三 人脸识别

  dlib 人脸识别采用了 Resnet 残差神经网络,识别精度高于普通神经网络,同样我们可以到官 网去下载训练好的模型 dlib_face_recognition_resnet_model_v1.dat,通过 net()接口返回 128 维 人脸特征,然后再通过目标图像也同样得到 128 维人脸特征,将两组特征进行对比即可判断出要识 别的对象。

  具体实现参考代码:从图像、视频、摄像头识别出目标人物

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

c++获取文件大小

2023-03-14

OpenCV系列教程(四) 计算 N 维数据关系

2023-01-11

OpenCV系列教程(三)Mat 像素统计技术

2023-01-11

最新文章NEW

jquery字符串转数字

2023-04-21

tomcat端口号配置

2023-03-20

搭建hadoop高可用集群

2023-03-16

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>