Ubuntu下编译安装DLib的GPU版本并实现人脸检测和人脸关键点检测
1. 安装CUDA和CUDNN
首先需要安装好cuda和cudnn,具体可以参考我的另一篇博客。
2. 安装依赖库
pip install scikit-image opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
3. 下载Dlib库
git clone https://gitee.com/binghai228/dlib.git
4. 编译和安装Dlib
cd dlib
mkdir build
cd build
cmake .. -DDLIB_USE_CUDA=1 -DUSE_AVX_INSTRUCTIONS=1
cmake --build .
cd ..
python setup.py install --set USE_AVX_INSTRUCTIONS=1 --set DLIB_USE_CUDA=1
安装好以后,先测试下是否能正常启用。在终端中输入python进入交互式命令行,然后输入下面的代码:
import dlib
print(dlib.DLIB_USE_CUDA)
输出为true则为成功。
5. 人脸检测和关键点检测
完整代码如下:
import dlib
import cv2
import os# load face detector and shape predictor
# detector = dlib.get_frontal_face_detector()
detector = dlib.cnn_face_detection_model_v1("../model/mmod_human_face_detector.dat")
predictor = dlib.shape_predictor('../model/shape_predictor_68_face_landmarks.dat')img_folder = '../img/'
dst_folder = '../result/'# 检索img_folder下的所有图片
img_files = os.listdir(img_folder)# 逐张处理
for img_file in img_files:# 读取图片org_img = cv2.imread(img_folder + img_file)# 图像拷贝height, width = org_img.shape[:2]img = org_img.copy()# 等比缩放scale = 800.0 / widthnew_height = int(height * scale)img = cv2.resize(img, (800, new_height))# 检测人脸gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)faces = detector(gray, 1)# 人脸关键点定位shape = predictor(gray, faces[0].rect)# 获取关键点的上下左右边界left = shape.part(0).xtop = shape.part(27).yright = shape.part(16).xbottom = shape.part(8).yh,w,c = img.shape# 可视化if len(faces) == 1:for i in range(68):cv2.circle(img, (shape.part(i).x, shape.part(i).y), 1, (0, 0, 255), 2)# 保存结果cv2.imwrite(dst_folder + img_file, img)print(img_folder + img_file)
运行效果如下:
在3090GPU上面测试,平均单张图像检测时间26ms。