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 相关文章推荐
压缩包密码破解示例分享(类似典破解)
Jan 17 Python
使用Python实现BT种子和磁力链接的相互转换
Nov 09 Python
Python脚本实现12306火车票查询系统
Sep 30 Python
python学生管理系统代码实现
Apr 05 Python
python matlibplot绘制3D图形
Jul 02 Python
Python读取txt某几列绘图的方法
Oct 14 Python
说说如何遍历Python列表的方法示例
Feb 11 Python
opencv-python 读取图像并转换颜色空间实例
Dec 09 Python
Python+Appium实现自动化测试的使用步骤
Mar 24 Python
numpy矩阵数值太多不能全部显示的解决
May 14 Python
Numpy(Pandas)删除全为零的列的方法
Sep 11 Python
Python爬虫实战之爬取京东商品数据并实实现数据可视化
Jun 07 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中include()与require()的区别说明
2010/03/10 PHP
如何在symfony中导出为CSV文件中的数据
2011/10/06 PHP
PHP内核探索:哈希表碰撞攻击原理
2015/07/31 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
2017/11/20 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
个人总结的一些关于String、Function、Array的属性和用法
2007/01/10 Javascript
jquery 选择器部分整理
2009/10/28 Javascript
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
基于JavaScript 类的使用详解
2013/05/07 Javascript
程序员必知35个jQuery 代码片段
2015/11/05 Javascript
JavaScript编写九九乘法表(两种任选)
2017/02/04 Javascript
Angular2安装angular-cli
2017/05/21 Javascript
Angular4的输入属性与输出属性实例详解
2017/11/29 Javascript
微信小程序支付及退款流程详解
2017/11/30 Javascript
Angular通过指令动态添加组件问题
2018/07/09 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
2018/10/16 Javascript
Javascript实现秒表倒计时功能
2018/11/17 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
2018/12/11 Javascript
浅谈js闭包理解
2019/03/28 Javascript
JS实现星星海特效
2019/12/24 Javascript
关于vue 结合原生js 解决echarts resize问题
2020/07/26 Javascript
python操作CouchDB的方法
2014/10/08 Python
python 获取微信好友列表的方法(微信web)
2019/02/21 Python
python实现字符串加密 生成唯一固定长度字符串
2019/03/22 Python
Python实现病毒仿真器的方法示例(附demo)
2020/02/19 Python
经济学人订阅:The Economist
2018/07/19 全球购物
英国异国风情旅游网站:Travel Talk Tours(团体旅游、探险旅游、帆船假期)
2018/07/26 全球购物
计算机专业毕业生自荐信
2013/12/31 职场文书
料理师求职信
2014/01/30 职场文书
设备售后服务承诺书
2014/05/30 职场文书
小学安全工作汇报材料
2014/08/19 职场文书
2014年大学生党员自我评议
2014/09/22 职场文书
公司周年庆典标语
2014/10/07 职场文书
乡镇领导班子四风整顿行动工作汇报
2014/10/25 职场文书
Python中基础数据类型 set集合知识点总结
2021/08/02 Python