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比较两个列表大小的方法
Jul 11 Python
浅谈python新手中常见的疑惑及解答
Jun 14 Python
windows上安装Anaconda和python的教程详解
Mar 28 Python
HTML中使用python屏蔽一些基本功能的方法
Jul 07 Python
浅谈Python由__dict__和dir()引发的一些思考
Oct 30 Python
django多个APP的urls设置方法(views重复问题解决)
Jul 19 Python
利用Python实现kNN算法的代码
Aug 16 Python
numpy矩阵数值太多不能全部显示的解决
May 14 Python
python如何输出反斜杠
Jun 18 Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
Jan 25 Python
python基础学习之递归函数知识总结
May 26 Python
Python万能模板案例之matplotlib绘制甘特图
Apr 13 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
mysql总结之explain
2012/02/27 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
php通过array_merge()函数合并两个数组的方法
2015/03/18 PHP
传智播客学习之JavaScript基础篇
2009/11/13 Javascript
jquery 插件实现图片延迟加载效果代码
2010/02/06 Javascript
jQuery语法总结和注意事项小结
2012/11/11 Javascript
jQuery实用函数用法总结
2014/08/29 Javascript
javascript中数组array及string的方法总结
2014/11/28 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
完美的js图片轮换效果
2017/02/05 Javascript
原JS实现banner图的常用功能
2017/06/12 Javascript
Vue2.0 v-for filter列表过滤功能的实现
2018/09/07 Javascript
json前后端数据交互相关代码
2018/09/19 Javascript
vue中使用axios post上传头像/图片并实时显示到页面的方法
2018/09/27 Javascript
小程序转发探索示例
2019/02/19 Javascript
处理JavaScript值为undefined的7个小技巧
2020/07/28 Javascript
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
Vue实现手机号、验证码登录(60s禁用倒计时)
2020/12/19 Vue.js
[00:47]TI7不朽珍藏III——沙王不朽展示
2017/07/15 DOTA
使用python实现正则匹配检索远端FTP目录下的文件
2015/03/25 Python
通过mod_python配置运行在Apache上的Django框架
2015/07/22 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
Python表示矩阵的方法分析
2017/05/26 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
2019/06/13 Python
python使用if语句实现一个猜拳游戏详解
2019/08/27 Python
Python 类的魔法属性用法实例分析
2019/11/21 Python
python Xpath语法的使用
2020/11/26 Python
python接口自动化框架实战
2020/12/23 Python
Alba Moda瑞士网上商店:独家意大利时尚女装销售
2016/11/28 全球购物
材料采购员岗位职责
2013/12/17 职场文书
寒假实习自荐信
2014/01/26 职场文书
营业员岗位职责
2015/02/11 职场文书
会计试用期自我评价
2015/03/10 职场文书
python实现的人脸识别打卡系统
2021/05/08 Python