《深度学习》OpenCV库、Dlib库 人脸检测 案例解析

目录

一、Dlib库

1、什么是Dlib库

2、OpenCV优缺点

1)优点

2)缺点

3、Dlib库优缺点

1)优点

2)缺点

4、安装Dlib库

二、案例实现

1、对图片进行人脸识别

运行结果:

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

运行结果:


一、Dlib库

1、什么是Dlib库

Dlib库是一个适用于C++Python的第三方库。包含机器学习、计算机视觉和图像处理的工具包,被广泛的应用于机器人、嵌入式设备、移动电话和大型高性能计算环境。是开源许可用户免费使用。

2、OpenCV优缺点

1)优点

可以在CPU上实时工作

简单的架构

可以检测不同比例的人脸

2)缺点

会出现大量的把非人脸预测为人脸的情况

• 不适用于非正面人脸图像

• 不抗遮挡

3、Dlib库优缺点

1)优点

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

**•**语法极简单

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

2)缺点

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

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

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

4、安装Dlib库

**1)**pip install dlib -i 镜像地址

**2)**找到dlib库的whl文件进行安装

在whl文件目录下,点击上方文件地址栏,输入cmd,然后使用命令pip install whl文件名即可

二、案例实现

1、对图片进行人脸识别

python 复制代码
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、使用摄像头或对视频检测人脸

python 复制代码
import cv2
import dlib

detector = dlib.get_frontal_face_detector()   # 构造脸部位置检测器HOG

cap = 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("不能读取摄像头")
        break

    faces = 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()   # 关闭所有窗口释放资源
运行结果:
相关推荐
aaPIXa6227 分钟前
C++采样引导优化SPGO——比PGO更智能的编译器决策新方案
java·c++·人工智能
2601_9571909022 分钟前
飞行影院安装施工指南:场地、动感系统与影片内容配套
大数据·前端·人工智能
ACP广源盛1392462567334 分钟前
IX9104 PCIe5.0 交换芯片@ACP#国产高端 AI PC 全搭配方案
大数据·人工智能·分布式·单片机·嵌入式硬件
her_heart42 分钟前
把 ChatGPT 5.6 放进需求评审和测试设计之后,我反而减少了“一次成稿”的期待
网络·人工智能·网络协议·chatgpt·测试用例
YHHLAI1 小时前
Agent 智能体开发实战 · 第六课:MCP 协议 —— 让 Agent 跨进程调用工具
前端·人工智能
QiLinkOS1 小时前
第三视觉理解徐玉生与他的商业活动(41)
人工智能·dna双螺旋归因模型·专利竞争情报系统·技术专利·新能源汽车行业技术洞察报告
HhzZzzzz_1 小时前
萨科微Slkor2026年7月10日每日芯闻。
人工智能·智能手机·编辑器
卡梅德生物科技小能手1 小时前
卡梅德生物:一文读懂核心炎症靶点TNF(肿瘤坏死因子)
经验分享·深度学习·生活
初晴融雪-快雪时晴1 小时前
基础知识:2026年7月国内一级市场资金全景分析
人工智能
lld9510272 小时前
我做了一个 AI Agent Skill 云:用 MCP 在 Claude Code、Codex、OpenCode 之间同步技能
数据库·人工智能