python3利用Dlib19.7实现人脸68个特征点标定


Posted in Python onFebruary 26, 2018

0.引言

利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68点标定,利用OpenCv进行图像化处理,在人脸上画出68个点,并标明序号;

实现的68个特征点标定功能如下图所示:

python3利用Dlib19.7实现人脸68个特征点标定

图1 人脸68个特征点的标定 

1.开发环境

python:3.6.3

dlib:19.7

OpenCv, numpy

需要调用的库: 

import dlib #人脸识别的库dlib
import numpy as np #数据处理的库numpy
import cv2 #图像处理的库OpenCv

2.设计流程

工作内容主要以下两大块:68点标定OpenCv绘点

68点标定:

借助官方的Demo(face_landmark_detection.py,在之前另一篇博客里面介绍过学习Python3 Dlib19.7进行人脸面部识别)实现;

OpenCv绘点:

介绍了用到的 画圆函数cv2.circle() 和 输出字符串函数 cv2.putText() ;

流程:

1.调用dlib库来进行人脸识别,调用预测器“shape_predictor_68_face_landmarks.dat”进行68点标定

2.存入68个点坐标

3.利用cv2.circle来画68个点

4.利用cv2.putText()函数来画数字1-68

3.源码

# 68-points
# 2017-12-28
# By TimeStamp
# #cnblogs: http://www.cnblogs.com/AdaminXie/
import dlib      #人脸识别的库dlib
import numpy as np    #数据处理的库numpy
import cv2      #图像处理的库OpenCv

# dlib预测器
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')

path="********************"

# cv2读取图像
img=cv2.imread(path+"test.jpg")

# 取灰度
img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

# 人脸数rects
rects = detector(img_gray, 0)

for i in range(len(rects)):
 landmarks = np.matrix([[p.x, p.y] for p in predictor(img, rects[i]).parts()])

 for idx, point in enumerate(landmarks):
  # 68点的坐标
  pos = (point[0, 0], point[0, 1])

  # 利用cv2.circle给每个特征点画一个圈,共68个
  cv2.circle(img, pos, 5, color=(0, 255, 0))

  # 利用cv2.putText输出1-68
  font = cv2.FONT_HERSHEY_SIMPLEX
  cv2.putText(img, str(idx+1), pos, font, 0.8, (0, 0, 255), 1, cv2.LINE_AA)

cv2.namedWindow("img", 2)
cv2.imshow("img", img)
cv2.waitKey(0)

note:OpenCv的画图函数

         1. 画圆 cv2.circle( img, (p1,p2), r, (255,255,255) )

参数1:

img-

      图片对象;

参数2:

(p1,p2)-

        圆心坐标;

参数3:

r-

    半径;

参数4:

(255,255,255)-  颜色数组;  

 

2. 输出字符 cv2.putText( img,"test", (p1,p2), font, 4, (255,255,255), 2, cv2, LINE_AA )

参数1:

img-

图像对象;

参数2:

"test"-

  需要打印的字符text(数字的话可以利用str()转成字符);

参数3:

(p1,p2)-

    坐标textOrg;

参数4:

font-

字体fontFace(注意这里 font = cv2.FONT_HERSHEY_SIMPLEX);

参数5:

4-

 字号fontScale;

参数6:

(255,255,255)-   颜色数组;

参数7:

2-

  线宽thickness;

参数8:

LINE_AA-

    线条种类line_type;

*关于 颜色数组:

(255,255,255), (蓝色绿色红色),每个值都是0-255;

比如:蓝色(255,0,0),紫色(255,0,255)

可以调整cv2.circle()函数和cv2.putText()函数中的 半径、线宽 等参数使得输出满足需求方便查看;

结果:

python3利用Dlib19.7实现人脸68个特征点标定

图2 测试结果1 

python3利用Dlib19.7实现人脸68个特征点标定

图3 测试结果2

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python version 2.7 required, which was not found in the registry
Aug 26 Python
Python中下划线的使用方法
Mar 27 Python
Python 列表(List) 的三种遍历方法实例 详解
Apr 15 Python
详解Golang 与python中的字符串反转
Jul 21 Python
Python3中的列表,元组,字典,字符串相关知识小结
Nov 10 Python
python各层级目录下import方法代码实例
Jan 20 Python
python 装饰器功能与用法案例详解
Mar 06 Python
Python urllib2运行过程原理解析
Jun 04 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
Sep 23 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
Nov 25 Python
Python和Bash结合在一起的方法
Nov 13 Python
matplotlib交互式数据光标mpldatacursor的实现
Feb 03 Python
python微信跳一跳系列之棋子定位颜色识别
Feb 26 #Python
python微信跳一跳系列之棋子定位像素遍历
Feb 26 #Python
python3.6+opencv3.4实现鼠标交互查看图片像素
Feb 26 #Python
python微信跳一跳系列之自动计算跳一跳距离
Feb 26 #Python
python微信跳一跳系列之色块轮廓定位棋盘
Feb 26 #Python
tensorflow入门之训练简单的神经网络方法
Feb 26 #Python
基于Python实现的微信好友数据分析
Feb 26 #Python
You might like
虹吸式咖啡壶操作
2021/03/03 冲泡冲煮
设置php页面编码的两种方法示例介绍
2014/03/03 PHP
javascript 关闭IE6、IE7
2009/06/01 Javascript
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
2014/01/07 Javascript
javascript中的__defineGetter__和__defineSetter__介绍
2014/08/15 Javascript
一个JavaScript递归实现反转数组字符串的实例
2014/10/14 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
2016/06/21 Javascript
最丑的时钟效果!js canvas时钟制作方法
2016/08/15 Javascript
JSON字符串和JSON对象相互转化实例详解
2017/01/05 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
详解angular2实现ng2-router 路由和嵌套路由
2017/03/24 Javascript
JavaScript ES6中const、let与var的对比详解
2017/06/18 Javascript
jQuery plugin animsition使用小结
2017/09/14 jQuery
使用vue-cli+webpack搭建vue开发环境的方法
2017/12/22 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
JS实现li标签的删除
2019/04/12 Javascript
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
django 自定义用户user模型的三种方法
2014/11/18 Python
利用Python开发实现简单的记事本
2016/11/15 Python
python中plot实现即时数据动态显示方法
2018/06/22 Python
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
详解python中的Turtle函数库
2018/11/19 Python
在Pycharm中将pyinstaller加入External Tools的方法
2019/01/16 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
Pycharm中切换pytorch的环境和配置的教程详解
2020/03/13 Python
python中有帮助函数吗
2020/06/19 Python
美国领先的水果篮送货公司和新鲜水果供应商:The Fruit Company
2018/02/13 全球购物
将时尚融入珠宝:Adornmonde
2019/10/17 全球购物
专科毕业生求职简历的自我评价
2013/10/12 职场文书
勤俭节约演讲稿
2014/05/08 职场文书
2014年9.18纪念日演讲稿
2014/09/14 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
个人四风问题对照检查材料思想汇报
2014/10/06 职场文书
毕业生捐书活动倡议书
2015/04/27 职场文书
2015年社区反邪教工作总结
2015/10/14 职场文书