python3利用Dlib19.7实现人脸68个特征点标定
2019/7/15 1:06:08
本文主要是介绍python3利用Dlib19.7实现人脸68个特征点标定,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持找一找教程网。
这篇关于python3利用Dlib19.7实现人脸68个特征点标定的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-27使用python 将ETH账户的资产打散
- 2024-09-26Python编程基础
- 2024-09-2610 种方法写出更好的 Python 代码
- 2024-09-25Python编程基础详解
- 2024-09-25Python编程入门教程
- 2024-09-25从零开始使用Python构建LLaMA 3
- 2024-09-23Python中理解和使用树形结构的简单教程
- 2024-09-23Python 编程基础入门
- 2024-09-18初探Python股票自动化交易:入门指南
- 2024-09-18Python量化入门:轻松掌握量化分析基础与实战