完整代码一览
import cv2
import dlib
detector = dlib.get_frontal_face_detector()
img = cv2.imread('pyy.png')
faces = detector(img, 0)
for face in faces:
x1 = face.left()
y1 = face.top()
x2 = face.right()
y2 = face.bottom()
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 0, 255), 2)
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
一、安装 dlib 库
在运行代码之前,你需要安装 dlib。由于 dlib 依赖 C++ 编译环境,安装可能会有点挑战,但你可以使用以下命令尝试:
pip install dlib
如果安装失败,可以下载预编译的 wheel 文件(针对 Python 版本和系统),或者使用 conda 安装:
conda install -c conda-forge dlib
二、逐行代码解释
导入库
import cv2 #用于读取、显示和绘制图像
import dlib #包含机器学习算法的 C++ 库,提供了人脸检测、特征点定位、人脸识别等功能
创建人脸检测器
detector = dlib.get_frontal_face_detector()
dlib.get_frontal_face_detector() 返回一个基于 HOG + 线性 SVM 的人脸检测器对象。该检测器经过大量训练,能检测不同大小、不同角度的人脸(正面和侧面)。
读取图像
img = cv2.imread('pyy.png')
读取名为 pyy.png 的图片
执行人脸检测
faces = detector(img, 0)
detector(img, 0) 对图像进行人脸检测。第二个参数 0 表示不进行图像上采样(upsample),即使用原始尺寸进行检测。如果你想检测更小的人脸,可以增加这个值(如 1 表示上采样一次),但会降低速度。
返回一个矩形列表,每个矩形代表一张人脸的位置。

绘制矩形框
for face in faces:
x1 = face.left() #左
y1 = face.top() #上
x2 = face.right() #右
y2 = face.bottom() #下
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 0, 255), 2)
遍历每个人脸框,获取左上角坐标 (x1, y1) 和右下角坐标 (x2, y2)。
显示和保存结果
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
显示标注后的图像,按任意键关闭窗口。
运行结果:

三、与 OpenCV Haar 级联的对比
| 特性 | Haar 级联 | dlib HOG + SVM |
|---|---|---|
| 速度 | 非常快 | 稍慢 |
| 准确率 | 正面高,侧面差 | 正面和侧面都较好 |
| 适用场景 | 实时低功耗应用 | 精度要求较高的应用 |
通过对比可以看出,dlib 更适合对准确率有较高要求的场景,如果你的应用对实时性要求极高,可以继续使用 Haar,反之则推荐 dlib。

4433

被折叠的 条评论
为什么被折叠?



