• Stars
    star
    193
  • Rank 201,081 (Top 4 %)
  • Language
    C++
  • Created over 6 years ago
  • Updated over 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

使用OpenCV实现人脸关键点检测

opencv-facial-landmark-detection

Summary:利用OpenCV中的LBF算法进行人脸关键点检测(Facial Landmark Detection)

Author: Amusi

Date: 2018-03-20

Note: OpenCV3.4+OpenCV-Contrib以及上支持Facemark

下面是Amusi具体利用OpenCV中的LBF算法进行人脸关键点检测的教程,**大家如果喜欢这个教程,记得给个star!**项目的教程和源码,只需要你在命令行或终端打开git后,输入下述命令即可,或者直接点击Clone or download,并选择Download ZIP下载压缩包即可。

git clone https://github.com/amusi/opencv-facial-landmark-detection.git

测试环境

Note:感谢apple ^(oo)^兰 童鞋的提醒,注意本教程一定需要OpenCV-Contrib的支持。即你的OpenCV环境需要使用CMake对OpenCV和OpenCV-Contrib进行编译,生成动态链接库。版本最好是3.4.1。

引言

人脸一般是有68个关键点,常用的人脸开源库有Dlib,还有很多深度学习的方法。

OpenCV Facemark : Facial Landmark Detection

本教程仅利用OpenCV,不依赖其它第三方库来实现人脸关键点检测,这一特性是之前没有的。因为OpenCV自带的samples中只有常见的人脸检测、眼睛检测和眼镜检测等(方法是harr+cascade或lbp+cascade)。

本教程主要参考Facemark : Facial Landmark Detection using OpenCV

截止到2018-03-20,OpenCV3.4可支持三种人脸关键点检测,但目前只能找到一种已训练好的模型,所以本教程只介绍一种实现人脸关键点检测的算法。而且此类算法还没有Python接口,所以这里只介绍C++的代码实现。

Facemark API

OpenCV官方的人脸关键点检测API称为Facemark。Facemark目前分别基于下述三篇论文,实现了三种人脸关键点检测的方法。

在写这篇文章的时候,FacemarkKazemi类似乎不是从Facemark类派生的,而其他两个类都是。

Facemark训练好的模型

尽管Facemark API包含三种不同的实现,但只有FacemarkLBF(local binary features,LBF)才提供经过训练的模型。 (之后在我们根据公共数据集训练我们自己的模型后,这篇文章将在未来更新)

你可以从中下载已训练好的模型:

利用OpenCV代码进行实时人脸关键点检测

步骤

1. 加载人脸检测器(face detector)

所有的人脸关键点检测算法的输入都是一个截切的人脸图像。因为,我们的第一步就是在图像中检测所有的人脸,并将所有的人脸矩形框输入到人脸关键点检测器中。这里,我们可以使用OpenCV的Haar人脸检测器或者lbp人脸检测器来检测人脸。

2. 创建Facemark对象

创建Facemark类的对象。在OpenCV中,Facemark是使用智能指针(smart pointer,PTR),所以我们不需要考虑内存泄漏问题。

3. 加载landmark检测器

加载关键点检测器(lbfmodel.yaml)。此人脸检测器是在几千幅带有关键点标签的人脸图像上训练得到的。

带有注释/标签关键点的人脸图像公共数据集可以访问这个链接下载:https://ibug.doc.ic.ac.uk/resources/facial-point-annotations/

4.从网络摄像头中捕获帧

捕获视频帧并处理。我们既可以打开一个本地视频(.mp4),也可以打开网络摄像机(如果电脑有的话)来进行人脸关键点检测。

5. 检测人脸

我们对视频的每一帧运行人脸检测器。人脸检测器的输出是一个包含一个或多个矩形(rectangles)的容器(vector),即视频帧中可能有一张或者多张人脸。

6. 运行人脸关键点检测器

我们根据人脸矩形框截取原图中的人脸ROI,再利用人脸关键点检测器(facial landmark detector)对人脸ROI进行检测。

对于每张脸我们获得,我们可以获得68个关键点,并将其存储在点的容器中。因为视频帧中可能有多张脸,所以我们应采用点的容器的容器。

7. 绘制人脸关键点

根据获得关键点,我们可以在视频帧上绘制出来并显示。

代码

本教程的代码一共有两个程序,分别为faceLandmarkDetection.cppdrawLandmarks.hpp

  • faceLandmarkDetection.cpp实现视频帧捕获、人脸检测、人脸关键点检测;

  • drawLandmarks.hpp实现人脸关键点绘制和多边形线绘制。

faceLandmarkDetection.cpp和drawLandmarks.hpp都在src文件夹中

实验结果

检测结果

Reference

[1]Tutorial:https://www.learnopencv.com/facemark-facial-landmark-detection-using-opencv/

