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控制台显示时钟的示例
Feb 24 Python
Python实现的数据结构与算法之基本搜索详解
Apr 22 Python
Python常见MongoDB数据库操作实例总结
Jul 24 Python
python多个模块py文件的数据共享实例
Jan 11 Python
Python装饰器用法实例分析
Jan 14 Python
不到20行代码用Python做一个智能聊天机器人
Apr 19 Python
python实现DEM数据的阴影生成的方法
Jul 23 Python
django中间键重定向实例方法
Nov 10 Python
Python numpy.zero() 初始化矩阵实例
Nov 27 Python
Python实现汇率转换操作
May 03 Python
Django自带的用户验证系统实现
Dec 18 Python
python爬虫--selenium模块
Mar 31 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
php5.3中连接sqlserver2000的两种方法(com与ODBC)
2012/12/29 PHP
php实现12306余票查询、价格查询示例
2014/04/17 PHP
php获取发送给用户的header信息的方法
2015/03/16 PHP
javascript算法学习(直接插入排序)
2011/04/12 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
javascript移动设备Web开发中对touch事件的封装实例
2014/06/05 Javascript
2014 HTML5/CSS3热门动画特效TOP10
2014/12/07 Javascript
JS实现向表格行添加新单元格的方法
2015/03/30 Javascript
JavaScript调用客户端Java程序的方法
2015/07/27 Javascript
基于jQuery实现仿百度首页选项卡切换效果
2016/05/29 Javascript
如何在JS中实现相互转换XML和JSON
2016/07/19 Javascript
javascript 将共享属性迁移到原型中去的实现方法
2016/08/31 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
jQuery纵向导航菜单效果实现方法
2016/12/19 Javascript
原生JS实现在线问卷调查投票特效
2017/01/03 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
2017/02/15 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
2018/08/25 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
Element Collapse 折叠面板的使用方法
2020/07/26 Javascript
vue组件中实现嵌套子组件案例
2020/08/31 Javascript
JS代码实现页面切换效果
2021/01/10 Javascript
Python中实现两个字典(dict)合并的方法
2014/09/23 Python
python自定义时钟类、定时任务类
2021/02/22 Python
Python中的self用法详解
2019/08/06 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
python 伯努利分布详解
2020/02/25 Python
python print 格式化输出,动态指定长度的实现
2020/04/12 Python
美国猫狗药物和用品网站:PetCareRx
2017/01/05 全球购物
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
党校培训自我鉴定范文
2014/03/20 职场文书
绿色家庭事迹材料
2014/05/01 职场文书
关工委先进个人事迹材料
2014/05/23 职场文书
六一亲子活动感想
2015/08/07 职场文书
2016暑期社会实践心得体会范文
2016/01/14 职场文书
2016年企业安全生产月活动总结
2016/04/06 职场文书
2019年年中职场激励人心语录30条
2019/08/07 职场文书