目录

一.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 dlib

video=cv2.VideoCapture(0)

2.构建脸部位置检测器

detector=dlib.get_frontal_face_detector()

3.循环对每一帧处理

while True:
    ret,frame=video.read()
    if not ret:
        break
    faces = 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在检测效果更为稳定和全面,尤其在处理遮挡或不同角度时表现突出。
Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