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 #人脸识别的库dlibimport numpy as np #数据处理的库numpyimport 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 #人脸识别的库dlibimport numpy as np #数据处理的库numpyimport 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)# 人脸数rectsrects = 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),Font,0.8,(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) )
参数1: img- 图片对象;
参数2: (p1,p2)- 圆心坐标;
参数3: r- 半径;
参数4: (255,255)- 颜色数组;
2. 输出字符 cv2.putText( img,"test",4,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)- 颜色数组;
参数7: 2- 线宽thickness;
参数8: liNE_AA- 线条种类line_type;
*关于 颜色数组:
(255,(蓝色,绿色,红色),每个值都是0-255;
比如:蓝色(255,0),紫色(255,255)
可以调整cv2.circle()函数和cv2.putText()函数中的 半径、线宽 等参数使得输出满足需求方便查看;
结果:
图2 测试结果1
图3 测试结果2
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
以上是内存溢出为你收集整理的python3利用Dlib19.7实现人脸68个特征点标定全部内容,希望文章能够帮你解决python3利用Dlib19.7实现人脸68个特征点标定所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)