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的dataframe转换为多维矩阵的方法
Apr 11 Python
详解numpy的argmax的具体使用
May 27 Python
python安装requests库的实例代码
Jun 25 Python
Django中如何使用sass的方法步骤
Jul 09 Python
使用Python快乐学数学Github万星神器Manim简介
Aug 07 Python
python 修改本地网络配置的方法
Aug 14 Python
python numpy数组中的复制知识解析
Feb 03 Python
关于python 跨域处理方式详解
Mar 28 Python
利用python爬取有道词典的方法
Dec 08 Python
python3.9实现pyinstaller打包python文件成exe
Dec 13 Python
tensorflow2.0教程之Keras快速入门
Feb 20 Python
Python Matplotlib绘制动画的代码详解
May 30 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 intval的测试代码发现问题
2008/07/27 PHP
PHP curl_setopt()函数实例代码与参数分析
2011/06/02 PHP
php的mssql数据库连接类实例
2014/11/28 PHP
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
WordPress中调试缩略图的相关PHP函数使用解析
2016/01/07 PHP
php5.3后静态绑定用法详解
2016/11/11 PHP
PHP实现函数内修改外部变量值的方法示例
2018/12/28 PHP
PHP实现唤起微信支付功能
2019/02/18 PHP
在html页面中包含共享页面的方法
2008/10/24 Javascript
onsubmit阻止form表单提交与onclick的相关操作
2010/09/03 Javascript
jQuery点击tr实现checkbox选中的方法
2013/03/19 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
javascript运行机制之this详细介绍
2014/02/07 Javascript
Extjs 4.x 得到form CheckBox 复选框的值
2014/05/04 Javascript
轻松创建nodejs服务器(10):处理POST请求
2014/12/18 NodeJs
基于Flowplayer打造一款免费的WEB视频播放器附源码
2015/09/06 Javascript
Bootstrap实现弹性搜索框
2016/07/11 Javascript
浅谈EasyUI常用控件的禁用方法
2016/11/09 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
2017/12/27 Javascript
Vue 使用 Mint UI 实现左滑删除效果CellSwipe
2018/04/27 Javascript
Seajs源码详解分析
2019/04/02 Javascript
vue中解决微信html5原生ios虚拟键返回不刷新问题
2020/10/20 Javascript
[01:29:17]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
举例讲解Python的Tornado框架实现数据可视化的教程
2015/05/02 Python
Python列表与元组的异同详解
2019/07/02 Python
Python shelve模块实现解析
2019/08/28 Python
Python绘图实现显示中文
2019/12/04 Python
Python实现Canny及Hough算法代码实例解析
2020/08/06 Python
python的launcher用法知识点总结
2020/08/07 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
男女朋友协议书
2014/04/23 职场文书
多媒体教室标语
2014/06/26 职场文书
新郎结婚感言
2015/07/31 职场文书
财务人员入职担保书
2015/09/22 职场文书
小程序教您怎样你零成本推广获取数万用户的方法
2019/07/30 职场文书
python爬虫请求库httpx和parsel解析库的使用测评
2021/05/10 Python