opencv+dlib实现人脸特征点找取完整代码

需要工具包:numpycv2dlib
dlib在做人脸识别方面非常好用,我们使用dlib提供的现成的训练集来对模型进行训练。
网盘链接
提取码:rn0n
如果对dlib工具包安装有问题的,请移步win10 64 位系统python3.7 安装dlib包
对opencv工具包安装有问题的,请移步小白安装opencv-python

import cv2
import numpy as np
import dlib
font=  cv2.FONT_HERSHEY_SIMPLEX #搞定汉字
#获得人脸矩形的坐标信息,用来画矩形框
def rect_size(rect):
    x=rect.left()
    y=rect.top()
    w=rect.right()-x
    h=rect.bottom()-y
    return(x,y,w,h)

#将包含68个特征点的shape转换为ndarry格式,因为初始的shape并不是列表的格式
def shape_np(shape):
    a=np.zeros((68,2),dtype='int')
    for i in range(0,68):
        a[i]=(shape.part(i).x,shape.part(i).y)
    return a
#将检测到的image规格化大小,避免出现太大的情况
def resize(image,width=500):
    r=width*1.0/image.shape[1]
    dim=(width,int(image.shape[0]*r))
    image_re=cv2.resize(image,dim,interpolation=cv2.INTER_AREA)
    return image_re
#主函数
def main():
    img=cv2.imread('D://zopencv//renqun.jpg')
    img=resize(img,width=500)
    #加载人脸检测和关键点定位
    detector=dlib.get_frontal_face_detector()
    #训练集需要自己下载
    predictor=dlib.shape_predictor('D://mypro//shape_predictor_68_face_landmarks.dat')
    #转化成灰度图
    img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    #得到所有用矩形标示的人脸的坐标
    rects=detector(img_gray,1)
   # print(rects)
    #提前创建一个空的shape列表
    shapes=[]
    for i,rect in enumerate(rects):#enmerate函数可以返回列表元素的索引和数值
        shape=predictor(img_gray,rect)#得到特征点的位置
        shape=shape_np(shape)
        shapes.append(shape)
        (x,y,w,h)=rect_size(rect)
        cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)#画框住人脸的矩形
        #填加文字,表示这是第几张脸
        cv2. cv2.putText(img, "Face: {}".format(i + 1), (x - 10, y - 10), font, 0.5, (255, 255, 0), 2)
    #画出特征点的位置
    for shape in shapes:
        for (x,y) in shape:
            cv2.circle(img,(x,y),1,(255,255,0),-1)

    cv2.imshow('feature',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


if __name__=='__main__':
    main()

在这里插入图片描述
我爱热巴

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值