计算机毕设选题推荐:基于YOLO的疲劳驾驶检测怎么做 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习

0 阅读7分钟

基于YOLO的疲劳驾驶检测怎么做-简介

本系统围绕疲劳驾驶这一场景,做了一套基于YOLO深度学习的目标检测程序,核心任务是识别驾驶员在行车过程中是否进入疲劳状态。YOLO属于单阶段检测器,速度快、适合近实时画面处理,本系统选用其中等大小的模型变体,在速度和精度之间取一个平衡,既能跑演示也不至于太吃机器。技术上整体走Python路线:检测模型用Ultralytics提供的YOLO系列,后端服务用Django搭建,前端展示页用Vue编写,训练好的权重常驻后端,网页每次识别直接调用,不重复训练。检测目标只有两类,drowsy代表疲劳、undrowsy代表清醒,模型会对驾驶员头肩和面部区域生成边界框,并给出类别与置信度,方便判断模型有多大把握。功能层面系统提供四种识别入口:图片识别支持用户上传一张驾驶截图得到框选结果;视频识别会把视频按固定间隔抽帧,逐帧送进模型并累计疲劳帧数;摄像头识别调用本地摄像设备做近实时推演;识别页把模型返回的框直接画在原图上,疲劳框用红色标出,结果区同时列出类别和置信度,演示时一眼能看懂。历史记录模块把每次识别的时间、类别和置信度落库,统计大屏再把这些记录聚合成趋势图方便查看,大屏主要统计总识别次数、疲劳占比和按时间的变化,汇报时直接截图就能用。训练数据来自Kaggle公开数据集YaWDD,共约一万张驾驶状态图像,已按YOLO格式做好归一化标注。数据按驾驶会话整组切分,避免同一段视频的相邻帧跨进不同集合造成泄露,训练、验证、测试大致按八成多、一成多、约百分之二划分,两类样本比例接近一比一,整体比较均衡。另外数据里约有百分之六的样本被标注工具判为可能错标,按约定只在说明里如实披露、不自动清洗,训练照常进行。训练时用早停策略监控验证指标,收尾时挑出验证表现更稳的那一份权重best.pt供网站使用,整套东西对配置要求不高,普通带独显的笔记本就能完成训练和演示,不需要服务器。整条处理流程可以概括为数据准备、模型推理、结果落盘与页面展示四步,逻辑清晰,适合作为计算机毕设的完整案例。

基于YOLO的疲劳驾驶检测怎么做-背景

疲劳驾驶是道路交通安全里一个挺现实的问题,人在长时间开车后容易出现闭眼、低头、反应变慢这类状态,等到真的出事往往已经晚了。早些年的疲劳监测大多依赖方向盘转角、心率带或者红外眼动仪这类专门设备,成本高也不好普及。这几年计算机视觉和深度学习发展起来,单纯用车内摄像头拍到的画面,就能靠目标检测模型去判断驾驶员是不是疲劳,这种思路成本低、也好部署。对在校学生来说,做一套基于YOLO的疲劳驾驶检测程序,数据公开可得、模型有现成框架、功能又能跑在网页上演示,是一个能从头跟到尾、不容易半途卡死的毕设方向。比起只写算法小练习,它更让人看到从数据到上线的完整过程。正是看中它既贴着真实场景、又能在普通电脑上复现,才把它定为题目。

做这个题目,一个实在的好处是能把课堂上学的目标检测、Python编程和Web开发串成一条线,比单纯写个算法Demo更有完成度。实际层面,它给出了一种低成本的疲劳预警思路,哪怕只是个演示,也能让人直观看到模型怎么从画面里认出疲劳状态。对学校里的毕设训练来说,它覆盖了数据划分、模型训练、接口对接和页面展示多个环节,能练到不少真本事。从学习方法看,跟着公开数据和现成框架一步步做,比零散看教程更容易建立整体认知。往小了说,它帮我自己把深度学习项目从环境到上线走通了一遍;往大了说,这类轻量检测方案在车队管理、驾校培训里也有被继续打磨的价值。当然它终归是一份毕业设计,能力有限,结论也要诚实标注测试集规模偏小这类局限,不能夸大效果。

基于YOLO的疲劳驾驶检测怎么做-核心功能

