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(一)Python环境安装
Aug 20 Python
深入Python解释器理解Python中的字节码
Apr 01 Python
编写Python脚本使得web页面上的代码高亮显示
Apr 24 Python
Eclipse中Python开发环境搭建简单教程
Mar 23 Python
django使用图片延时加载引起后台404错误
Apr 18 Python
Python3.6简单操作Mysql数据库
Sep 12 Python
用Pygal绘制直方图代码示例
Dec 07 Python
python flask web服务实现更换默认端口和IP的方法
Jul 26 Python
pytorch中的embedding词向量的使用方法
Aug 18 Python
关于tensorflow softmax函数用法解析
Jun 30 Python
Python3使用 GitLab API 进行批量合并分支
Oct 15 Python
pandas中DataFrame重置索引的几种方法
May 24 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+apache+php Linux安装指南
2006/10/09 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
跨浏览器的设置innerHTML方法
2006/09/18 Javascript
javascript dom代码应用 简单的相册[firefox only]
2010/06/12 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
怎么限制input的text里输入的值只能是数字(正则、js)
2016/05/16 Javascript
jQuery深拷贝Json对象简单示例
2016/07/06 Javascript
使用Bootstrap typeahead插件实现搜索框自动补全的方法
2016/07/07 Javascript
Vue.js第三天学习笔记(计算属性computed)
2016/12/01 Javascript
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
使用vue2实现购物车和地址选配功能
2018/03/29 Javascript
通过nodejs 服务器读取HTML文件渲染到页面的方法
2018/05/17 NodeJs
JavaScript逻辑运算符相关总结
2020/09/04 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
浅谈对yield的初步理解
2017/05/29 Python
Python基于回溯法子集树模板解决取物搭配问题实例
2017/09/02 Python
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
对python以16进制打印字节数组的方法详解
2019/01/24 Python
python两个_多个字典合并相加的实例代码
2019/12/26 Python
keras中的卷积层&池化层的用法
2020/05/22 Python
使用darknet框架的imagenet数据分类预训练操作
2020/07/07 Python
html5教程实现Photoshop渐变色效果
2013/12/04 HTML / CSS
HTML5标签大全
2016/11/23 HTML / CSS
解决html5中video标签无法播放mp4问题的办法
2017/05/07 HTML / CSS
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
英国太阳镜品牌:Taylor Morris Eyewear
2018/04/18 全球购物
美国山地自行车、露营、户外装备和服装购物网站:Aventuron
2018/05/05 全球购物
澳洲的UGG雪地靴超级市场:Uggs.com.au
2020/04/06 全球购物
学校欢迎标语
2014/06/18 职场文书
文艺晚会开场白
2015/05/29 职场文书
好人好事新闻稿
2015/07/17 职场文书
pytorch 预训练模型读取修改相关参数的填坑问题
2021/06/05 Python
mysql 8.0.27 绿色解压版安装教程及配置方法
2022/04/20 MySQL