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对两个有序列表进行合并和排序的例子
Jun 13 Python
windows下Python实现将pdf文件转化为png格式图片的方法
Jul 21 Python
Python多线程threading和multiprocessing模块实例解析
Jan 29 Python
python使用tornado实现简单爬虫
Jul 28 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
Dec 16 Python
python 搭建简单的http server,可直接post文件的实例
Jan 03 Python
正确理解Python中if __name__ == '__main__'
Jan 24 Python
基于Python共轭梯度法与最速下降法之间的对比
Apr 02 Python
Python 列表中的修改、添加和删除元素的实现
Jun 11 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
Oct 18 Python
Python字典和列表性能之间的比较
Jun 07 Python
分位数回归模型quantile regeression应用详解及示例教程
Nov 02 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
我的论坛源代码(四)
2006/10/09 PHP
使用swoole扩展php websocket示例
2014/02/13 PHP
PHP生成短网址方法汇总
2016/07/12 PHP
PHP ADODB实现分页功能简单示例
2018/05/25 PHP
有道JavaScript监听浏览器的问题
2010/06/23 Javascript
那些年,我还在学习jquery 学习笔记
2012/03/05 Javascript
Jquery注册事件实现方法
2015/05/18 Javascript
js动态创建及移除div的方法
2015/06/03 Javascript
js+html5绘制图片到canvas的方法
2015/06/05 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
2016/06/20 Javascript
Bootstrap编写一个兼容主流浏览器的受众门户式风格页面
2016/07/01 Javascript
Js查找字符串中出现次数最多的字符及个数实例解析
2016/09/05 Javascript
jQuery如何防止Ajax重复提交
2016/10/14 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
bootstrap中的 form表单属性role="form"的作用详解
2017/01/20 Javascript
JavaScript使用readAsDataURL读取图像文件
2017/05/10 Javascript
jQuery实现全选、反选和不选功能
2017/08/16 jQuery
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
仿iPhone通讯录制作小程序自定义选择组件的实现
2019/05/23 Javascript
vue界面发送表情的实现代码
2020/09/11 Javascript
videocapture库制作python视频高速传输程序
2013/12/23 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
python 3.5实现检测路由器流量并写入txt的方法实例
2017/12/17 Python
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
2019/08/05 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
基于Python模拟浏览器发送http请求
2020/11/06 Python
PyCharm最新激活码PyCharm2020.2.3有效
2020/11/18 Python
css sprite简单实例
2016/05/23 HTML / CSS
Kathmandu澳洲户外商店:新西兰户外运动品牌
2017/11/12 全球购物
电气工程及其自动化自我评价四篇
2013/09/24 职场文书
支部组织生活会方案
2014/06/10 职场文书
2014办公室年度工作总结
2014/12/09 职场文书
2016教师节感恩话语
2015/12/09 职场文书
什么是求职信?求职信应包含哪些内容?
2019/08/14 职场文书
我的收音机情缘
2022/04/05 无线电