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实现排序算法
Feb 14 Python
Python 文件读写操作实例详解
Mar 12 Python
Python对小数进行除法运算的正确方法示例
Aug 25 Python
跟老齐学Python之不要红头文件(2)
Sep 28 Python
Python中的面向对象编程详解(上)
Apr 13 Python
Python爬虫实例爬取网站搞笑段子
Nov 08 Python
Python装饰器(decorator)定义与用法详解
Feb 09 Python
对python中url参数编码与解码的实例详解
Jul 25 Python
python经典趣味24点游戏程序设计
Jul 26 Python
python基于K-means聚类算法的图像分割
Oct 30 Python
如何使用Python破解ZIP或RAR压缩文件密码
Jan 09 Python
matlab中imadjust函数的作用及应用举例
Feb 27 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
全国FM电台频率大全 - 1 北京市
2020/03/11 无线电
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
php表单请求获得数据求和示例
2014/05/15 PHP
Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法
2014/06/21 PHP
PHP也能干大事 随机函数
2015/04/14 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
2016/10/17 PHP
thinkphp5使html5实现动态跳转的例子
2019/10/16 PHP
php回调函数处理数组操作示例
2020/04/13 PHP
IE JS编程需注意的内存释放问题
2009/06/23 Javascript
用JQuery调用Session的实现代码
2010/10/29 Javascript
Jquery实现控件的隐藏和显示实例
2014/02/08 Javascript
JS更改select内option属性的方法
2015/10/14 Javascript
ztree获取选中节点时不能进入可视区域出现BUG如何解决
2015/12/03 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
如何让一个json文件显示在表格里【实现代码】
2016/05/09 Javascript
JS创建事件的三种方法(实例代码)
2016/05/12 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
2016/10/30 Javascript
BootStrapValidator初使用教程详解
2017/02/10 Javascript
详解Angular路由 ng-route和ui-router的区别
2017/05/22 Javascript
浅谈Node.js 沙箱环境
2018/05/15 Javascript
ES6基础之默认参数值
2019/02/21 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
2020/01/11 jQuery
webpack打包优化的几个方法总结
2020/02/10 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
[01:27]DOTA2电竞之夜 今夜共饮庆功酒
2014/08/02 DOTA
Python发送Email方法实例
2014/08/21 Python
python实现按行切分文本文件的方法
2016/04/18 Python
python 读取dicom文件,生成info.txt和raw文件的方法
2019/01/24 Python
详解Django admin高级用法
2019/11/06 Python
三年级音乐教学反思
2014/01/28 职场文书
关于安全的演讲稿
2014/05/09 职场文书
2014公司党员自我评价范文
2014/09/11 职场文书
刑事代理授权委托书
2014/09/17 职场文书
同学会邀请函模板
2015/01/30 职场文书
开学随笔
2015/08/15 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书