基于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库包的介绍与使用,opencv+dlib检测人脸框opencv+dlib进行人脸68关键点检测,opencv+dlib实现人脸识别,dlib进行人脸特征聚类dlib视频目标跟踪