Bootstrap

【实战】使用YOLO11进行驾驶疲劳检测及警报【附源码与详细说明】

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

一、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.【基于深度学习的行人检测追踪与双向流量计数系统50.【基于深度学习的反光衣检测与预警系统
51.【基于深度学习的危险区域人员闯入检测与报警系统52.【基于深度学习的高密度人脸智能检测与统计系统
53.【基于深度学习的CT扫描图像肾结石智能检测系统54.【基于深度学习的水果智能检测系统
55.【基于深度学习的水果质量好坏智能检测系统56.【基于深度学习的蔬菜目标检测与识别系统
57.【基于深度学习的非机动车驾驶员头盔检测系统58.【太基于深度学习的阳能电池板检测与分析系统
59.【基于深度学习的工业螺栓螺母检测60.【基于深度学习的金属焊缝缺陷检测系统
61.【基于深度学习的链条缺陷检测与识别系统62.【基于深度学习的交通信号灯检测识别
63.【基于深度学习的草莓成熟度检测与识别系统64.【基于深度学习的水下海生物检测识别系统
65.【基于深度学习的道路交通事故检测识别系统66.【基于深度学习的安检X光危险品检测与识别系统
67.【基于深度学习的农作物类别检测与识别系统68.【基于深度学习的危险驾驶行为检测识别系统
69.【基于深度学习的维修工具检测识别系统70.【基于深度学习的维修工具检测识别系统
71.【基于深度学习的建筑墙面损伤检测系统72.【基于深度学习的煤矿传送带异物检测系统
73.【基于深度学习的老鼠智能检测系统

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

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

引言

本文将研究如何在OpenCV中使用YOLO11对象检测模型来检测视频中的眼睛闭合,并在眼睛闭合超过指定阈值时发出警告。我们还将讨论应用这种方法进行实时检测的可能性。眼睛闭合检测在许多现实应用中是一个重要的用例,从监测驾驶员疲劳到确保在关键环境中的警觉性。

环境配置

在我们开始之前,请确保您安装了以下库:

  • OpenCV:用于视频处理和显示结果。
  • Ultralytics YOLO:一种流行且高效的深度学习模型,用于对象检测。

要安装必要的库,可以运行:

pip install opencv-python
pip install ultralytics

闭眼检测基本步骤

  1. 加载YOLO模型:我们加载一个预先训练好的YOLO模型(best.pt)进行眼睛检测。这个模型被训练成识别两种状态:“闭”和“开”的眼睛。
  2. 读取输入视频:使用OpenCV逐帧读取视频。
  3. 执行对象检测:YOLO用于检测每帧中眼睛的状态,是闭合还是睁开的状态。
  4. 跟踪眼睛闭合持续时间如果检测到眼睛“闭合”超过指定阈值,则显示警告。
  5. 显示结果:结果将写入输出视频文件,如果需要,警告消息将覆盖在帧上。

在这里插入图片描述

完整代码

下面是使用YOLO11和OpenCV检测视频中眼睛闭合的完整Python代码:

import cv2
from ultralytics import YOLO

# 加载预训练的YOLO模型
model = YOLO("best.pt")
names = model.names

# 打开视频文件
cap = cv2.VideoCapture("video.mp4")
assert cap.isOpened(), "读取视频文件出错"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

# 初始化视频写入器以保存输出
video_writer = cv2.VideoWriter("output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# 初始化用于检测眼睛闭合的变量
eye_closed_frames = 0
eye_closed_threshold_seconds = 1  # 阈值(秒)
eye_closed_threshold_frames = eye_closed_threshold_seconds * fps  # 将秒转换为帧数

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("视频帧为空或视频处理已成功完成。")
        break

    # 使用YOLO预测眼睛状态
    results = model.predict(im0, show=False)
    boxes = results[0].boxes.xyxy.cpu().tolist()
    clss = results[0].boxes.cls.cpu().tolist()
    annotator = Annotator(im0, line_width=2, example=names)
    eye_closed = False  # 标记当前帧中眼睛是否闭合

    if boxes is not None:
        for box, cls in zip(boxes, clss):
            clsName = names[int(cls)]
            xmax = int(box[0])
            ymin = int(box[1])
            xmin = int(box[2])
            ymax = int(box[3])

            # 根据类别名称设置颜色
            if clsName == 'closed':
                clr = (0, 0, 255)
                eye_closed = True  # 标记眼睛为闭合
            elif clsName == 'opened':
                clr = (0, 255, 0)

            # 绘制边界框和标签
            font = cv2.FONT_HERSHEY_SIMPLEX
            font_scale = 1
            font_thickness = 2
            tw, th = cv2.getTextSize(clsName, font, font_scale, font_thickness)[0]
            cv2.rectangle(im0, (xmin, ymin), (xmax, ymax), color=clr, thickness=2)
            cv2.putText(im0, clsName, (xmax, ymin - 5), font, font_scale, color=clr, thickness=font_thickness)

    # 检查眼睛闭合持续时间
    if eye_closed:
        eye_closed_frames += 1
    else:
        # 如果眼睛未闭合,重置计数器
        eye_closed_frames = 0

    # 如果眼睛闭合时间超过阈值,显示警告
    if eye_closed_frames > eye_closed_threshold_frames:
        print("警告:眼睛闭合时间超过2秒!")
        cv2.putText(im0, "警告:眼睛闭合时间超过2秒!", (50, 50), font, font_scale, (0, 0, 255), font_thickness)

    # 将处理后的帧写入输出视频
    video_writer.write(im0)

# 释放资源
cap.release()
video_writer.release()

代码详细解释

模型加载

  • 使用来自ultralytics库的YOLO类加载YOLO模型,并提取类名。

视频处理

  • 使用cv2.VideoCapture打开输入视频,并初始化视频编写器以保存输出。

逐帧检测

  • 视频是逐帧处理的。对于每一帧,YOLO模型用于检测眼睛并将其分类为“闭合”或“打开”。

闭眼检测

  • 计数器(eye_closed_frames)跟踪眼睛被检测为“闭合”的连续帧的数量。“如果此计数超过阈值(在本例中为1秒的帧),则会显示警告消息。

警告消息显示

  • 每当眼睛已经闭合超过阈值持续时间时,警告消息被动态地覆盖在视频上。

摄像头实时检测

上面演示的方法可以适用于使用网络摄像头或实时视频源的实时检测。以下是您如何实现这一点:

  1. 捕获实时视频:通过将cv2.VideoCapture参数更改为0(默认网络摄像头),将视频文件输入替换为实时视频源。
cap = cv2.VideoCapture(0)  # Use 0 for the default camera, or 1, 2, etc. for other cameras

优化实时性能

  • 为了确保流畅的实时性能,您可能需要通过使用较小的模型(如YOLO11n)或在GPU上运行(如果可用)来优化模型推理速度。

实时显示结果

  • 使用cv2.imshow()实时显示视频源:
cv2.imshow("Eye Closure Detection", im0) if cv2.waitKey(1) & 0xFF == ord('q'):  # Press 'q' to quit     break

通过YOLO和OpenCV的结合,您可以在视频中甚至实时有效地检测眼睛闭合。该技术具有许多实际应用,包括驾驶员监控系统,疲劳检测和各种安全关键领域的警觉性验证。通过利用像YOLO这样的深度学习模型,您可以在检测眼睛闭合等细微面部表情时实现高准确性和性能。


好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

;