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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
- Python3利用Dlib19.7实现摄像头人脸识别的方法
- Python 3 利用 Dlib 19.7 实现人脸检测和剪切
- ubuntu下利用Dlib和caffe实现人脸关键点标定
- ubuntu下利用Dlib和caffe实现人脸关键点标定
- 深度学习(PYTORCH)-2.python调用dlib提取人脸68个特征点
- python dlib学习(二):人脸特征点标定
- python︱利用dlib和opencv实现简单换脸、人脸对齐、关键点定位与画图
- C++之Dlib库实现68个特征点人脸的提取(根据Dlib官网例程改写)
- Python 3 利用 Dlib 实现摄像头实时人脸识别
- Dlib人脸检测及关键点描述的python实现
- OpenCV+Dlib实现人脸68个特征点检测
- python下通过dlib和opencv实现人脸对齐(包括关键点检测和仿射变换)
- Python3结合Dlib实现人脸识别和剪切
- python实现人脸识别经典算法(一) 特征脸法
- 人脸识别---利用caffe实现多层特征学习人脸识别网络
- 利用OpenCV的级联分类器类CascadeClassifier和Haar特征实现人脸区域的检测
- 学习Python3 Dlib19.7进行人脸面部识别
- 利用Dlib进行人脸特征局部定位
- 人脸检测及识别python实现系列(5)——利用keras库训练人脸识别模型