如何实现基于 yolov8疲劳驾驶检测项目,能够检测出图片或者视频里的人是否疲劳,并给出预警。
文章目录
yolov8经典疲劳驾驶检测项目,能够检测出图片或者视频里的人是否疲劳,并给出预警。
附包括数据集,模型训练脚本,演示视频,附ppt,源代码
YOLOv8 + 疲劳驾驶检测与预警
在这里插入代码片import cv2
import numpy as np
from ultralytics import YOLO
# 初始化YOLOv8模型
model = YOLO('runs/train/fatigue_detection/weights/best.pt')
# 定义类别名称
class_names = ['alert', 'fatigue'] # 根据你的数据集类别进行修改
# 打开视频流(可以是摄像头或视频文件)
cap = cv2.VideoCapture(0) # 0 表示默认摄像头,也可以替换为视频文件路径
while True:
ret, frame = cap.read()
if not ret:
break
# 进行目标检测
results = model(frame)
detections = []
for result in results:
boxes = result.boxes.cpu().numpy()
for box in boxes:
r = box.xyxy[0].astype(int)
cls = int(box.cls[0])
conf = box.conf[0]
# 添加检测结果到列表中
detections.append([r[0], r[1], r[2]-r[0], r[3]-r[1], conf, cls])
# 绘制检测框和类别标签
for detection in detections:
bbox = [detection[0], detection[1], detection[2], detection[3]]
conf = detection[4]
cls = detection[5]
label = class_names[cls]
color = (0, 255, 0) if cls == 0 else (0, 0, 255) # 绿色表示清醒,红色表示疲劳
cv2.rectangle(frame, (bbox[0], bbox[1]), (bbox[0] + bbox[2], bbox[1] + bbox[3]), color, 2)
cv2.putText(frame, f'{label} ({conf:.2f})', (bbox[0], bbox[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, color, 2)
# 发出警报
if cls == 1: # 如果检测到疲劳状态
cv2.putText(frame, 'FATIGUE DETECTED!', (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1.2, (0, 0, 255), 3)
# 显示结果
cv2.imshow('Fatigue Detection', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
好的,了解了你的需求。你希望构建一个基于YOLOv8的经典疲劳驾驶检测系统,能够检测出图片或视频中的人是否处于疲劳状态,并给出预警。我们将提供数据集、模型训练脚本、演示视频和完整的源代码。
项目介绍
数据准备
- 数据集: 包含标注好的疲劳驾驶相关的图像和视频。
- 类别:
fatigue
: 疲劳状态alert
: 醒着的状态
- 标注格式: YOLO TXT格式。
- 数据分布:
- 假设数据集已经按照一定的比例划分好了训练集、验证集和测试集。
模型选择
- YOLOv8: 用于目标检测。
功能
- 数据加载: 自动从指定目录加载图像和标注文件。
- 模型训练: 使用YOLOv8进行训练。
- 模型评估: 在验证集上评估模型性能。
- 结果保存: 保存训练日志和最佳模型权重。
- 视频/摄像头输入: 实时疲劳驾驶检测与预警。
- 可视化预测结果: 可视化预测结果以进行验证。
数据集
假设你有一个数据集 fatigue_detection_dataset
,其内容如下:
fatigue_detection_dataset/
├── train/
│ ├── images/
│ │ ├── image1.jpg
│ │ ├── image2.jpg
│ │ └── ...
│ ├── labels/
│ │ ├── image1.txt
│ │ ├── image2.txt
│ │ └── ...
├── val/
│ ├── images/
│ │ ├── image1.jpg
│ │ ├── image2.jpg
│ │ └── ...
│ ├── labels/
│ │ ├── image1.txt
│ │ ├── image2.jpg
│ │ └── ...
├── test/
│ ├── images/
│ │ ├── image1.jpg
│ │ ├── image2.jpg
│ │ └── ...
│ ├── labels/
│ │ ├── image1.txt
│ │ ├── image2.jpg
│ │ └── ...
├── data.yaml
模型训练脚本
视频/摄像头输入脚本
演示视频
由于无法直接生成或上传视频,你可以通过以下步骤录制自己的演示视频:
-
运行追踪脚本:
python tracking_script.py
-
录制屏幕:
- 使用屏幕录制软件(如 OBS Studio)录制视频输出。
完整源代码
以下是完整的源代码,包括训练脚本和追踪脚本。
训练脚本 (train_fatigue_detection.py
)
追踪脚本 (track_fatigue_detection.py
)
如何使用这些代码
-
准备数据:
- 确保你的数据集格式正确,包含训练集、验证集和测试集文件夹,以及对应的标注文件。
- 示例数据结构如下:
path/to/fatigue_detection_dataset/ ├── train/ │ ├── images/ │ │ ├── image1.jpg │ │ ├── image2.jpg │ │ └── ... │ ├── labels/ │ │ ├── image1.txt │ │ ├── image2.txt │ │ └── ... ├── val/ │ ├── images/ │ │ ├── image1.jpg │ │ ├── image2.jpg │ │ └── ... │ ├── labels/ │ │ ├── image1.txt │ │ ├── image2.jpg │ │ └── ... ├── test/ │ ├── images/ │ │ ├── image1.jpg │ │ ├── image2.jpg │ │ └── ... │ ├── labels/ │ │ ├── image1.txt │ │ ├── image2.jpg │ │ └── ... ├── data.yaml
-
替换数据路径:
- 在训练脚本中,将
'path/to/fatigue_detection_dataset'
替换为你的数据集路径。
dataset_dir = 'your_dataset_directory'
- 在训练脚本中,将
-
安装依赖项:
pip install ultralytics opencv-python-headless
-
运行训练脚本:
python train_fatigue_detection.py
-
运行追踪脚本:
python track_fatigue_detection.py
-
查看结果:
- 实时显示带有检测框和类别标签的视频或摄像头画面。
- 如果检测到疲劳状态,会在画面中显示“FATIGUE DETECTED!”的警告信息。
注释说明
代码中包含了详细的注释,帮助你理解每个部分的功能。以下是关键部分的注释:
-
数据准备:
data_config
: 加载现有的YAML配置文件,该文件已经包含了训练集、验证集和测试集的路径以及类别信息。
-
模型训练:
model.train
: 使用YOLOv8进行训练。
-
模型评估:
model.val
: 在验证集上评估模型性能。
-
视频/摄像头输入:
cv2.VideoCapture
: 打开视频流(可以是摄像头或视频文件)。
-
目标检测:
model(frame)
: 使用YOLOv8进行目标检测。
-
绘制检测结果:
cv2.rectangle
: 绘制检测框。cv2.putText
: 显示类别标签和置信度分数。
-
发出警报:
- 如果检测到疲劳状态,会在画面中显示“FATIGUE DETECTED!”的警告信息。
结果
运行代码后,你将得到以下结果:
-
控制台输出:
- 训练过程中每个epoch的日志信息。
- 验证集上的评价指标(如mAP)。
-
文件输出:
runs/train/fatigue_detection/weights/best.pt
: 最佳模型权重。runs/val/exp/results.txt
: 验证结果。
-
实时显示:
- 视频或摄像头输入的画面中带有检测框和类别标签的图像。
- 如果检测到疲劳状态,会在画面中显示“FATIGUE DETECTED!”的警告信息。
希望这些详细的信息和代码能够帮助你顺利实施和优化你的疲劳驾驶检测系统。如果你有任何进一步的问题或需要更多帮助,请随时提问!
运行步骤总结
-
安装依赖项:
pip install ultralytics opencv-python-headless
-
准备数据集:
- 确保数据集路径正确,并且包含训练集、验证集和测试集文件夹,以及对应的标注文件。
-
运行训练脚本:
python train_fatigue_detection.py
-
运行追踪脚本:
python track_fatigue_detection.py
-
查看结果:
- 实时显示带有检测框和类别标签的视频或摄像头画面。
- 如果检测到疲劳状态,会在画面中显示“FATIGUE DETECTED!”的警告信息。
希望这些详细的指导和代码示例能帮助你成功实现和优化你的疲劳驾驶检测项目。