'''
人脸关键点检测程序,
使用前需提前安装dlib和opencv-python库,
并下载shape_predictor_68_face_landmarks.dat人脸检测数据模型.
'''
import cv2      #导入计算机视觉库
import dlib     #在这里dlib库用于支持人脸检测
import numpy as np
impath = "face1.jpg"      #图片位置
img = cv2.imread(impath,1)  #读取图像
wimg = 255*np.ones(img.shape,np.uint8)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #将图像转化为灰度图
#构建人脸检测器
detector = dlib.get_frontal_face_detector()
# 获取人脸关键点检测器
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
dets = detector(gray, 1) #人脸检测，可能有多张人脸，其中参数1表示一次上采样，对原图进行上采样放大
#print(len(dets))
for face in dets: #遍历检测到的每张人脸
    shape = predictor(img, face)  # 寻找人脸的68个标定点
    # 遍历所有点，找到其坐标，并圈出来
    i=0
    for pt in shape.parts():
        i+=1
        pt_pos = (pt.x, pt.y) #获得坐标点位置
        print(pt_pos)
        #以画圆的方式在原图中标定出相应点
        cv2.circle(wimg, pt_pos, 2, (0, 255, 0), -1) 
        #标记出每个特征点的位置
        cv2.putText(wimg, str(i), (pt_pos[0], pt_pos[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.3, (0, 0, 255))
    #显示标定出关键点的图像
    cv2.imshow("image", img)
    cv2.imshow("wimage", wimg)
print(len(dets))
cv2.waitKey(0)
cv2.destroyAllWindows()