《深度学习》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、对图片进行人脸识别

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 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()   # 关闭所有窗口释放资源
        运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/894178.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安装和简单使用Milvus

安装和简单使用Milvus 1 介绍 Milvus是国产的高性能分布式向量数据库。 # Milvus官网 https://milvus.io/# 安装文档 https://milvus.io/docs/install-overview.md# Python的对应关系和接口文档 https://milvus.io/api-reference/pymilvus/v2.4.x/About.md2 安装Milvus 2.1…

flutter assets配置加载本地图片报错

首选列出我在照着网上说的设置assets怎么搞都报错,错误如下,搞的我想骂娘。 flutter: uses-material-design: true assets: - assets/images 后来找到了下面这个教程,才终于解决,就是要在后面加一个"/" 。 flutter这个…

北京大学与长安汽车联合发布TEOcc: 时域增强的多模态占据预测

北京大学与长安汽车联合发布TEOcc: 时域增强的多模态占据预测 Abstract 作为一种新颖的3D场景表示,语义占据(semantic occupancy)在自动驾驶领域引起了广泛关注。然而,现有的占据预测方法主要集中于设计更好的占据表示形式&…

scala 抽象类

理解抽象类 抽象的定义 定义一个抽象类 :abstract class A {} idea实例 抽象类重写 idea实例 练习 1.abstract2.错3.abstract class A{}4.对

保姆级Pinpoint(APM)实战教程

什么是Pinpoint Pinpoint是由韩国NAVER公司开发并开源的一款应用程序管理工具,主要针对大规模分布式系统进行性能监控和故障诊断。通过跟踪分布式应用程序之间的事务,帮助分析系统的整体结构以及其中的组件是如何相互连接的。 与其对标的还有Twitter的Zi…

软件模拟I2C和硬件直接驱动I2C读取TCA95系列I2C转IO芯片分析

问题描述: 软件读取I2C转IO信号跳变,低电平时能读到高电平信号,高电平时能读到低电平信号,正确信号和错误信号的比值约10:1。 原因分析: I2C芯片的驱动底层采用了软件模拟实现,没有防错机制,…

MongoDB 8.0已全面可用

全球广受欢迎的文档型数据库MongoDB目前最新最强的版本,在易用性、企业级安全性、 弹性、可用性等方面均有大幅提升,适用于各种应用程序。 MongoDB 8.0的优化使整体吞吐量提高了32%,时间序列数据聚合的处理速度提高了200%以上。MongoDB 8.0的…

SSD |(七)FTL详解(中)

文章目录 📚垃圾回收🐇垃圾回收原理🐇写放大🐇垃圾回收实现🐇垃圾回收时机 📚解除映射关系📚磨损均衡 📚垃圾回收 🐇垃圾回收原理 ✋设定一个迷你SSD空间: 假…

OpenAi推出ChatGPT客户端

10 月 18 日,继苹果 macOS 版之后,OpenAI 为微软 Windows 用户推出了 ChatGPT 应用桌面客户端。目前这款应用正在测试,ChatGPT Plus / Enterprise / Team / Edu 版本的付费用户可以在微软应用商店中下载使用。 这款应用实质上是网页版 ChatGP…

Part1_MCP4017T-502E/LT型数字变阻器使用方法

MCP4017T-502E/LT是Microchip(微芯)公司的一款SC70封装且具备7位单I2C™数字端口与易失性存储器数字电位器,通过数字接口来控制电位器的阻值大小,可用于需要精确调整电压分压比、信号增益控制等应用场景。相比传统的机械电位器&am…

【Java】多线程 Start() 与 run() (简洁实操)

Java系列文章目录 补充内容 Windows通过SSH连接Linux 第一章 Linux基本命令的学习与Linux历史 文章目录 Java系列文章目录一、前言二、学习内容:三、问题描述start() 方法run() 方法 四、解决方案:4.1 重复调用 .run()4.2 重复调用 start()4.3 正常调用…

初识Linux · 重定向和缓冲区

目录 前言: 预备知识 缓冲区 重定向 前言: 其实有了文件2的预备知识,我们已经初步了解了文件描述符fd是什么,底层是如何运作的了,那么本文,我们通过文件描述符对重定向和缓冲区有一个更深层次的理解&a…

鸿蒙开发案例:推箱子

推箱子游戏(Sokoban)的实现。游戏由多个单元格组成,每个单元格可以是透明的、墙或可移动的区域。游戏使用Cell类定义单元格的状态,如类型(透明、墙、可移动区域)、圆角大小及坐标偏移。而MyPosition类则用于…

三菱PLC如何实现数据排序的分析?

一、分析 将D100到D104中的据从小到大排序结果存在D100到D104中,如D100到D104中存入100,34,27,45,22这5个数据,编写一个子程序,只到通过调用这个子程序就可以实现这5个数据的排序。当然简单的方…

iOS IPA上传到App Store Connect的三种方案详解

引言 在iOS应用开发中,完成开发后的重要一步就是将IPA文件上传到App Store Connect以便进行测试或发布到App Store。无论是使用Xcode进行原生开发,还是通过uni-app、Flutter等跨平台工具生成的IPA文件,上传到App Store的流程都是类似的。苹果…

衡石分析平台系统分析人员手册-应用模版

应用模板​ 应用模板使分析成果能被快速复用,节省应用创作成本,提升应用创作效率。此外应用模板实现了应用在不同环境上快速迁移。 支持应用复制功能 用户可以从现有的分析成果关联到新的分析需求并快速完成修改。 支持应用导出为模板功能 实现多个用户…

数论的第二舞——卡特兰数

当然了,虽然主角是卡特兰数,但是我们该学的数论还是不能落下的,首先先来介绍一个开胃小菜线性筛 1.积性函数: 2.线性筛 线性筛的筛选素数的时间复杂度更低,可以达到O(n)的时间复杂度 将每一轮进行筛选的数 n 表示…

Threejs 实现3D 地图(02)创建3d 地图

"d3": "^7.9.0", "three": "^0.169.0", "vue": "^3.5.10" 地图数据来源&#xff1a; DataV.GeoAtlas地理小工具系列 <script setup> import {onMounted, ref} from vue import * as THREE from three im…

Spring Cloud 解决了哪些问题?

大家好&#xff0c;我是锋哥。今天分享关于【Spring Cloud 解决了哪些问题&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; Spring Cloud 解决了哪些问题&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring Cloud 是一个为构建分布式…

汽车建模用什么软件最好?汽车建模渲染建议!

在汽车建模和渲染领域&#xff0c;选择合适的软件对于实现精确的设计与高质量的视觉效果至关重要。那么不少的汽车设计师如何选择合适的建模软件与渲染方案呢&#xff0c;一起来简单看看吧&#xff01; 一、汽车建模用软件推荐 1、Alias Autodesk旗下的Alias系列软件是汽车设…