驾驶员疲劳检测 yolov5
时间: 2023-10-26 22:08:49 浏览: 189
该项目使用YOLOv5-5.0、Dlib和PySide2实现了一个疲劳驾驶检测系统,其中疲劳检测部分使用Dlib进行人脸关键点检测,然后通过计算眼睛和嘴巴的开合程度来判断是否闭眼或者打哈欠,并使用Perclos模型计算疲劳程度。而分心行为检测部分则使用YOLOv5检测是否存在玩手机、抽烟、喝水这三种行为。疲劳检测模型基于YOLOv5网络结构进行训练,采用YawnDD、CEW、DROZY数据集,共标记6800张样本,按照4:1分为训练集和测试集。该项目利用YOLOv5目标检测技术、人脸关键点检测分析技术结合的新方法,对驾驶员的分心、疲劳驾驶行为进行实时监控,以有效监测驾驶员状态、避免交通事故的发生。
相关问题
驾驶员疲劳检测 yolov5代码
以下是一个基于 YOLOv5 的驾驶员疲劳检测的 Python 代码示例:
```python
import cv2
import numpy as np
import torch
from models.experimental import attempt_load
from utils.general import non_max_suppression, scale_coords
from utils.torch_utils import select_device
# 初始化模型
weights = 'yolov5s.pt'
device = select_device('')
model = attempt_load(weights, map_location=device) # 模型加载到设备上
stride = int(model.stride.max()) # 获取最大步长
imgsz = 640 # 图像尺寸
# 加载分类标签
classes = ['open', 'close']
# 循环读取帧
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
# 预处理图像
img = frame.copy()
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = cv2.resize(img, (imgsz, imgsz))
img = img.transpose(2, 0, 1) # HWC -> CHW
img = np.ascontiguousarray(img)
img = torch.from_numpy(img).to(device).float()
img /= 255.0
if img.ndimension() == 3:
img = img.unsqueeze(0)
# 模型推理
pred = model(img)[0]
pred = non_max_suppression(pred, 0.25, 0.45)
# 处理检测结果
for i, det in enumerate(pred): # 每个检测框
if det is not None and len(det):
det[:, :4] = scale_coords(img.shape[2:], det[:, :4], frame.shape).round()
for *xyxy, conf, cls in reversed(det):
label = f'{classes[int(cls)]} {conf:.2f}'
plot_one_box(xyxy, frame, label=label, color=colors[int(cls)], line_thickness=3)
# 显示结果
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
```
这个代码使用 PyTorch 框架和 YOLOv5 模型来检测视频帧中的驾驶员疲劳状态。它可以在摄像头输入的实时视频流中运行,并在每个检测到的疲劳状态区域周围绘制一个矩形框。
驾驶员疲劳检测 yolov5基于tensorflow代码
以下是基于 TensorFlow 的驾驶员疲劳检测的代码示例,使用的是 YOLOv5 模型:
```python
import tensorflow as tf
import cv2
import numpy as np
from yolov5_tf import YOLOv5
# 初始化模型
model = YOLOv5(input_size=640, model='yolov5s', num_classes=2, anchors_path='data/yolov5_anchors.txt')
model.load_weights('yolov5s_weights.tf')
# 加载分类标签
classes = ['open', 'close']
# 循环读取帧
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
# 预处理图像
img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
img = cv2.resize(img, (640, 640))
img = img.astype(np.float32) / 255.0
img = np.expand_dims(img, axis=0)
# 模型推理
pred = model.predict(img)[0]
pred = tf.clip_by_value(pred, 0, 1)
boxes, scores, classes = model.postprocess(pred, frame.shape[:2][::-1])
# 处理检测结果
for box, score, cls in zip(boxes, scores, classes):
x1, y1, x2, y2 = box
label = f'{classes[int(cls)]} {score:.2f}'
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(frame, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
# 显示结果
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
```
这个代码使用 TensorFlow 框架和 YOLOv5 模型来检测视频帧中的驾驶员疲劳状态。它可以在摄像头输入的实时视频流中运行,并在每个检测到的疲劳状态区域周围绘制一个矩形框。
阅读全文