前言

前面的博客(python dlib学习(二):人脸特征点标定)介绍了使用dlib识别68个人脸特征点,但是当时使用的是dlib官方给出的训练好的模型,这次要自己训练一个特征点检测器出来。当然,想要达到state-of-art的效果需要自己调参,这也是一个苦差了。后面会给出训练和测试的程序,完整工程的下载链接我会放在博文的最后。

数据集准备

这里可以选择自己制作也可以使用dlib源码中提供的测试用的数据集。这些图片存在源码目录中的/examples/faces里面。

先看看源码中提供的数据集吧:

数据集不大,作为测试使用足够了。如果希望达到state-of-art的效果,还是需要增大数据集,以及调试出合适的参数。
dlib中的人脸特征点检测算法都是基于CVPR 2014的One Millisecond Face Alignment with an Ensemble of Regression Trees这篇论文实现。自己调参的话,还是有必要读读这篇论文。

训练前还需要在数据集中打好label,这些label都保存在那几个xml文件当中。
打开training_with_face_landmarks.xml

里面保存了每张图片中的人脸的位置,以及68个特征点的位置信息。

打label时需要使用到dlib提供的imglab工具。
有关imlab的使用,我在这篇博文中有介绍: python dlib学习(六):训练自己的模型进行识别。
imglab很容易使用,在这里不做赘述。如果想自己制作数据集训练请自行使用imglab制作。
使用imglab打开xml文件看看:

密密麻麻地标注好了人脸的位置和特征点的位置。

训练

上代码。

# coding: utf-8
#
#   This example program shows how to use dlib's implementation of the paper:
#   One Millisecond Face Alignment with an Ensemble of Regression Trees by
#   Vahid Kazemi and Josephine Sullivan, CVPR 2014import os
import cv2
import dlib
import globcurrent_path = os.getcwd()
faces_path = current_path + '/examples/faces'# 训练部分
# 参数设置
options = dlib.shape_predictor_training_options()
options.oversampling_amount = 300
options.nu = 0.05
options.tree_depth = 2
options.be_verbose = True# 导入打好了标签的xml文件
training_xml_path = os.path.join(faces_path, "training_with_face_landmarks.xml")
# 进行训练,训练好的模型将保存为predictor.dat
dlib.train_shape_predictor(training_xml_path, "predictor.dat", options)
# 打印在训练集中的准确率
print "\nTraining accuracy:{0}".format(dlib.test_shape_predictor(training_xml_path, "predictor.dat"))# 导入测试集的xml文件
testing_xml_path = os.path.join(faces_path, "testing_with_face_landmarks.xml")
# 打印在测试集中的准确率
print "\Testing accuracy:{0}".format(dlib.test_shape_predictor(testing_xml_path, "predictor.dat"))

训练结果

程序运行后,会打印参数信息,随后开始训练:

训练完成:

测试

我们需要导入之前训练好的模型文件predictor.dat,使用其进行识别。如何检测并进行显示,就不注释了,可以参考我以前的博客:python dlib学习(二):人脸特征点标定。

# coding: utf-8
#
#   This example program shows how to use dlib's implementation of the paper:
#   One Millisecond Face Alignment with an Ensemble of Regression Trees by
#   Vahid Kazemi and Josephine Sullivan, CVPR 2014import os
import cv2
import dlib
import glob# 测试部分
# 导入训练好的模型文件
predictor = dlib.shape_predictor("predictor.dat")detector = dlib.get_frontal_face_detector()
print("Showing detections and predictions on the images in the faces folder...")
for f in glob.glob(os.path.join(faces_path, "*.jpg")):print("Processing file: {}".format(f))img = cv2.imread(f)img2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)dets = detector(img2, 1)print("Number of faces detected: {}".format(len(dets)))for index, face in enumerate(dets):print('face {}; left {}; top {}; right {}; bottom {}'.format(index, face.left(), face.top(), face.right(), face.bottom()))# left = face.left()# top = face.top()# right = face.right()# bottom = face.bottom()# cv2.rectangle(img, (left, top), (right, bottom), (0, 255, 0), 3)# cv2.namedWindow(f, cv2.WINDOW_AUTOSIZE)# cv2.imshow(f, img)shape = predictor(img, face)# print(shape)# print(shape.num_parts)for index, pt in enumerate(shape.parts()):print('Part {}: {}'.format(index, pt))pt_pos = (pt.x, pt.y)cv2.circle(img, pt_pos, 2, (255, 0, 0), 1)#print(type(pt))#print("Part 0: {}, Part 1: {} ...".format(shape.part(0), shape.part(1)))cv2.namedWindow(f, cv2.WINDOW_AUTOSIZE)cv2.imshow(f, img)cv2.waitKey(0)
cv2.destroyAllWindows()

测试结果

完整工程下载链接;
http://download.csdn.net/download/hongbin_xu/10115166

