dlib库人脸检测
目录
一.dlib库介绍
1.dlib库是什么
2.dlib库与opencv库对比
①opencv优缺点
②dlib优缺点
3.安装dlib库的方法
二.dlib库实现人脸检测
1.构建脸部位置检测器
2.检测人脸,返回储存人脸坐标信息的列表
3.遍历所有人脸,获取每个人脸的坐标并用矩形框画出
三.dlib实现摄像头人脸检测
1.读取摄像头
2.构建脸部位置检测器
3.循环对每一帧处理
4.释放资源
四.dlib库与opencv的人脸检测对比
一.dlib库介绍
1.dlib库是什么
是一个适用于C++和Python的第三方库。包含机器学习、计算机视觉和图像处理的工具包,被广泛的应用于机器人、嵌入式设备、移动电话和大型高性能计算环境。是开源许可用户免费使用。
2.dlib库与opencv库对比
①opencv优缺点
优点:
1)可以在CPU上实时工作;
2)简单的架构;
3)可以检测不同比例的人脸。
缺点:
1)会出现大量的把非人脸预测为人脸的情况;
2)不适用于非正面人脸图像;
3)不抗遮挡。
②dlib优缺点
优点:
1)适用于正面和略微非正面的人脸;
2)语法极简单
3)再小的遮挡下仍可工作。
缺点:
1)不能检测小脸,因为它训练数据的最小人脸尺寸为80×80,较小尺寸的人脸数据需自己训练检测器;
2)边界框通常排除前额的一部分甚至下巴的一部分;
3)不适用于侧面和极端非正面,如俯视或仰视。
3.安装dlib库的方法
①pip install dlib –i 镜像地址,但pip方法可能会报错,原因是:
- Dlib库作为C++库,需要通过cmake进行编译,对Python用户较为不便。
②提前准备好dlib库的whl文件进行安装
pip install whl文件地址
可以通过pip3.9指定版本,注意要选择适合自己python版本的whl文件
二.dlib库实现人脸检测
1.构建脸部位置检测器
import cv2
import dlib
detector=dlib.get_frontal_face_detector()#构建脸部位置检测器
img=cv2.imread('img.png')
2.检测人脸,返回储存人脸坐标信息的列表
faces=detector(img,0)
参数n:表示采用上采样的次数。上采样会让图像变大,能够检测到更多人脸对象,提高小人脸的检测效果
3.遍历所有人脸,获取每个人脸的坐标并用矩形框画出
for face in faces:x1=face.left()y1=face.top()x2=face.right()y2=face.bottom()cv2.rectangle(img,(x1,y1),(x2,y2),(0,255,0),2)
cv2.imshow('result',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
三.dlib实现摄像头人脸检测
1.读取摄像头
import cv2
import dlibvideo=cv2.VideoCapture(0)
2.构建脸部位置检测器
detector=dlib.get_frontal_face_detector()
3.循环对每一帧处理
while True:ret,frame=video.read()if not ret:breakfaces = detector(frame, 0)for face in faces:x1 = face.left()y1 = face.top()x2 = face.right()y2 = face.bottom()cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)cv2.imshow('result', frame)if cv2.waitKey(60)==27:break
按esc键退出
4.释放资源
video.release()
cv2.destroyAllWindows()
四.dlib库与opencv的人脸检测对比
- 优点 (dlib):
- 实现代码极其简单。
- 对于较小人脸、轻微遮挡甚至侧脸有更强的鲁棒性。
- 缺点 (dlib):
- 检测框范围较大,可能会超出标准(如涵盖前额和下巴部分)。
- 基于图形的对比:dlib在检测效果更为稳定和全面,尤其在处理遮挡或不同角度时表现突出。