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实现带验证码网站的自动登陆实现代码
Jan 12 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
Mar 30 Python
Python数据类型详解(四)字典:dict
May 12 Python
Python调用微信公众平台接口操作示例
Jul 08 Python
django-初始配置(纯手写)详解
Jul 30 Python
通过实例了解python property属性
Nov 01 Python
python 使用raw socket进行TCP SYN扫描实例
May 05 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
May 22 Python
QML用PathView实现轮播图
Jun 03 Python
总结python 三种常见的内存泄漏场景
Nov 20 Python
Python基础教程,Python入门教程(超详细)
Jun 24 Python
Python pyecharts案例超市4年数据可视化分析
Aug 14 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 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
yii框架配置默认controller和action示例
2014/04/30 PHP
Codeigniter注册登录代码示例
2014/06/12 PHP
PHP 实现类似js中alert() 提示框
2015/03/18 PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
2020/05/29 PHP
用函数式编程技术编写优美的 JavaScript_ibm
2008/05/16 Javascript
Prototype Number对象 学习
2009/07/19 Javascript
jQuery 名称冲突的解决方法
2011/04/08 Javascript
jquery 年会抽奖程序
2011/12/22 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
Bootstrap作品展示站点实战项目2
2016/10/14 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
2017/08/14 Javascript
Material(包括Material Icon)在Angular2中的使用详解
2018/02/11 Javascript
深入理解JS异步编程-Promise
2019/06/03 Javascript
vue实现在线预览pdf文件和下载(pdf.js)
2019/11/26 Javascript
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
让Python代码更快运行的5种方法
2015/06/21 Python
Python字符串格式化输出方法分析
2016/04/13 Python
Python单元测试实例详解
2018/05/25 Python
Python continue继续循环用法总结
2018/06/10 Python
Windows下PyCharm安装图文教程
2018/08/27 Python
Python中shapefile转换geojson的示例
2019/01/03 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
2019/06/26 Python
Python中那些 Pythonic的写法详解
2019/07/02 Python
解决pytorch-yolov3 train 报错的问题
2020/02/18 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
医学生自我评价
2014/01/27 职场文书
网络编辑求职信
2014/04/30 职场文书
国家税务局领导班子对照检查材料思想汇报
2014/10/04 职场文书
个人批评与自我批评
2014/10/15 职场文书
房产公证书格式
2015/01/26 职场文书
个人工作保证书
2015/02/28 职场文书
2015大学迎新标语
2015/07/16 职场文书
SQL Server中交叉联接的用法详解
2021/04/22 SQL Server
中国十大神话动漫电影排行榜 哪吒登顶 白蛇缘起排第七
2022/03/21 国漫