基于dlib库关键点检测(图片和视频)demo

Posted 月疯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于dlib库关键点检测(图片和视频)demo相关的知识,希望对你有一定的参考价值。

环境win10,python3.9,dlib-19.22.9

安装dlib库存在很多问题,尤其是在win10上,记录了存在的问题,供参考:

 

dlibyou俩个版本,一个是使用到GPU和cuda的版本
一个是没有使用的版本

要想在python环境下安装dlib库,官方给了两种安装方式:

1、pip install dlib --verbose;
2、下载源码,然后执行 python setup.py install;

这两种安装方式存在的问题是,需要编译,需要你的机器上安装了cmake和C++编译器,编译过程耗时也耗内存,目前最新版本(19.22)编译需要8GB以上内存,编译时间3分钟以上。

官方网站
http://dlib.net/    (下载编译版本)
https://pypi.org/simple/dlib/  (下载预whl)

https://pypi.tuna.tsinghua.edu.cn/simple/dlib/(可以下载whl)


#下载并安装
python -m pip install https://files.pythonhosted.org/packages/0e/ce/f8a3cff33ac03a8219768f0694c5d703c8e037e6aba2e865f9bae22ed63c/dlib-19.8.1-cp36-cp36m-win_amd64.whl#sha256=794994fa2c54e7776659fddb148363a5556468a6d5d46be8dad311722d54bfcf

#更新pip的版本
python -m pip install --upgrade pip

#直接安装文件
pip install xxx


ERROR: dlib-19.8.1-cp36-cp36m-win_amd64.whl is not a supported wheel on this platform.
本机python的版本是3.9,dlib支持版本是3.6

pip install dlib-19.22.99-cp39-cp39-win_amd64.whl
重新下载一个支持3.9版本的;安装成功!!!

 

 

1、dlib.get_frontal_face_detector() 获取人脸检测器
2、dlib.shape_predictor() 预测人脸关键点

下载模型:

人脸关键点模型,下载地址:有68个点和5个点468个点,超过1000个点的检测就是3D检测
http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2

RuntimeError: Unexpected version found while deserializing dlib::shape_predictor.
主要原因是:shape_predictor_68_face_landmarks.dat.bz2需要解压成shape_predictor_68_face_landmarks.dat

 

图片关键点检测:

#图片的人脸检测
#1、导入库
import cv2
import matplotlib.pyplot as plt
import numpy as np
import dlib

#2、读取一张图片
image = cv2.imread("../images/huitao.jpg")

#3、调用人脸检测器
detector = dlib.get_frontal_face_detector()

#4、加载预测关键点模型(68个关键点)
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

#5、灰度转换
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

#6、人脸检测
faces = detector(gray,1) #写1表示把灰度图片放大一倍,0表示原来的灰度图片

#7、循环遍历每一张人脸,给人脸绘制矩形框和关键点
for face in faces:
    #8、绘制矩形框
    cv2.rectangle(image,(face.left(),face.top()),(face.right(),face.bottom()),(0,255,0),5) #颜色绿色,矩形框粗细是5

    #9、预测关键点(通过模型)
    shape = predictor(image,face)

    #10、获取关键点坐标 (循环获取68个关键点)
    for pt in shape.parts():
        #获取横坐标
        pt_position = (pt.x,pt.y)
        #11、显示/绘制关键点(每个点是圆形,关键点坐标放进来,圆大小是3,-1表示是实心圆)
        cv2.circle(image,pt_position,3,(0,255,0),-1)

#12、显示整个效果图
plt.imshow(image)
plt.axis("off")
plt.show()


效果图:

video关键点检测:

#1、导入库
import cv2
import dlib
#2、打开摄像头
capture = cv2.VideoCapture(0) #获取到第一个摄像头

#3、获取人脸检测器
detector = dlib.get_frontal_face_detector()

#4、获取人脸关键点检测器
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

while True:
    #5、读取视频流
    ret,frame = capture.read() #获取每一帧

    #6、灰度转换
    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)

    #7、人脸检测
    faces = detector(gray,1)

    #8、绘制每张人脸的矩形框和关键点
    for face in faces: #获取每一张人脸
        # 8.1 绘制矩形框
        cv2.rectangle(frame,(face.letf(),face.top()),(face.right(),face.bottom()),(0,255,0),5)
        # 8.2检测到关键点
        shape =predictor(gray,face)
        # 8.3获取关键点坐标
        for pt in shape.parts():
            #每个点的坐标
            pt_position = (pt.x,pt.y)
            # 8.4绘制关键点
            cv2.circle(frame,pt_position,3,(0,255,0),-1)

    if cv2.waitKey(1) & 0xFF == ord("q"): #如果按下q键,就结束
        break
    # 9显示效果
    cv2.imshow("face detection landmark",frame)

capture.release()
cv2.destroyAllWindows()











 效果:

 

以上是关于基于dlib库关键点检测(图片和视频)demo的主要内容,如果未能解决你的问题,请参考以下文章

基于Dlib人脸检测(图像视频)demo

基于Dlib人脸检测(图像视频)demo

基于dlib进行人脸识别demo

基于dlib进行人脸识别demo

dlib库包的介绍与使用,opencv+dlib检测人脸框opencv+dlib进行人脸68关键点检测,opencv+dlib实现人脸识别,dlib进行人脸特征聚类dlib视频目标跟踪

基于dlib实现人脸跟踪和物体跟踪(demo)