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 相关文章推荐
Django静态资源URL STATIC_ROOT的配置方法
Nov 08 Python
Python中的面向对象编程详解(下)
Apr 13 Python
Python利用IPython提高开发效率
Aug 10 Python
详细介绍Python的鸭子类型
Sep 12 Python
Python Socket编程详细介绍
Mar 23 Python
Python使用当前时间、随机数产生一个唯一数字的方法
Sep 18 Python
Python 解决中文写入Excel时抛异常的问题
May 03 Python
python 查找文件名包含指定字符串的方法
Jun 05 Python
详解Django-channels 实现WebSocket实例
Aug 22 Python
解决Pycharm 导入其他文件夹源码的2种方法
Feb 12 Python
爬虫代理的cookie如何生成运行
Sep 22 Python
Python+Xlwings 删除Excel的行和列
Dec 19 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函数getenv简介和使用实例
2014/05/12 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
2017/07/03 PHP
PHP模版引擎原理、定义与用法实例
2019/03/29 PHP
几个javascript操作word的参考代码
2009/10/26 Javascript
拖动布局之保存布局页面cookies篇
2010/10/29 Javascript
捕获键盘事件(且兼容各浏览器)
2013/07/03 Javascript
选择复选框按钮置灰否则按钮可用
2014/05/22 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
Javascript基础教程之数据类型 (布尔型 Boolean)
2015/01/18 Javascript
jquery+easeing实现仿flash的载入动画
2015/03/10 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
2015/05/01 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
全面了解JavaScript的数据类型转换
2016/07/01 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
2016/11/16 Javascript
AngularJS使用angular.bootstrap完成模块手动加载的方法分析
2017/01/19 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
node.js爬取中关村的在线电瓶车信息
2018/11/13 Javascript
在Vue中创建可重用的 Transition的方法
2020/06/02 Javascript
python根据出生年份简单计算生肖的方法
2015/03/27 Python
Python多线程编程(五):死锁的形成
2015/04/05 Python
unittest+coverage单元测试代码覆盖操作实例详解
2018/04/04 Python
解决seaborn在pycharm中绘图不出图的问题
2018/05/24 Python
利用pandas进行大文件计数处理的方法
2018/07/25 Python
浅谈Pandas:Series和DataFrame间的算术元素
2018/12/22 Python
Python3远程监控程序的实现方法
2019/07/15 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
2020/05/18 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
美国咖啡批发网站:Coffee.org
2017/06/29 全球购物
英国发展最快的在线超市之一:Click Marketplace
2021/02/15 全球购物
班长岗位职责
2013/11/10 职场文书
决心书范文
2014/03/11 职场文书
大学生活动总结模板
2014/07/02 职场文书
2015年手术室工作总结
2015/05/11 职场文书
餐厅营销的秘密:为什么老顾客会流水?
2019/08/08 职场文书