发布时间:2026/8/5 8:17:05
基于YOLO+DeepSeek的疲劳驾驶检测系统 YOLO+DeepSeek+疲劳驾驶检测系统 Pytorch+SpringBoot+Flask+Vue YOLODeepSeek疲劳驾驶检测系统PytorchSpringBootFlaskVue配置好环境可直接使用也可以自己加数据集训练运行效果见图像及视频。共4类标签[“睁眼”,“闭眼”,“打哈欠”,“未打哈欠”]系统亮点多场景检测支持单张图片、图片集、视频、实时摄像头等多种输入方式。实时反馈提供实时检测结果和详细分析报告可导出 PDF。高精度识别基于改进 YOLOV5/8/11/12 结合 PyTorch 实现疲劳驾分类检测准确率高运行速度快。AI智能分析结合Deepseek/ Qwen 大模型智能分析可生成详细检测建议。直观UI界面基于 Vue3 Flask 前端展示操作界面简洁清晰。技术栈1、架构B/S、MVC2、系统环境Windows、Mac3、开发环境IDEA、JDK1.8、Maven、Nodejs、Mysql、Python 3.94、技术栈Java、Mysql、Vue、spring boot、Mybatis、Element plus、Python、Flask、YOLOV5/8/11/12。11“基于YOLODeepSeek的疲劳驾驶检测系统”。SpringBoot后端接收请求-调用Python/YOLO进行推理-调用DeepSeek生成建议-Vue3前端展示结果。1. 核心架构设计前端: Vue 3 Element Plus (负责界面、图片上传、结果展示、图表渲染)业务后端: Java SpringBoot (负责用户管理、记录存储、文件转发、调用AI接口)算法服务: Python Flask/FastAPI (负责加载YOLO模型进行图像推理)大模型: DeepSeek API (负责根据YOLO的检测结果生成文本报告)2. 数据库设计 (MySQL)我们需要存储用户信息和检测记录。CREATEDATABASEfatigue_detection_db;USEfatigue_detection_db;-- 用户表CREATETABLEusers(idINTPRIMARYKEYAUTO_INCREMENT,usernameVARCHAR(50)UNIQUENOTNULL,passwordVARCHAR(255)NOTNULL,roleVARCHAR(20)DEFAULTUSER,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP);-- 检测记录表CREATETABLEdetection_logs(idINTPRIMARYKEYAUTO_INCREMENT,user_idINT,image_pathVARCHAR(255),result_labelVARCHAR(50),-- 例如闭眼confidenceDECIMAL(5,4),-- 置信度inference_timeDECIMAL(10,4),-- 耗时ai_analysisTEXT,-- DeepSeek生成的分析报告created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP);3. 算法服务层 (Python YOLO)这是系统的“眼睛”。使用ultralytics库加载训练好的疲劳驾驶模型。安装依赖:pip install fastapi uvicorn ultralytics opencv-python python-multipart代码 (ai_service.py):fromfastapiimportFastAPI,Query,UploadFile,FilefromultralyticsimportYOLOimportcv2importtimeimportosimportbase64 appFastAPI()# 加载预训练模型 (假设你已经训练好并保存为 best.pt)# 标签映射: 0:睁眼1:闭眼2:打哈欠3:未打哈欠modelYOLO(models/fatigue_best.pt)app.post(/predict)asyncdefpredict(file:UploadFileFile(...),conf:float0.5):start_timetime.time()# 保存上传的文件file_locationftemp/{file.filename}os.makedirs(temp,exist_okTrue)withopen(file_location,wb)asfile_object:file_object.write(file.file.read())# YOLO 推理resultsmodel.predict(sourcefile_location,confconf,verboseFalse)end_timetime.time()total_timeend_time-start_time response_data[]forrinresults:forboxinr.boxes:cls_idint(box.cls[0])cls_namemodel.names[cls_id]scorefloat(box.conf[0])# 获取边界框坐标 [x1, y1, x2, y2]xyxybox.xyxy[0].tolist()response_data.append({label:cls_name,confidence:round(score,4),box:xyxy})# 清理临时文件os.remove(file_location)return{detections:response_data,time_cost:round(total_time,4),image_url:f/temp/{file.filename}# 实际项目中应返回OSS地址}if__name____main__:importuvicorn uvicorn.run(app,host0.0.0.0,port8000)4. 业务后端 (Java SpringBoot)这是系统的“大脑”。负责协调Python服务和DeepSeek API。依赖 (pom.xml):需要spring-boot-starter-web,lombok,okhttp(用于调用DeepSeek API)。核心逻辑 (FatigueController.java):RestControllerRequestMapping(/api/fatigue)CrossOrigin(origins*)publicclassFatigueController{AutowiredprivateDetectionServicedetectionService;PostMapping(/upload)publicResult?detect(RequestParam(file)MultipartFilefile,RequestParam(valuethreshold,defaultValue0.5)Doublethreshold){try{// 1. 调用 Python 服务获取检测结果MapString,ObjectyoloResultdetectionService.callPythonAI(file,threshold);// 2. 提取主要疲劳特征 (例如只要有一个闭眼置信度0.6就判定为疲劳)StringmainLabelextractMainLabel((ListMap)yoloResult.get(detections));// 3. 调用 DeepSeek 生成分析报告StringaiReport;if(闭眼.equals(mainLabel)||打哈欠.equals(mainLabel)){aiReportdetectionService.callDeepSeek(mainLabel);}else{aiReport驾驶员状态良好未检测到明显疲劳特征。;}// 4. 组装返回数据 (包含YOLO结果和AI报告)yoloResult.put(ai_report,aiReport);// 5. (可选) 保存到 MySQL 数据库// detectionService.saveRecord(...);returnResult.success(yoloResult);}catch(Exceptione){returnResult.error(检测失败e.getMessage());}}// 辅助方法调用 DeepSeek APIprivateStringcallDeepSeek(Stringlabel){Stringprompt驾驶员被检测到行为label。请作为交通安全专家分析其风险如PERCLOS标准并给出3条具体的安全建议。要求语气专业、简练。;// 这里使用 OkHttp 发送 POST 请求到 https://api.deepseek.com/v1/chat/completions// 省略具体的 HTTP 请求代码需填入你的 DeepSeek API Keyreturn【DeepSeek分析】检测到label风险等级高。建议1.立即停车休息2.开启车窗通风...;}privateStringextractMainLabel(ListMapdetections){// 简单逻辑返回置信度最高的标签if(detections.isEmpty())return正常;return(String)detections.get(0).get(label);}}5. 前端实现 (Vue 3)这是系统的“脸面”。展示图片、绘制检测框、显示AI建议。核心组件 (ImageDetect.vue):templatedivclasscontainer!-- 左侧上传与展示 --divclasscanvas-areael-uploadaction#:http-requesthandleUpload:show-file-listfalseclassupload-btnel-buttontypeprimarysizelarge上传图片检测/el-button/el-uploaddivv-ifimageUrlclassimage-wrapperrefimgWrapperimg:srcimageUrlcrossoriginanonymousloaddrawBoxes/!-- 动态绘制检测框 --divv-for(box, idx) in boxes:keyidxclassyolo-box:style{ left: box.box[0] px, top: box.box[1] px, width: (box.box[2] - box.box[0]) px, height: (box.box[3] - box.box[1]) px, borderColor: box.label 闭眼 ? red : green }spanclasstag{{ box.label }} {{ box.confidence }}/span/div/div/div!-- 右侧数据与AI建议 --divclassinfo-areav-ifresultDatael-cardshadowhovertemplate#header检测结果/templatep识别对象strong{{ mainLabel }}/strong/pp置信度{{ maxConfidence }}%/pp耗时{{ timeCost }}秒/p/el-cardel-cardshadowhoverstylemargin-top:20px;template#header AI 智能分析 (DeepSeek)/templatedivclassai-contentv-htmlformattedReport/div/el-cardel-buttontypesuccessstylewidth:100%;margin-top:20px;clickexportPDF导出 PDF 报告/el-button/div/div/templatescriptsetupimport{ref,computed}fromvue;importaxiosfromaxios;import{ElMessage}fromelement-plus;constimageUrlref();constboxesref([]);constresultDataref(null);constimgWrapperref(null);consthandleUploadasync(options){constformDatanewFormData();formData.append(file,options.file);try{constresawaitaxios.post(http://localhost:8080/api/fatigue/upload,formData);if(res.data.code200){resultData.valueres.data.data;// 假设后端返回了图片的访问URLimageUrl.valuehttp://localhost:8080/res.data.data.image_url;boxes.valueres.data.data.detections;ElMessage.success(检测完成);}}catch(e){ElMessage.error(检测失败);}};// 简单的坐标转换实际需根据图片缩放比例计算constdrawBoxes(){// 如果后端返回的是归一化坐标(0-1)需在此处乘以 imgWrapper.offsetWidth// 此处假设后端返回的是像素坐标};constmainLabelcomputed(()resultData.value?.detections[0]?.label||-);constmaxConfidencecomputed(()(resultData.value?.detections[0]?.confidence*100).toFixed(2)||0);consttimeCostcomputed(()resultData.value?.time_cost||0);// 将换行符转换为HTML brconstformattedReportcomputed((){if(!resultData.value?.ai_report)return;returnresultData.value.ai_report.replace(/\n/g,br);});constexportPDF(){// 调用后端生成PDF接口或使用前端库 jsPDFalert(正在生成PDF报告...);};/scriptstylescoped.container{display:flex;gap:20px;padding:20px;}.canvas-area{flex:2;text-align:center;border:1px dashed #ccc;min-height:400px;position:relative;}.image-wrapper{position:relative;display:inline-block;margin-top:20px;}.image-wrapper img{max-width:100%;}.yolo-box{position:absolute;border:2px solid;box-sizing:border-box;}.tag{background:rgba(0,0,0,0.6);color:#fff;font-size:12px;position:absolute;top:-20px;left:0;}.info-area{flex:1;}.ai-content{line-height:1.6;font-size:14px;color:#333;}/style6. 如何运行与训练模型训练 YOLO 模型:收集驾驶员面部数据集包含睁眼、闭眼、打哈欠。使用Roboflow或LabelImg进行标注。使用 Python 训练fromultralyticsimportYOLO modelYOLO(yolov8n.pt)model.train(datadataset.yaml,epochs100,imgsz640)将生成的best.pt放入 Python 项目的models/目录。启动服务:Python:python ai_service.py(端口 8000)Java: 运行 SpringBoot 主类 (端口 8080)Vue:npm run dev(端口 5173)配置 DeepSeek:在 Java 代码中填入你的 DeepSeek API Key即可实现截图中的“AI建议”功能。