python dlib学习(八):训练人脸特征点检测器相关推荐

  1. python dlib学习(二):人脸特征点标定

    前言 上次介绍了人脸检测的程序(python dlib学习(一):人脸检测),这次介绍人脸特征点标定.dlib提供了训练好的模型,可以识别人脸的68个特征点. 下载链接:http://pan.baid ...

  2. python dlib学习(七):人脸特征点对齐

    前言 前面的博客介绍过人脸特征点标定:python dlib学习(二):人脸特征点标定.这次试着使用这些人脸特征点来对人脸进行对齐. 完整工程链接附在文章最后. 程序 上代码,程序中使用了python ...

  3. python dlib学习(九):人脸聚类

    前言 前面的博客介绍过使用dlib进行人脸检测.比对.检测特征点等等操作. python dlib学习(一):人脸检测 python dlib学习(二):人脸特征点标定 python dlib学习(五 ...

  4. python dlib学习(五):比对人脸

    前言 在前面的博客中介绍了,如何使用dlib标定人脸(python dlib学习(一):人脸检测),提取68个特征点(python dlib学习(二):人脸特征点标定).这次要在这两个工作的基础之上, ...

  5. python dlib学习(三):调用cnn人脸检测

    前言 调用训练好的卷积神经网络(CNN)模型进行人脸检测. 模型下载链接:http://dlib.net/files/mmod_human_face_detector.dat.bz2 程序 注:使用了 ...

  6. python dlib学习(十一):眨眼检测

    前言 我们要使用opencv和dlib实现在视频流中实时检测和计数眨眼次数. 参考论文:Real-Time Eye Blink Detection using Facial Landmarks 作者在 ...

  7. python dlib学习(六):训练模型

    前言 前面的博客都是使用dlib官方提供的训练好的模型,进行目标识别. - python dlib学习(一):人脸检测 - python dlib学习(二):人脸特征点标定 - python dlib ...

  8. python dlib学习(十):换脸

    前言 这次再用dlib来做一个很酷的应用:换脸.在百度可以搜出一大堆转载的,里面虽然讲的不是很详细(数学部分),个人感觉大多数人对于奇异值分解.仿射变换矩阵 怎么实现根本不敢兴趣,只想上代码实现功能, ...

  9. python dlib学习(十二):面部表情跟踪

    前言 面部表情跟踪的原理就是检测人脸特征点,根据特定的特征点可以对应到特定的器官,比如眼睛.鼻子.嘴巴.耳朵等等,以此来跟踪各个面部器官的动作. 程序实现 原理很简单,下面直接上程序了: # *_*c ...

最新文章

  1. 【带你玩转主题模型Topic Model】—— 之 利用sklearn 实现Latetnt Dirichlet Allocation(LDA)主题模型
  2. Java实现话术词槽匹配_知识图谱与KBQA——槽填充
  3. handsome对应php文件,handsome主题魔改教程
  4. (转)Three challenges you’re going to face when building a chatbot
  5. 【渝粤题库】国家开放大学2021春1443卫生信息与文献检索题目
  6. 单链表的应用(电话本)
  7. 容器底层实现技术Namespace/Cgroup
  8. redis持久化RDB与AOF
  9. Apache Flink 学习教程----持续更新
  10. 【2018盘点VR一体机那些事】手机VR眼镜和VR一体机有什么区别?AR,VR眼镜和VR一体机哪个好?
  11. 拼多多批发是什么?常见的问题有哪些?
  12. 【MDT】iPhone XS 系列屏幕素质报告
  13. Matlab画正态分布并标点
  14. Win10运行红色警戒2尤里的复仇联机技巧+防守地图
  15. SpaceSniffer(磁盘大小扫描分析) 彻底解决C盘爆满问题 清理C盘必备软件
  16. Mac桌面莫名出现黑色输入框的关闭方法
  17. 美术集网校--常见的水粉调色纯干货分享,记得收藏!
  18. DX7游戏引擎(梦想之翼) for VB6
  19. centos安装mysql5.7.19报 error while loading shared libraries: libaio.so.1
  20. 上海交通大学学生生存手册_给学生的生存技巧

热门文章

  1. js最小化浏览器_Handtrack.js 开源:3行JS代码搞定手部动作跟踪
  2. grep从文件末尾开始找_c++ 开始之旅
  3. 顺序表应用2:多余元素删除之建表算法
  4. 【自动驾驶】4.分布式实时通信——DDS技术
  5. 10 个常见的 Linux 终端仿真器
  6. Oracle 表连接方式(内连接/外连接/自连接) 详解
  7. Java程序员从笨鸟到菜鸟之(三十)javascript弹出框、事件、对象化编程
  8. 多个类的DLL封装及调用
  9. 杰出数据科学家的关键技能是什么?
  10. 意大利罗马银行连环抢劫案告破 一名警察涉案