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 相关文章推荐
pymssql ntext字段调用问题解决方法
Dec 17 Python
Python使用xlrd读取Excel格式文件的方法
Mar 10 Python
Python中用于返回绝对值的abs()方法
May 14 Python
Python实现批量下载图片的方法
Jul 08 Python
Python编程实现生成特定范围内不重复多个随机数的2种方法
Apr 14 Python
Python学习小技巧之列表项的排序
May 20 Python
Python matplotlib绘制饼状图功能示例
Sep 10 Python
python单向循环链表原理与实现方法示例
Dec 03 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
Mar 10 Python
python能做哪些生活有趣的事情
Sep 09 Python
python开发一款翻译工具
Oct 10 Python
Python编程中Python与GIL互斥锁关系作用分析
Sep 15 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 array_flip() 删除重复数组元素专用函数
2010/05/16 PHP
codeigniter显示所有脚本执行时间的方法
2015/03/21 PHP
php实现对两个数组进行减法操作的方法
2015/04/17 PHP
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
关于JavaScript中的关联数组分析
2013/04/09 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
2013/09/23 Javascript
js语法学习之判断一个对象是否为数组
2014/05/13 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
利用AngularJs实现京东首页轮播图效果
2016/09/08 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
Javascript 实现 Excel 导入生成图表功能
2018/10/22 Javascript
layui实现数据分页功能
2019/07/27 Javascript
vue-video-player 解决微信自动全屏播放问题(横竖屏导致样式错乱问题)
2020/02/25 Javascript
Python和php通信乱码问题解决方法
2014/04/15 Python
python实现给字典添加条目的方法
2014/09/25 Python
Linux下使用python调用top命令获得CPU利用率
2015/03/10 Python
在Django的视图中使用数据库查询的方法
2015/07/16 Python
python 实现网上商城,转账,存取款等功能的信用卡系统
2016/07/15 Python
Python读取Word(.docx)正文信息的方法
2018/03/15 Python
python smtplib模块自动收发邮件功能(二)
2018/05/22 Python
django连接oracle时setting 配置方法
2019/08/29 Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
2019/09/30 Python
python中的subprocess.Popen()使用详解
2019/12/25 Python
python画图常规设置方式
2020/03/05 Python
几款Python编译器比较与推荐(小结)
2020/10/15 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
全球速卖通巴西站点:Aliexpress巴西
2016/08/24 全球购物
Java面试题:Java类的Main方法如果是Private将会怎么样
2016/08/18 面试题
开会迟到检讨书
2014/01/08 职场文书
群众路线教育实践活动方案
2014/02/02 职场文书
青春演讲稿范文
2014/05/08 职场文书
青春飞扬演讲稿
2014/09/11 职场文书
优秀团队申报材料
2014/12/26 职场文书
生活委员竞选稿
2015/11/21 职场文书
OpenCV-Python实现人脸磨皮算法
2021/06/07 Python
小程序实现悬浮按钮的全过程记录
2021/10/16 HTML / CSS