python3利用Dlib19.7实现人脸68个特征点标定
作者:TimeStamp 发布时间:2021-05-05 19:13:06
0.引言
利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68点标定,利用OpenCv进行图像化处理,在人脸上画出68个点,并标明序号;
实现的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()函数中的 半径、线宽 等参数使得输出满足需求方便查看;
结果:
图2 测试结果1
图3 测试结果2
来源:http://www.cnblogs.com/AdaminXie/p/8137580.html


猜你喜欢
- 一、前言本文就从数据爬取、数据清洗、数据可视化,这三个方面入手,但你简单完成一个小型的数据分析项目,让你对知识能够有一个综合的运用。整个思路
- 本文为大家分享了Python实现自己下载音乐统计的具体代码,供大家参考,具体内容如下今天看Python实例,学习了如何对文件进行操作,突然想
- python 获取网页编码方式实现代码<span style="font-family: Arial, Helvetica,
- 本文实例讲述了Python实现统计给定字符串中重复模式最高子串功能。分享给大家供大家参考,具体如下:给定一个字符串,如何得到其中重复模式最高
- 所谓天赋(左脑和右脑)也就是你是否有艺术天赋,天赋也许是存在的,这主要在于人类左右脑的分工。左脑主要负责逻辑理解、语言、判断、分类、分析、推
- 本文实例讲述了Python解析json的方法。分享给大家供大家参考,具体如下:刚学习到Python中解析json的方法,觉得有必要在这里坐下
- 本文介绍了SpringBoot 中使用JSP的方法示例,分享给大家,具体如下:依赖: <parent>
- 判断访问是否来自搜索引擎的函数,有兴趣的可以试试! <% '检查当前用户是否是蜘蛛人 Function check(
- 为什么我把自己机子上的数据库备份文件往另一台机子上还原不成功?可能是你在Restore的对话框中选项不正确。Restore 有三个选项,分别
- 在Python中创建进程有两种方式,第一种是:from multiprocessing import Processimport timed
- 这是一个适合移动设备WEB应用的日期和时间拾取器,在桌面版的日期拾取器我们一般用jQuery UI的datepicker插件,而移动手机版的
- 如下所示:import cv2import os#图片路径im_dir = '/home/suanfa/data/out/20170
- 获取Tensor的维数>>> import tensorflow as tf>>> tf.__versi
- 第一种是用urllib模块,下面是例示代码:import urllibstatus=urllib.urlopen("https:/
- 前言:tkinter提供了3种布局管理方式:1、pack2、grid3、place每种布局管理器都非常有用,根据不同的需求,选择对应的布局方
- 今天我们使用 Pyecharts 制作一个地球可视化项目,一起来看看吧Let’s go!数据处理这里我们使用全球新冠感染
- 初试牛刀假设你希望学习Python这门语言,却苦于找不到一个简短而全面的入门教程。那么本教程将花费十分钟的时间带你走入Python的大门。本
- 1.对数据库常用命令1.连接数据库mysql -u用户名 -p密码2.显示已有数据库show databases;3.创建数据库create
- 内容摘要:当讨论Request对象内容时,要研究的集合之一就是ServerVariables集合。这个集合包含了两种值的结合体,一种是随同页
- 微信跳一跳辅助的python具体实现代码,供大家参考,具体内容如下这是一个 2.5D 插画风格的益智游戏,玩家可以通过按压屏幕时间的长短来控