功能一:图片识别 用户上传一张驾驶截图,系统调用 YOLO 模型推理,返回框选结果以及疲劳或清醒的类别和置信度。 功能二:视频识别 上传一段驾驶视频,系统按固定间隔抽帧,逐帧送进模型识别,并累计疲劳帧数、给出疲劳占比。 功能三:摄像头识别 调用本地摄像头做近实时推演,适合现场演示,模型对每一帧给出疲劳或清醒判断并画框。 功能四:历史记录 把每次识别的时间、类别、置信度写入记录,支持回溯查看,方便对比不同画面的识别情况。 功能五:统计大屏 对历史记录做聚合展示,呈现总识别量、疲劳分布和按时间的变化趋势,作为系统的可视化汇报模块。

基于YOLO的疲劳驾驶检测怎么做-视频展示

[video(video-p523rXmW-1792756477803)(type-csdn)(url-live.csdn.net/v/embed/549…)]

基于YOLO的疲劳驾驶检测怎么做-图片展示

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

基于YOLO的疲劳驾驶检测怎么做-代码展示

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("FatigueDashboard").master("local[*]").getOrCreate()
from ultralytics import YOLO
import cv2, os, json
model = YOLO("FatigueDrivingDetection/models/yolo26m/best.pt")
DROWSY, UNDROWSY = 0, 1
def recognize_image(image_path):
    results = model.predict(source=image_path, conf=0.45, save=False, verbose=False)
    r = results[0]
    boxes = r.boxes
    cls_list = [int(c) for c in boxes.cls.tolist()]
    drowsy = cls_list.count(DROWSY)
    undrowsy = cls_list.count(UNDROWSY)
    conf_list = boxes.conf.tolist()
    top_conf = round(float(max(conf_list)), 3) if conf_list else 0.0
    label = "drowsy" if drowsy >= undrowsy else "undrowsy"
    rects = []
    for i, b in enumerate(boxes.xywhn.tolist()):
        rects.append({"x": float(b[0]), "y": float(b[1]), "w": float(b[2]), "h": float(b[3]), "cls": int(boxes.cls[i])})
    record = {"label": label, "drowsy": drowsy, "undrowsy": undrowsy, "conf": top_conf, "boxes": rects}
    with open("history/image_log.jsonl", "a", encoding="utf-8") as f:
        f.write(json.dumps(record, ensure_ascii=False) + "\n")
    return record
def recognize_video(video_path, out_dir):
    cap = cv2.VideoCapture(video_path)
    frame_idx, step, drowsy_frames, total = 0, 8, 0, 0
    os.makedirs(out_dir, exist_ok=True)
    while cap.isOpened():
        ok, frame = cap.read()
        if not ok:
            break
        frame_idx += 1
        if frame_idx % step != 0:
            continue
        total += 1
        res = model.predict(source=frame, conf=0.45, save=False, verbose=False)[0]
        for c in res.boxes.cls.tolist():
            if int(c) == DROWSY:
                drowsy_frames += 1
        cv2.rectangle(frame, (10, 10), (220, 40), (0, 0, 255), 2)
        cv2.imwrite(os.path.join(out_dir, f"f{frame_idx}.jpg"), frame)
    cap.release()
    summary = {"frames": total, "drowsy_frames": drowsy_frames, "rate": round(drowsy_frames/total, 3) if total else 0.0}
    return summary
def build_dashboard(history_file):
    rows = []
    with open(history_file, encoding="utf-8") as f:
        for line in f:
            line = line.strip()
            if not line:
                continue
            d = json.loads(line)
            rows.append((d.get("label"), d.get("conf"), d.get("drowsy", 0)))
    df = spark.createDataFrame(rows, ["label", "conf", "drowsy"])
    total = df.count()
    drowsy_cnt = df.filter(df.label == "drowsy").count()
    avg_conf = df.agg({"conf": "avg"}).collect()[0][0] or 0.0
    dist = df.groupBy("label").count().collect()
    dashboard = {"total": total, "drowsy": drowsy_cnt, "avg_conf": round(float(avg_conf), 3), "dist": [(r["label"], r["count"]) for r in dist]}
    return dashboard

基于YOLO的疲劳驾驶检测怎么做-结语

整理这份YOLO疲劳驾驶检测的说明花了不少功夫,里面提到的代码和数据集细节,主页那头有更全的资料可以翻。做毕设遇到跑不通的地方,去主页找技术员聊聊比自己硬磕省时间。觉得内容有用的话,点个赞、收进收藏夹,顺手关注一下,也能在评论区说说你卡在哪一步,大家一起捋。