相关新闻

2026/8/5 8:17:05

商标设计注册成功率从设计阶段就开始提高吗?

商标设计注册成功率能从设计阶段就开始提高吗?答案是肯定的。很多创业者直到被驳回才明白:商标注册的成功率,在设计阶段就已注定。 那些绕开雷区的品牌不是运气好,而是把功课做在了前面。本文拆解4个设计阶段的关键策略&#xff0…

2026/8/5 8:12:05

Unity2D物理链条实战:HingeJoint2D锚点配置与动态生成算法详解

1. 项目概述:为什么物理链条是2D游戏中的“硬骨头”?在Unity2D里做物理交互,链条效果绝对算得上是一个经典的“劝退”案例。乍一看,不就是几个方块或者圆环用关节连起来吗?但真上手做,你会发现它处处是坑&a…

2026/8/5 9:17:08

Shader学习25:织物 之 天鹅绒

一、关于布料表现布料表面不是光滑的,是无数根细小纤维竖立着传统的微表面brdf更适用于致密表面,但对于松散结构的布料 缺少了一些真实布料的特征,因为表面的纤维会吸收、散射入射光。边缘光照效果》Sheen 环:织物在掠射角时出现的…

2026/8/5 9:17:08

钉钉待办API迁移实战:从旧版接口升级到新版待办任务接口

