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 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持中文源码网。