基于YOLO+DeepSeek的疲劳驾驶检测系统 YOLO+DeepSeek+疲劳驾驶检测系统 Pytorch+SpringBoot+Flask+Vue

发布时间:2026/9/24 19:13:26

基于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/9/21 18:39:17

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

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

2026/9/19 9:03:02

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

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

2026/9/24 19:11:51

EC纠删码与数据压缩实战:降低存储成本的全栈方案

1. 硬件涨价潮下的存储成本困局先看一个我这两年在给客户做存储方案时经常遇到的场景:本来预算单上写得好好的,一批 16TB 的 NL-SAS 盘,按去年的行情大概能拿下,结果等到真正下单的时候,采购那边跑过来拍桌子说价格涨了…

2026/9/24 19:11:51

AI视频制作全攻略:从提示词到图生视频的完整创作流程

AI视频怎么做的好看又简单?新手入门到精通教程AI视频这个事,最近来找我咨询的朋友特别多。多数人的困惑高度一致——教程刷了几十个,工具下载了一堆,真要动手做的时候,出来的东西要么画面乱跳、要么风格土气、要么角色…

2026/9/24 19:11:51

云服务器深度解析:企业数字化转型的核心引擎与价值重构

“云服务器:企业数字化转型的核心引擎与价值重构”,这个题目拿到手的时候,我其实挺有感触。这些年帮不少企业做过上云规划,也见过大量中小团队把“上云”理解成“租一台远程电脑”,然后把所有业务原封不动地塞进去&…

2026/9/24 19:11:51

Windows画图工具怎么裁剪图片顶部多余部分?零安装无损操作详解

一张好好的图片,上方偏偏多出半条网址栏、一段广告横幅,或者一截拍歪了的天空——这种“图片顶部有多余部分”的情况,我一个月能碰上好几回。每次处理,我都是直接打开 Windows 自带的画图工具,框选、裁剪、另存&#x…

2026/9/24 19:11:51

CLI凭据验证失败?先查网络链路再谈重登

先别急着改密码、重新登录账号。看到终端里这行报错的时候,我最开始也是这么干的,结果反复授权了好几遍,Zed 编辑器里的账号状态明明正常,CLI 却始终卡在同一句话:Error: failed to validate credentials: error sendi…

2026/9/24 19:06:51

epoll高性能底层解析:红黑树与就绪链表如何协作

先聊个我碰过的真实场景:线上有一台 8C16G 的服务器,需要同时维持几十万条 TCP 长连接,业务方希望每条连接都能在第一时间感知到数据可读、可写。最开始用 select 去顶,连接数刚到一万多就肉眼可见地出现延迟,CPU 软中…

2026/9/23 12:07:00

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/24 0:00:21

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:21

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:21

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码