当前位置: 首页 > news >正文

dlib库的人脸检测案例实现

文章目录

  • 前言
  • 一、dlib 库简介​
    • 1、Dlib库优缺点
      • 1)优点
      • 2)缺点
  • 二、安装 dlib 库​
    • 1、Python 环境安装​
    • 2、C++ 环境安装​
  • 三、案例实现(python)
    • 1、对图片进行人脸识别
    • 2、使用摄像头或对视频检测人脸
  • 总结


前言


一、dlib 库简介​

dlib 是一个包含机器学习算法和工具的跨平台 C++ 库,同时也提供了 Python 接口,方便开发者使用。它涵盖了图像操作、机器学习、数据挖掘等多个领域的功能。在人脸检测方面,dlib 内置了基于 HOG(Histogram of Oriented Gradients,方向梯度直方图)和级联分类器的检测器,以及更为先进的基于深度学习的 CNN(Convolutional Neural Network,卷积神经网络)检测器。这些检测器经过大量数据训练,能够在不同光照、姿态、表情等复杂条件下,准确地检测出人脸,为后续的人脸识别、表情分析等任务奠定了坚实的基础。

1、Dlib库优缺点

1)优点

• 适用于正面和略微非正面的人脸

• 语法极简单

• 再小的遮挡下仍可工作。

2)缺点

• 不能检测小脸,因为它训练数据的最小人脸尺寸为80×80,较小尺寸的人脸数据需自己训练检测器

• 边界框通常排除前额的一部分甚至下巴的一部分

• 不适用于侧面和极端非正面,如俯视或仰视。

二、安装 dlib 库​

在开始使用 dlib 库进行人脸检测之前,我们需要先完成库的安装。以下是在不同环境下的安装方法:​

1、Python 环境安装​

如果你使用的是 Python 环境,推荐使用pip进行安装。在命令行中执行以下命令:​

pip install dlib​


需要注意的是,在某些系统上,直接使用pip install dlib可能会遇到编译问题。此时,可以先安装cmake和boost库,然后再安装dlib。以 Ubuntu 系统为例,安装命令如下:​

sudo apt-get install cmake​
sudo apt-get install libboost-all-dev​
pip install dlib​

2、C++ 环境安装​

对于 C++ 开发者,首先需要从 dlib 的官方 GitHub 仓库下载源代码,地址为:https://github.com/davisking/dlib 。下载完成后,解压文件,进入 dlib 目录,执行以下命令进行编译和安装:​

mkdir build​
cd build​
cmake..​
make​
sudo make install​


完成上述步骤后,dlib 库就成功安装到你的系统中,可以开始使用它进行人脸检测开发了。

三、案例实现(python)

1、对图片进行人脸识别

import cv2
import dlib# 使用HOG算法、线性分类器、金字塔图像结构和滑动窗口检测等技术。
# 比opencv提供的harr级联分类器效果更好
"""生成人脸检测器"""
detector = dlib.get_frontal_face_detector()   # 构造脸部位置检测器HOG
img = cv2.imread("people2.png")# 参数:image:待检测的可能含有人脸的图像。
# 参数n:表示采用上采样的次数。上采样会让图像变大,能够检测到更多人脸对象,提高小人脸的检测效果
# #通常建议将此參数设置为0 或 1。较大的值会增加检测的准确性,但会降低处理速度。
# 返回值faces:返回检测图像中的所有人脸。
faces = detector(img,3)   # 使用构造的脸部位置检测器HOG对图像进行检测,3表示上采样次数
for face in faces:   # 对每个人脸框进行逐个处理# 获取人脸框的坐标x1 = face.left()   # 获取左边像素点的x坐标y1 = face.top()   # 获取上边界y坐标x2 = face.right()   # 右边界x坐标y2 = face.bottom()   # 下边界y坐标# 绘制人脸框cv2.rectangle(img,(x1,y1),(x2,y2),(0,255,0),2)# 是不捕获到的各个人脸框
cv2.imshow("result",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

2、使用摄像头或对视频检测人脸

import cv2
import dlibdetector = dlib.get_frontal_face_detector()   # 构造脸部位置检测器HOGcap = cv2.VideoCapture('笑容.mp4')   # 读取视频帧
# cap = cv2.VideoCapture(0)  # 打开摄像头if not cap.isOpened():   # 如果打开失败print("Cannot open camera")exit()  # 终止程序while True:  # 建立死循环,用来不停地读取视频的每一帧画面ret, image = cap.read()  # 读取视频帧,返回读入状态的布尔值和图片,一次读取一帧画面if not ret:  # 读取失败,则退出循环print("不能读取摄像头")breakfaces = detector(image,0)   # 使用脸部位置检测器对每一帧画面进行识别,0表示上采样次数for face in faces:   # 对每个人脸框进行逐个处理x1 = face.left()y1 = face.top()x2 = face.right()y2 = face.bottom()# 绘制人脸框cv2.rectangle(image,(x1,y1),(x2,y2),(0,255,0),2)# 展示捕获到的各个人脸框cv2.imshow("result",image)k = cv2.waitKey(20)   # 每一帧画面执行20毫秒if k == 27:   # 如果键盘点击esc键,终止循环break
cv2.destroyAllWindows()   # 关闭所有窗口释放资源

总结

注意事项​:

  • 模型文件路径:在使用 CNN 检测器时,要确保预训练模型文件的路径正确,否则会导致检测器加载失败。​
  • 图像格式要求:不同的检测器对输入图像格式有不同的要求,如 HOG 检测器通常在灰度图像上进行检测,而 CNN 检测器要求输入为 RGB 格式图像,使用时要注意图像格式的转换。​
  • 环境兼容性:dlib 库在不同操作系统和 Python/C++ 版本下可能存在兼容性问题,安装和使用过程中遇到问题可以参考官方文档或社区论坛寻求解决方案。

相关文章:

  • Gitee PPM:智能化项目管理如何重塑软件工厂的未来格局
  • 计算机网络 第三章:运输层(二)
  • 5G 网络寻呼的信令及 IE 信息分析
  • C#对集合进行分组IGroupingout TKey, out TElement>
  • day19-20-四剑客-find-grep-sed-awk
  • C# 大文件分割
  • TensorFlow简介与使用指南
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.4.11)
  • 计算机网络 第三章:运输层(三)
  • 解决自签名证书HTTPS告警:强制使用SHA-256算法生成证书
  • 微软CTO:AI已经“能力过剩”,行业需要努力缩小模型能力与实际产品交付之间的差距
  • AUTOSAR AP 入门0:AUTOSAR_EXP_PlatformDesign.pdf
  • ACM知识点总结 -【搜索技术】
  • 【机器学习】欠拟合、过拟合和正则化
  • 高性能图表库SciChart WPF v8.8全新发布——提升渐变颜色映射高度
  • 力扣-长度最小的子数组
  • Linux操作系统:fork+exec进程创建
  • 如果教材这样讲--碳膜电阻、金属氧化膜电阻、金属膜电阻、保险丝电阻、绕线电阻的区别和用途
  • Docker 与微服务架构:从单体应用到容器化微服务的迁移实践
  • 微软全新开源的Agentic Web网络项目:NLWeb,到底是什么 ?
  • 响应式潍坊网站建设/互联网搜索引擎
  • 做像淘宝网的网站/企业如何进行网络推广
  • 深圳网站建设培训/拼多多商品关键词搜索排名
  • 怎么做支付网站/seo主要做什么
  • 手机网站开发人员工具/网站推广100种方法
  • 商城型网站开发网站建设/seo公司上海