[2]Code:https://github.com/spmallick/learnopencv/tree/master/FacialLandmarkDetection

[3]Models:https://github.com/kurnianggoro/GSOC2017

[4]本教程所有文件打包:

链接1(百度云网盘):https://pan.baidu.com/s/16PZ-McVgRwB3bH1Y2fEWBA 密码:x8be

链接2:http://anonfile.com/e9caRad3bf/Facemark_LBF.rar

More Repositories

1

CVPR2024-Papers-with-Code

CVPR 2024 论文和开源项目合集
17,414
star
2

awesome-object-detection

Awesome Object Detection based on handong1587 github: https://handong1587.github.io/deep_learning/2015/10/09/object-detection.html
7,292
star
3

Deep-Learning-Interview-Book

深度学习面试宝典(含数学、机器学习、深度学习、计算机视觉、自然语言处理和SLAM等方向)
7,287
star
4

daily-paper-computer-vision

记录每天整理的计算机视觉/深度学习/机器学习相关方向的论文
6,226
star
5

AI-Job-Notes

AI算法岗求职攻略(涵盖准备攻略、刷题指南、内推和AI公司清单等资料)
5,007
star
6

awesome-lane-detection

A paper list of lane detection.
2,886
star
7

ICCV2023-Papers-with-Code

ICCV 2023 论文和开源项目合集
2,470
star
8

ECCV2024-Papers-with-Code

ECCV 2024 论文和开源项目合集,同时欢迎各位大佬提交issue,分享ECCV 2024论文和开源项目
1,671
star
9

TensorFlow-From-Zero-To-One

TensorFlow 最佳学习资源大全(含课程、书籍、博客、公开课等内容)
Jupyter Notebook
1,131
star
10

CV-Company-List

中国提供计算机视觉(CV)算法岗位的公司名单,欢迎大家提交issues进行补充
936
star
11

PyTorch-From-Zero-To-One

PyTorch从入门到精通
867
star
12

awesome-ai-awesomeness

A curated list of awesome awesomeness about artificial intelligence
821
star
13

AI-Job-Recommend

国内公司人工智能方向(含机器学习、深度学习、计算机视觉和自然语言处理)岗位的招聘信息(含全职、实习和校招)
752
star
14

CVPR2019-Code

CVPR 2019 Paper with Code
640
star
15

AI-Job-Resume

AI 算法岗简历模板
547
star
16

YOLO-Reproduce-Summary

YOLO reproduce summary (now based on YOLOv3)
350
star
17

machine-learning-yearning-cn

吴恩达《Machine Learning Yearning》的中英文版(更新中):第1~第22章
258
star
18

daily-question

每日一题(涉及但不仅限于机器学习、深度学习和计算机视觉等方向)
189
star
19

coding-note

刷题笔记:LeetCode和剑指Offer等
C++
90
star
20

awesome-image-stitching

详尽地介绍关于图像拼接的知识点
76
star
21

CVPR2021-Code

CVPR 2021 论文开源项目(paper with code)合集,同时欢迎各位大佬提交issue,分享CVPR 2021开源项目
70
star
22

Non-Maximum-Suppression

描述非极大值抑制(Non-Maximum-Suppression,NMS)
Python
55
star
23

cpp-from-zero-to-one

Learning C++ from zero to one
52
star
24

awesome-data-label-tools

开源的标注工具大全(含2D图像/视频/3D点云等)
48
star
25

paper-note

记录精读的paper日记
44
star
26

Computer-Vision-Tasks-Survey

【CVer出品】旨在盘点最全面的计算机视觉方向
31
star
27

Python-From-Zero-to-One

零基础入门学Python
Python
24
star
28

SIFT-GPU

A CUDA implementation of SIFT
C
23
star
29

Amusi-Note

Amusi 笔记
20
star
30

AI-Resources

AI方向资料汇总,涵盖机器学习,深度学习,计算机视觉等方向
10
star
31

Learning_OpenCV

Learning OpenCV(C++/Python)
Python
4
star
32

Deep-Learning-Note

深度学习的笔记
3
star
33

libjpeg-turbo-examples

libjpeg-turbo的简单实例(如打开图像、保存图像等)
C
3
star
34

amusi

2
star
35

awesome-image-stitching-code

The program is about image's sticthing
C++
2
star
36

SLAM-From-Zero-To-One

从理论到实践来学习SLAM
2
star
37

Merry_Christmas_Hat

Wear a christmas hat
Python
2
star
38

Machine-Learning-with-Python

Machine-Learning-with-Python follow sentdex
Python
1
star
39

amusi.github.io

the homepage of Amusi
HTML
1
star
40

TensorFlow_Practice

TensorFlow 实战Google深度学习框架
Python
1
star
41

python-numpy-tutorial-ch

简单的Python-Numpy入门教程
1
star