基于YOLOv12DeepSeek的道路缺陷智能检测系统【核心功能】✅ 一键检测上传图片/视频,自动识别道路裂缝、坑洼、车辙等缺陷✅ 实时监测支持摄像头实时检测,边检测边展示结果✅ 检测精准AI算法检测准确率90%以上,远超人工✅ 报告生成自动生成检测报告,支持导出PDF✅ 数据管理检测历史记录查询、统计分析【技术亮点】独创A2C2f_KAN注意力机制,检测精度比传统方法提升5.8%优化的YOLO12检测模型,单张图片处理1秒完整的用户权限管理,支持多人协同使用响应式Web界面,电脑手机都能用含数据集这是一个非常典型的B/S架构计算机视觉应用。为毕业设计项目我为你整理了系统的核心功能模块代码重点实现了YOLOv12 模型集成、DeepSeek AI 报告生成以及前后端交互逻辑。第一部分系统核心代码实现本方案采用Python (Flask) Vue.js的轻量级架构既保证了 AI 推理的性能又提供了现代化的用户界面。1. 后端核心AI 推理与服务 (Python Flask)这是系统的“大脑”负责加载 YOLOv12 模型、处理图片/视频流并调用 DeepSeek 生成分析报告。文件app.pyfromflaskimportFlask,request,jsonify,send_filefromflask_corsimportCORSfromultralyticsimportYOLOimportcv2importnumpyasnpimportbase64importioimportrequestsimportjsonfromdatetimeimportdatetimeimportos appFlask(__name__)CORS(app)# 允许跨域# 配置区域 # 1. 加载 YOLOv12 模型 (请确保已安装 ultralytics 最新版)# 如果没有 v12 权重可以用 v8/v10/v11 替代接口通用MODEL_PATHweights/yolo12n.ptmodelYOLO(MODEL_PATH)# 2. DeepSeek API 配置DEEPSEEK_API_KEYYOUR_DEEPSEEK_API_KEYDEEPSEEK_URLhttps://api.deepseek.com/v1/chat/completions# 辅助函数 defencode_image(image_path):将图片转换为 Base64 以便前端显示withopen(image_path,rb)asimage_file:returnbase64.b64encode(image_file.read()).decode(utf-8)defcall_deepseek_for_report(detections): 将检测结果发送给 DeepSeek生成专业报告 ifnotdetections:return未检测到明显道路缺陷。# 构造提示词contextjson.dumps(detections,ensure_asciiFalse)promptf 你是一名道路养护专家。根据以下 AI 检测到的道路缺陷数据类别和置信度请生成一份简短的评估报告。 数据{context}要求 1. 总结主要问题如发现多处裂缝。 2. 评估风险等级轻微/中度/严重。 3. 给出维修建议。 headers{Authorization:fBearer{DEEPSEEK_API_KEY},Content-Type:application/json}payload{model:deepseek-chat,messages:[{role:system,content:你是一个专业的道路检测分析助手。},{role:user,content:prompt}]}try:resprequests.post(DEEPSEEK_URL,headersheaders,jsonpayload)returnresp.json()[choices][0][message][content]exceptExceptionase:returnfAI 分析服务暂不可用{str(e)}# API 接口 app.route(/api/detect/image,methods[POST])defdetect_image(): 单张图片检测接口 iffilenotinrequest.files:returnjsonify({error:No file uploaded}),400filerequest.files[file]img_bytesnp.frombuffer(file.read(),np.uint8)imgcv2.imdecode(img_bytes,cv2.IMREAD_COLOR)# 1. YOLO 推理resultsmodel(img)resultresults[0]# 2. 提取数据detections[]forboxinresult.boxes:cls_idint(box.cls[0])conffloat(box.conf[0])namemodel.names[cls_id]# 只保留置信度高于 0.5 的结果ifconf0.5:detections.append({class:name,confidence:round(conf,2),bbox:box.xyxy[0].tolist()})# 3. 绘制结果图annotated_frameresult.plot()_,buffercv2.imencode(.jpg,annotated_frame)img_base64base64.b64encode(buffer).decode(utf-8)# 4. 调用 AI 生成报告ai_reportcall_deepseek_for_report(detections)returnjsonify({status:success,image:fdata:image/jpeg;base64,{img_base64},detections:detections,report:ai_report,count:len(detections)})app.route(/api/dashboard/stats,methods[GET])defget_dashboard_stats(): 模拟仪表盘数据 (实际项目中应从数据库查询) returnjsonify({user_count:2,login_count:6,operation_count:10,detect_count:0,trend_data:[2,1,3]# 对应截图中的折线图})if__name____main__:app.run(host0.0.0.0,port5000,debugTrue)2. 前端核心检测结果展示 (Vue 3)对应你提供的第三张截图目标检测页面实现图片上传、结果展示和 AI 报告渲染。组件TargetDetection.vuetemplatedivclassdetection-pageh2 目标检测/h2pclasssubtitle上传图像或视频进行道路目标检测分析/pdivclassupload-areainputtypefilechangehandleFileUploadacceptimage/*/buttonclickuploadImage:disabled!selectedFile开始检测/button/divdivv-ifloadingclassloading正在分析中.../divdivv-ifresultclassresult-container!-- 左侧图片展示 --divclassimage-boxh3✅ 检测结果/h3divclasstabsbutton:class{ active: showOriginal }clickshowOriginal true原始图像/buttonbutton:class{ active: !showOriginal }clickshowOriginal false检测结果/button/divimg:srcshowOriginal ? originalImage : result.imagealtResult//div!-- 右侧详情与报告 --divclassinfo-boxh3 检测详情/h3ulli检测时间{{ new Date().toLocaleTimeString() }}/lili识别物体{{ result.count }} 个/li/uldivclassdetection-listdivv-for(item, index) in result.detections:keyindexclassitemspanclasstag{{ item.class }}/spanspanclassconf置信度{{ (item.confidence * 100).toFixed(1) }}%/span/div/divdivclassai-reporth3 AI 助手分析报告/h3divclassreport-content{{ result.report }}/div/div/div/div/div/templatescriptsetupimport{ref}fromvue;importaxiosfromaxios;constselectedFileref(null);constloadingref(false);constresultref(null);constshowOriginalref(true);constoriginalImageref();consthandleFileUpload(event){selectedFile.valueevent.target.files[0];// 预览原图constreadernewFileReader();reader.onload(e)originalImage.valuee.target.result;reader.readAsDataURL(selectedFile.value);};constuploadImageasync(){if(!selectedFile.value)return;loading.valuetrue;constformDatanewFormData();formData.append(file,selectedFile.value);try{constresponseawaitaxios.post(http://localhost:5000/api/detect/image,formData);result.valueresponse.data;}catch(error){alert(检测失败error.message);}finally{loading.valuefalse;}};/scriptstylescoped.detection-page{padding:20px;max-width:1200px;margin:0 auto;}.upload-area{margin:20px 0;display:flex;gap:10px;}.result-container{display:flex;gap:20px;margin-top:20px;}.image-box, .info-box{flex:1;border:1px solid #eee;padding:15px;border-radius:8px;}img{width:100%;border-radius:4px;}.tabs button{padding:5px 10px;cursor:pointer;}.tabs button.active{background:#1890ff;color:white;border:none;}.ai-report{margin-top:20px;background:#f6ffed;padding:10px;border-radius:4px;border:1px solid #b7eb8f;}/style3. 前端核心仪表盘 (Vue 3)对应你提供的第二张截图系统仪表盘展示统计数据。组件Dashboard.vuetemplatedivclassdashboardh2 系统仪表盘/h2p欢迎回来miaozi1查看系统最新状态和活动数据。/p!-- 顶部卡片 --divclasscardsdivclasscardv-forstat in stats:keystat.labelh3{{ stat.label }}/h3pclassnumber{{ stat.value }}/p/div/div!-- 图表区域 --divclasschartsdivclasschart-boxh3登录活动趋势/h3!-- 这里可以使用 ECharts 或 Chart.js 渲染折线图 --divclassmock-chart [折线图占位符]/div/divdivclassquick-actionsh3快速操作/h3buttonclassbtn-primary 开始检测/buttonbuttonclassbtn-secondary AI聊天助手/buttonbuttonclassbtn-gray 个人资料/button/div/div/div/templatescriptsetupimport{ref,onMounted}fromvue;importaxiosfromaxios;conststatsref([]);onMounted(async(){// 模拟获取后端数据constresawaitaxios.get(http://localhost:5000/api/dashboard/stats);constdatares.data;stats.value[{label:用户数量,value:data.user_count},{label:登录次数,value:data.login_count},{label:操作记录,value:data.operation_count},{label:检测次数,value:data.detect_count}];});/scriptstylescoped.dashboard{padding:20px;}.cards{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;margin-bottom:20px;}.card{background:white;padding:20px;border-radius:8px;box-shadow:0 2px 8pxrgba(0,0,0,0.1);}.number{font-size:24px;font-weight:bold;color:#1890ff;}.charts{display:flex;gap:20px;}.chart-box, .quick-actions{flex:1;background:white;padding:20px;border-radius:8px;}.btn-primary{background:#1890ff;color:white;border:none;padding:10px;width:100%;margin-bottom:10px;cursor:pointer;}/style如何运行这个项目准备环境安装 Python 库pip install flask flask-cors ultralytics requests opencv-python安装 Node.js 用于运行前端。启动后端将app.py保存替换YOUR_DEEPSEEK_API_KEY。运行python app.py。启动前端使用 Vue CLI 创建项目npm create vuelatest。将上面的 Vue 代码复制到对应组件文件中。运行npm run dev。测试访问前端地址上传一张包含道路裂缝或车辆的图片即可看到类似截图中的检测效果和 AI 分析报告。适合作为毕业设计的源码基础。