Dlib是一个久经考验的C++机器学习库,在计算机视觉和图像处理领域有着广泛应用。它最吸引人的特点是:
我在多个实际项目中验证过,相比OpenCV的人脸检测,Dlib的HOG检测器在侧脸和遮挡情况下表现更稳定。这也是为什么许多学术论文和商业产品都选择集成Dlib。
首先确认你的Ubuntu版本:
bash复制lsb_release -a
Dlib需要Ubuntu 16.04及以上版本。我推荐使用18.04或20.04 LTS版本,这两个版本有更好的长期支持。
这些是Dlib的核心依赖:
bash复制sudo apt update
sudo apt install -y build-essential cmake
sudo apt install -y libopenblas-dev liblapack-dev
sudo apt install -y libx11-dev libgtk-3-dev
特别提醒:
libopenblas-dev 是矩阵运算加速库,对性能影响很大libgtk-3-dev 是GUI相关依赖,如果只用命令行可以省略bash复制sudo apt install -y python3-dev python3-pip
最简单的安装方式:
bash复制pip install dlib
但这种方式有两个潜在问题:
我建议添加优化参数:
bash复制pip install dlib --install-option="--yes" --install-option="USE_AVX_INSTRUCTIONS" --install-option="--yes" --install-option="DLIB_USE_CUDA"
注意:
USE_AVX_INSTRUCTIONS需要CPU支持AVX指令集,可以用cat /proc/cpuinfo | grep avx检查
bash复制wget http://dlib.net/files/dlib-19.24.tar.bz2
tar xf dlib-19.24.tar.bz2
cd dlib-19.24
bash复制mkdir build; cd build
cmake .. -DDLIB_USE_CUDA=0 -DUSE_AVX_INSTRUCTIONS=ON
cmake --build . --config Release
bash复制cd ..
python3 setup.py install --yes USE_AVX_INSTRUCTIONS --no DLIB_USE_CUDA
关键参数说明:
-DDLIB_USE_CUDA=1 启用CUDA加速(需要NVIDIA显卡)-DUSE_AVX_INSTRUCTIONS=ON 启用CPU向量化指令--no DLIB_USE_CUDA 禁用CUDA(如果没有N卡)创建一个简单的测试脚本test_dlib.py:
python复制import dlib
print(f"Dlib version: {dlib.__version__}")
print(f"CUDA支持: {dlib.DLIB_USE_CUDA}")
print(f"AVX支持: {dlib.USE_AVX_INSTRUCTIONS}")
detector = dlib.get_frontal_face_detector()
print("人脸检测器加载成功!")
运行结果应该类似:
code复制Dlib version: 19.24.0
CUDA支持: False
AVX支持: True
人脸检测器加载成功!
编译时如果遇到:
code复制terminate called after throwing an instance of 'std::bad_alloc'
这是因为编译Dlib需要大量内存,至少需要4GB空闲内存。解决方案:
bash复制sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
如果遇到:
code复制ImportError: libboost_python3.so.1.65.1: cannot open shared object file
需要安装boost库:
bash复制sudo apt install -y libboost-all-dev
如果想启用CUDA支持,需要先安装:
然后编译时添加:
bash复制cmake .. -DDLIB_USE_CUDA=1 -DUSE_AVX_INSTRUCTIONS=ON
python复制import dlib
assert dlib.USE_AVX_INSTRUCTIONS
python复制detector = dlib.get_frontal_face_detector()
# 第二个参数是上采样次数,减少能提速但降低小脸检测率
dets = detector(img, 1) # 默认是1
python复制dlib.set_num_threads(4) # 根据CPU核心数设置
python复制cnn_detector = dlib.cnn_face_detection_model_v1("mmod_human_face_detector.dat")
python复制import dlib
import cv2
detector = dlib.get_frontal_face_detector()
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret: break
rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
dets = detector(rgb, 1)
for det in dets:
cv2.rectangle(frame, (det.left(), det.top()),
(det.right(), det.bottom()), (0,255,0), 2)
cv2.imshow('Face Detection', frame)
if cv2.waitKey(1) == 27: break
cap.release()
cv2.destroyAllWindows()
需要先下载预训练模型:
bash复制wget http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
bunzip2 shape_predictor_68_face_landmarks.dat.bz2
然后使用:
python复制predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
dets = detector(rgb, 1)
for det in dets:
shape = predictor(rgb, det)
for i in range(68):
cv2.circle(frame, (shape.part(i).x, shape.part(i).y),
2, (0,0,255), -1)
bash复制cd dlib-19.24/dlib
mkdir build; cd build
cmake .. -DDLIB_USE_CUDA=1 -DDLIB_USE_BLAS=1
make -j4
dockerfile复制FROM ubuntu:20.04
RUN apt update && apt install -y python3-pip libopenblas-dev
RUN pip install dlib
bash复制sudo apt install -y intel-mkl
export MKLROOT=/usr/include/mkl
cmake .. -DUSE_MKL=1