zl程序教程

您现在的位置是:首页 >  其他

当前栏目

人脸68特征点检测(Dilb库安装,只需两步!!)

安装人脸 检测 特征 68 两步
2023-09-11 14:16:57 时间

一、安装dlib库(只需两三步,不用下载啥版本的VS)
1.务必根据电脑的python版本选择安装dlib库,比如我的是python3.8版本,那么应该安装dlib dlib 19.19.0
官方库 是https://pypi.org/project/dlib/19.6.1/#history
在其中选择对应版本,下载存放到某个盘,比如D盘
2.打开命令窗口,进入刚才安装包所在文件夹(D盘),键入 pip install dlib-19.19.0-cp38-cp38-win_amd64.whl,回车,搞定✌
安装命令
附上dlib-19.19.0-cp38-cp38-win_amd64.whl安装包
链接:https://pan.baidu.com/s/1eHTu9uhQZxVU77z016pyKQ
提取码:lyx0
复制这段内容后打开百度网盘手机App,操作更方便哦
3、下载训练模型shape_predictor_68_face_landmarks.dat,记得下载路径,我的是放在了(‘C:/Users/Administrator/Desktop/Dilb/shape_predictor_68_face_landmarks.dat’)
模型下载链接:https://pan.baidu.com/s/1vJt0X7kjXlxhFFbUMsGWeQ
提取码:lyx0

二、Python实现人脸特征点检测

#本程序可以检测图片人像中的人脸特征点
import dlib
import cv2

# 与人脸检测相同,使用dlib自带的frontal_face_detector作为人脸检测器
detector = dlib.get_frontal_face_detector()
 
# 使用官方提供的模型构建特征提取器
predictor = dlib.shape_predictor('C:/Users/Administrator/Desktop/Dilb/shape_predictor_68_face_landmarks.dat') 
# cv2读取图片
#pic = dobotEdu.util.get_image(3, 0, False)#此部分调用了自家照相机API,你也可以自己进行拍照,等我有时间再补回去
#cv2.imwrite("C:/Users/Administrator/Desktop/Dilb/1.jpg",pic)#将照片文件保存到file_name文件路径
img = cv2.imread("C:/Users/Administrator/Desktop/Dilb/1.jpg")
 
# 与人脸检测程序相同,使用detector进行人脸检测 dets为返回的结果
dets = detector(img, 1)
# 使用enumerate 函数遍历序列中的元素以及它们的下标
# 下标k即为人脸序号
# left:人脸左边距离图片左边界的距离 ;right:人脸右边距离图片左边界的距离
# top:人脸上边距离图片上边界的距离 ;bottom:人脸下边距离图片上边界的距离
for k, d in enumerate(dets):
    print("dets{}".format(d))
    print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(
        k, d.left(), d.top(), d.right(), d.bottom()))
 
    # 使用predictor进行人脸关键点识别 shape为返回的结果
    shape = predictor(img, d)
    # 获取第一个和第二个点的坐标(相对于图片而不是框出来的人脸)
    print("Part 0: {}, Part 1: {} ...".format(shape.part(0), shape.part(1)))
 
    # 绘制特征点
    for index, pt in enumerate(shape.parts()):
        print('Part {}: {}'.format(index, pt))
        pt_pos = (pt.x, pt.y)
        cv2.circle(img, pt_pos, 1, (255, 0, 0), 2)
        #利用cv2.putText输出1-68
        font = cv2.FONT_HERSHEY_SIMPLEX
        cv2.putText(img, str(index+1),pt_pos,font, 0.35, (0, 0, 255), 1, cv2.LINE_AA)
 
cv2.imshow('img', img)
k = cv2.waitKey()
cv2.destroyAllWindows()

可以检测单张人脸

也可以检测多张人脸