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中列表(list)操作方法汇总
Aug 18 Python
python通过ssh-powershell监控windows的方法
Jun 02 Python
Python 网页解析HTMLParse的实例详解
Aug 10 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
Oct 01 Python
Python 加密与解密小结
Dec 06 Python
Python3删除排序数组中重复项的方法分析
Jan 31 Python
python调用动态链接库的基本过程详解
Jun 19 Python
pyqt 多窗口之间的相互调用方法
Jun 19 Python
Python使用Turtle库绘制一棵西兰花
Nov 23 Python
django-crontab实现服务端的定时任务的示例代码
Feb 17 Python
python和c语言哪个更适合初学者
Jun 22 Python
python中取绝对值简单方法总结
Jul 24 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
php部分常见问题总结
2008/03/27 PHP
php+iframe实现隐藏无刷新上传文件
2012/02/10 PHP
分享常见的几种页面静态化的方法
2015/01/08 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
2019/03/18 PHP
Firefox中beforeunload事件的实现缺陷浅析
2012/05/03 Javascript
jquery插件开发之实现md5插件
2014/03/17 Javascript
js中的caller和callee属性介绍和例子
2014/06/07 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
2014/10/11 Javascript
JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法
2016/08/19 Javascript
js 简易版滚动条实例(适用于移动端H5开发)
2017/06/26 Javascript
微信小程序获取循环元素id以及wx.login登录操作
2017/08/17 Javascript
浅谈es6 javascript的map数据结构
2017/12/14 Javascript
微信小程序实现圆形进度条动画
2020/11/18 Javascript
keep-alive不能缓存多层级路由菜单问题解决
2020/03/10 Javascript
基于VSCode调试网页JavaScript代码过程详解
2020/07/20 Javascript
vue通过过滤器实现数据格式化
2020/07/20 Javascript
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
numpy基础教程之np.linalg
2019/02/12 Python
python模块之subprocess模块级方法的使用
2019/03/26 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
Django 外键的使用方法详解
2019/07/19 Python
django框架用户权限中的session缓存到redis中的方法
2019/08/06 Python
Python双链表原理与实现方法详解
2020/02/22 Python
Python numpy矩阵处理运算工具用法汇总
2020/07/13 Python
Python 保存加载mat格式文件的示例代码
2020/08/04 Python
PyQt5结合matplotlib绘图的实现示例
2020/09/15 Python
在印度上传处方,在线订购药品:Medlife
2019/03/28 全球购物
园林设计师自荐信
2013/11/18 职场文书
新闻编辑专业毕业自荐书范文
2014/02/05 职场文书
财务负责人任命书
2014/06/06 职场文书
校运动会广播稿(100篇)
2014/09/12 职场文书
观后感开头
2015/06/19 职场文书
用人单位的规章制度,怎样制定才是有效的?
2019/07/09 职场文书
vue2实现provide inject传递响应式
2021/05/21 Vue.js
Java实现二分搜索树的示例代码
2022/03/17 Java/Android