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

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


http://www.mrgr.cn/news/51799.html

相关文章:

  • 从零开始实现大语言模型(十二):文本生成策略
  • DAY53WEB 攻防-XSS 跨站SVGPDFFlashMXSSUXSS配合上传文件添加脚本
  • 【LeetCode】14.最长公共前缀
  • 代码随想录day40:动态规划part13
  • 【文献及模型、制图分享】干旱区山水林田湖草沙冰一体化保护与系统治理——基于土地退化平衡视角
  • 股票分析软件设计
  • 【C++11入门】新特性总结之lambda表达式
  • 人机之间的系统论不同于机器之间的系统论
  • 关于jmeter中没有jp@gc - response times over time
  • 华为OD机试真题---选修课
  • 分享一个图片RGB以及16进制颜色提取的在线网站
  • js高级-理解call()的原理
  • 【MySQL】入门篇—基本数据类型:使用ORDER BY进行排序
  • 【分布式微服务云原生】《Redis 缓存污染问题全解析及淘汰策略深度探索》
  • 1015邮件定时发送作业
  • Python库numpy之三
  • CCleaner Pro v6.29.11342 系统清理优化软件绿色便携版
  • PyQt入门指南十八 QSpinBox和QDoubleSpinBox微调框组件
  • 冒泡排序.
  • QCOM-Tools 高通工具QXDM、QCAT和QPST的使用