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连接MySQL、MongoDB、Redis、memcache等数据库的方法
Nov 15 Python
python实现调用其他python脚本的方法
Oct 05 Python
Python实现代码统计工具(终极篇)
Jul 04 Python
深入理解Python分布式爬虫原理
Nov 23 Python
Python多进程与服务器并发原理及用法实例分析
Aug 21 Python
Django 创建/删除用户的示例代码
Jul 24 Python
Python性能分析工具Profile使用实例
Nov 19 Python
python实现手势识别的示例(入门)
Apr 15 Python
解决python父线程关闭后子线程不关闭问题
Apr 25 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
May 22 Python
用Python进行栅格数据的分区统计和批量提取
May 27 Python
分析Python感知线程状态的解决方案之Event与信号量
Jun 16 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+mysqli数据库连接的两种方式
2015/01/28 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
2019/05/29 PHP
Javascript 判断函数类型完美解决方案
2009/09/02 Javascript
两种简单实现菜单高亮显示的JS类代码
2010/06/27 Javascript
基于jquery的图片的切换(以数字的形式)
2011/02/14 Javascript
基于jquery ajax 用户无刷新登录方法详解
2012/04/28 Javascript
jQuery控制元素显示、隐藏、切换、滑动的方法总结
2015/04/16 Javascript
javascript实现页面滚屏效果
2017/01/17 Javascript
nodejs取得当前执行路径的方法
2018/05/13 NodeJs
详解VUE中常用的几种import(模块、文件)引入方式
2018/07/03 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
2019/05/06 Javascript
关于layui 弹出层一闪而过就消失的解决方法
2019/09/09 Javascript
浅谈vue 多个变量同时赋相同值互相影响
2020/08/05 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
Python3中多线程编程的队列运作示例
2015/04/16 Python
Python 文件管理实例详解
2015/11/10 Python
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
2016/05/27 Python
python常见排序算法基础教程
2017/04/13 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
python机器学习之决策树分类详解
2017/12/20 Python
Python中使用支持向量机(SVM)算法
2017/12/26 Python
python2.7实现FTP文件下载功能
2018/04/15 Python
使用Python进行目录的对比方法
2018/11/01 Python
python如何导入依赖包
2020/07/13 Python
html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
2013/03/25 HTML / CSS
爱奇艺VIP会员:大剧抢先看
2018/07/11 全球购物
介绍一下如何优化MySql
2016/12/20 面试题
策划主管的工作职责
2013/11/24 职场文书
小学生常见病防治方案
2014/06/06 职场文书
小学数学教研活动总结
2014/07/01 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
2014年乡镇民政工作总结
2014/12/02 职场文书
高质量“欢迎词”
2019/04/03 职场文书
JS数组方法some、every和find的使用详情
2021/10/05 Javascript