环境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()
-
-
-
-
-
-
-
-
-
-
-
效果:
