实战 | 18行代码轻松实现人脸实时检测【附完整代码与源码详解】Opencv、人脸检测

《博主简介》

小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。
更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~
👍感谢小伙伴们点赞、关注!

《------往期经典推荐------》

一、AI应用软件开发实战专栏【链接】

项目名称 项目名称
1.【人脸识别与管理系统开发 2.【车牌识别与自动收费管理系统开发
3.【手势识别系统开发 4.【人脸面部活体检测系统开发
5.【图片风格快速迁移软件开发 6.【人脸表表情识别系统
7.【YOLOv8多目标识别与自动标注软件开发 8.【基于YOLOv8深度学习的行人跌倒检测系统
9.【基于YOLOv8深度学习的PCB板缺陷检测系统 10.【基于YOLOv8深度学习的生活垃圾分类目标检测系统
11.【基于YOLOv8深度学习的安全帽目标检测系统 12.【基于YOLOv8深度学习的120种犬类检测与识别系统
13.【基于YOLOv8深度学习的路面坑洞检测系统 14.【基于YOLOv8深度学习的火焰烟雾检测系统
15.【基于YOLOv8深度学习的钢材表面缺陷检测系统 16.【基于YOLOv8深度学习的舰船目标分类检测系统
17.【基于YOLOv8深度学习的西红柿成熟度检测系统 18.【基于YOLOv8深度学习的血细胞检测与计数系统
19.【基于YOLOv8深度学习的吸烟/抽烟行为检测系统 20.【基于YOLOv8深度学习的水稻害虫检测与识别系统
21.【基于YOLOv8深度学习的高精度车辆行人检测与计数系统 22.【基于YOLOv8深度学习的路面标志线检测与识别系统
23.【基于YOLOv8深度学习的智能小麦害虫检测识别系统 24.【基于YOLOv8深度学习的智能玉米害虫检测识别系统
25.【基于YOLOv8深度学习的200种鸟类智能检测与识别系统 26.【基于YOLOv8深度学习的45种交通标志智能检测与识别系统
27.【基于YOLOv8深度学习的人脸面部表情识别系统 28.【基于YOLOv8深度学习的苹果叶片病害智能诊断系统
29.【基于YOLOv8深度学习的智能肺炎诊断系统 30.【基于YOLOv8深度学习的葡萄簇目标检测系统
31.【基于YOLOv8深度学习的100种中草药智能识别系统 32.【基于YOLOv8深度学习的102种花卉智能识别系统
33.【基于YOLOv8深度学习的100种蝴蝶智能识别系统 34.【基于YOLOv8深度学习的水稻叶片病害智能诊断系统
35.【基于YOLOv8与ByteTrack的车辆行人多目标检测与追踪系统 36.【基于YOLOv8深度学习的智能草莓病害检测与分割系统
37.【基于YOLOv8深度学习的复杂场景下船舶目标检测系统 38.【基于YOLOv8深度学习的农作物幼苗与杂草检测系统
39.【基于YOLOv8深度学习的智能道路裂缝检测与分析系统 40.【基于YOLOv8深度学习的葡萄病害智能诊断与防治系统
41.【基于YOLOv8深度学习的遥感地理空间物体检测系统 42.【基于YOLOv8深度学习的无人机视角地面物体检测系统
43.【基于YOLOv8深度学习的木薯病害智能诊断与防治系统 44.【基于YOLOv8深度学习的野外火焰烟雾检测系统
45.【基于YOLOv8深度学习的脑肿瘤智能检测系统 46.【基于YOLOv8深度学习的玉米叶片病害智能诊断与防治系统
47.【基于YOLOv8深度学习的橙子病害智能诊断与防治系统 48.【车辆检测追踪与流量计数系统
49.【行人检测追踪与双向流量计数系统

二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~

《------正文------》

效果展示

在这里插入图片描述

引言

人脸检测是计算机视觉中的一个重要任务,主要是在图像或视频中自动识别并定位出人脸的位置。它是许多后续任务(如人脸识别、人脸属性分析、表情识别、年龄估计等)的基础。

人脸检测的应用方向极为广泛。在安防监控领域,人脸检测可以用于人员定位和跟踪,进而进行人脸识别,实现身份验证和异常行为监测。在社交媒体上,人脸检测可以自动标注照片中的人脸,进行人脸美化、动态表情生成等功能。在驾驶辅助系统中,通过检测驾驶员的脸,可以检测其是否疲劳、分心等状态,从而及时发出提醒,提高行车安全。此外,人脸检测也在无人售货机、门禁系统、人脸支付等领域发挥着重要作用。

本文将基于Opencv+CvZone实现人脸面部实时检测,并给出了完整源码与代码详细解释,供需要的小伙伴学习参考学习,如果对你有帮助,感谢点赞关注!

实现步骤详解

下面是具体步骤的实现与详细解释:

步骤1: 导入必要的库

import cvzone
from cvzone.FaceDetectionModule import FaceDetector
import cv2
  • cvzone: 提供额外的OpenCV辅助功能,如文本绘制、形状绘制等。
  • cvzone.FaceDetectionModule: 特定于人脸检测的模块。
  • cv2: OpenCV库,用于图像和视频处理。

步骤2: 初始化摄像头

cap = cv2.VideoCapture(0)
  • cv2.VideoCapture(0): 初始化视频捕获对象,参数0代表默认摄像头(通常是内置摄像头)。

步骤3: 创建FaceDetector对象

detector = FaceDetector(minDetectionCon=0.5, modelSelection=0)
  • FaceDetector: 创建一个用于人脸检测的对象。
  • minDetectionCon=0.5: 设置人脸检测的最小置信度阈值为0.5。
  • modelSelection=0: 选择短距离检测模型(适合2米以内)。

步骤4: 实时人脸检测循环

进入一个无限循环,不断从摄像头读取帧。使用FaceDetector检测当前帧中的人脸,并更新图像。如果检测到人脸,遍历每个边界框并获取相关数据,如中心点、边界框坐标、识别置信度。在图像上绘制人脸中心的圆圈、识别置信度的文本以及人脸边界框。

while True:
    success, img = cap.read()
    img, bboxs = detector.findFaces(img, draw=False)
    
    if bboxs:
        for bbox in bboxs:
            center = bbox["center"]
            x, y, w, h = bbox['bbox']
            score = int(bbox['score'][0] * 100)
            
            cv2.circle(img, center, 5, (255, 0, 255), cv2.FILLED)
            cvzone.putTextRect(img, f'{score}%', (x, y - 15), border=5)
            cvzone.cornerRect(img, (x, y, w, h))
  • cap.read(): 读取摄像头的一帧图像。
  • detector.findFaces(): 在图像中检测人脸,draw=False表示不直接在图像上绘制检测结果。
  • 对于检测到的每个人脸:
    提取并使用中心点、边界框信息。
    计算并显示识别置信度。
    使用cv2.circle, cvzone.putTextRect, cvzone.cornerRect在图像上绘制人脸检测结果。

步骤5: 显示图像

cv2.imshow("Image", img)
cv2.waitKey(1)
  • cv2.imshow(“Image”, img): 在名为"Image"的窗口显示处理过的图像。

  • cv2.waitKey(1): 暂停程序执行,等待1毫秒。

完整源码

这段代码整体实现了从摄像头获取实时视频流,进行人脸检测,并在检测到的人脸上绘制边界框、置信度分数和中心点标记的过程。

# 导入必要的库
import cvzone
from cvzone.FaceDetectionModule import FaceDetector
import cv2

# 初始化摄像头
# '2' 表示连接到计算机的第三个摄像头,通常 '0' 指的是内置摄像头
cap = cv2.VideoCapture(0)

# 初始化FaceDetector对象
# minDetectionCon: 最小检测置信度阈值
# modelSelection: 0 表示短距离检测(2米),1 表示长距离检测(5米)
detector = FaceDetector(minDetectionCon=0.5, modelSelection=0)

# 循环获取摄像头帧
while True:
    # 从摄像头读取当前帧
    # success: 布尔值,表示是否成功捕获了帧
    # img: 捕获的帧
    success, img = cap.read()

    # 在图像中检测人脸
    # img: 更新后的图像
    # bboxs: 检测到的人脸边界框列表
    img, bboxs = detector.findFaces(img, draw=False)

    # 如果检测到人脸
    if bboxs:
        # 遍历每个边界框
        for bbox in bboxs:
            # bbox 包含 'id', 'bbox', 'score', 'center'

            # ---- 获取数据 ---- #
            center = bbox["center"]  # 中心点坐标
            x, y, w, h = bbox['bbox']  # 边界框坐标和大小
            score = int(bbox['score'][0] * 100)  # 识别置信度(百分比)

            # ---- 绘制数据 ---- #
            cv2.circle(img, center, 5, (255, 0, 255), cv2.FILLED)  # 画出圆形标记人脸中心
            cvzone.putTextRect(img, f'{score}%', (x, y - 15), border=5)  # 显示识别置信度文本
            cvzone.cornerRect(img, (x, y, w, h))  # 画出矩形框

    # 在名为'Image'的窗口中显示图像
    cv2.imshow("Image", img)
    # 等待1毫秒
    cv2.waitKey(1)


好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
更多干货内容,可关注文末G-Z-H: 【阿旭算法与机器学习】,欢迎共同学习交流

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-10 18:18:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-10 18:18:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-10 18:18:03       82 阅读
  4. Python语言-面向对象

    2024-05-10 18:18:03       91 阅读

热门阅读

  1. docker-nginx目录宿主机映射

    2024-05-10 18:18:03       36 阅读
  2. web页面与原生android通信,调用原生android方法

    2024-05-10 18:18:03       30 阅读
  3. Linux系统入侵排查(三)

    2024-05-10 18:18:03       39 阅读
  4. docker容器 怎么查看运行日志

    2024-05-10 18:18:03       29 阅读
  5. Linux 常用命令

    2024-05-10 18:18:03       31 阅读
  6. TCP UDP

    TCP UDP

    2024-05-10 18:18:03      30 阅读
  7. 光伏发电消纳是什么意思?如何消纳?

    2024-05-10 18:18:03       30 阅读
  8. export QT_DEBUG_PLUGINS=1

    2024-05-10 18:18:03       28 阅读