matlab使用dlib,dlib(C++)人脸关键点检测 for Linux/Mac

背景

上一篇章讲解了Seetaface在Mac端的编译与demo,但Seetaface关键点检测(facial landmark detection)只包含5个关键点,用于人脸姿态矫正完全没问题,但用于美颜、加挂件等场合,则无法施展拳脚。

笔者尝试了编译dlib C++ Library,这是一个开源的C++图像处理、机器学习库,可以作为opencv的一个良好补充,采用Seetaface Detect模块,检测人脸区域,接着将该区域(Rect)输入dlib的关键点检测模型,可以快速实现人脸68个关键点检测。

硬件环境:Intel(R) Core(TM) i5 @ 2.70GHz(mac),单张图片单个人脸,两兄弟默契配合,检测时间如下所示:Seeta_人脸检测耗时:0.1840 秒

dlib_人脸关键点检测耗时:0.0023 秒

检测效果如图(原图来源于网络,侵删):

80de59fdf9f42f962f8ed233760e2042.png

dlib的依赖

dlib安装需要的依赖有openblas,opencv。可以直接使用brew安装。1

2brew install openblas

brew install opencv

X11是执行Unix程序的图形窗口环境。Mac OS X本身的程序是Aqua界面的,但是为了能够兼容unix和linux移植过来的程序(Mac OS X由BSD-UNIX修改而来),比如MatLab,就需要x11窗口环境。

运行dlib需要X11,但Mac目前没有自带X11,需要重新下载安装,下载地址

下载后直接安装,默认安装目录为/opt/X11,需要在/usr/loca/opt目录下创建软连接(最好使用绝对地址),创建命令如下,创建后重启Mac。1

2cd /usr/local/opt

ln -s /opt/X11 X11

编译dlib1

2

3

4

5

6

7git clone https://github.com/davisking/dlib.git

cd dlib/examples

mkdir build

cd build

cmake .. -DUSE_SSE4_INSTRUCTIONS=ON 进行配置

cmake --build . --config Release(此处都是demo,没必要全部进行build,需要用到那些build一下就好了)

运行一个build好的demo1

2

3cd dlib/examples/build/

wget http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2 #下载face landmark模型,并解压文件

./webcam_face_pose_ex

至此,会出现X11窗口,打开Mac摄像头自动检测人脸并标注人脸的landmar。

dlib::Rect 与 opencv::Rect转换

dlib、opencv Rect结构体参数是不同的,所以需要进行一下转换1

2

3

4

5// cv 转 dlib

dlib::rectangle dlibrect;

dlibrect = dlib::rectangle((long)face_rect.tl().x, (long)face_rect.tl().y, (long)face_rect.br().x - 1, (long)face_rect.br().y - 1);

// dlib 转 cv,分别为左上、右下[x,y]坐标

faces[i].left(), faces[i].top(), faces[i].right()+1, faces[i].bottom()

dlib加载图像的两种方式1

2

3

4

5

6

7

8

9

10

11

12

13

14array2d cimg; //dlib方式读取图像(从图像路径)

load_image(cimg, srcImagePath);

std::vector shapes;

array2d cimg(gallery_img_color.rows, gallery_img_color.cols); //dlib方式读取图像(从cv::MAT)

for(int i=0; i < gallery_img_color.rows; i++)

{

for(int j=0; j < gallery_img_color.cols; j++)

{

cimg[i][j].blue = gallery_img_color.at< cv::Vec3b>(i,j)[0];

cimg[i][j].green= gallery_img_color.at< cv::Vec3b>(i,j)[1];

cimg[i][j].red = gallery_img_color.at< cv::Vec3b>(i,j)[2];

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值