1. 项目缘起:从“旧”到“新”的待办接口迁移之痛最近在重构一个内部任务协同系统,核心功能之一就是自动将系统内的任务同步到钉钉待办,方便团队成员在钉钉里统一查看和处理。这个功能原本跑得好好的,用的是钉钉开放平台提供的“创…

2026/8/5 9:17:08

机器视觉与PLC:工业自动化两大核心技术对比与职业选择指南

在工业自动化与智能制造领域,机器视觉和PLC(可编程逻辑控制器)是两大核心支柱技术,它们共同构成了现代工厂的“眼睛”和“大脑”。对于初学者或寻求职业转型的工程师而言,选择哪个方向作为主攻领域,不仅关乎…

2026/8/5 9:12:08

视频孪生企业怎么选?2026年最新3个避坑技巧

做视频孪生领域落地快5年,前前后后帮十几家客户选过供应商,踩过的坑能攒一箩筐。 这篇整理了2026年最新的3个避坑技巧,全是实打实的经验,没有营销,放心看。这些年我见过的视频孪生选型坑我当初2023年帮南方某制造园区选…

2026/8/5 3:13:11

如何用免费工具突破游戏窗口限制:SRWE完整使用指南

如何用免费工具突破游戏窗口限制:SRWE完整使用指南 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否遇到过这样的困扰?想为心爱的游戏截图,却发现游戏不支持自定义分辨率…

2026/8/5 0:01:34

三升四,比成绩下滑更可怕的,是孩子开始「认命」

分水岭上,最难的不是翻过去,是孩子不想翻了。八月初了。这两个字,对三升四的家长来说,比任何闹钟都让人清醒。最近的家长群里,气氛明显不一样了。一升二的在关心兴趣班,二升三的在讨论要不要提前学英语。而…

2026/8/5 0:01:34

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:01:34

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/3 22:40:58

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/3 13:26:41

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/3 16:43:13

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…