行业资讯
基于YOLOv11和DeepSeek的安全帽智能检测系统实现
1. 项目概述安全帽智能检测系统的全栈实现在建筑工地、电力检修等高危作业场景中安全帽佩戴检测是保障工人生命安全的重要环节。传统的人工巡检方式存在效率低、覆盖不全等问题。我们团队基于YOLOv11目标检测算法和DeepSeek大语言模型开发了一套完整的智能安全检测系统。这个系统能够实时分析视频流中的安全帽佩戴情况自动生成安全评估报告并通过可视化界面直观展示检测结果。系统采用Python AI微服务Java业务主服务的混合架构充分发挥了Python在深度学习领域的优势同时利用Java生态构建稳定的企业级应用。前端使用Vue3Element Plus实现响应式交互界面后端采用SpringBoot处理业务逻辑AI推理服务基于Flask框架封装YOLOv11模型大模型服务则通过API集成DeepSeek的安全建议生成能力。2. 系统架构设计解析2.1 分层架构设计思路系统采用五层架构设计各层职责明确通过API进行通信前端展示层基于Vue3TypeScript构建使用Element Plus组件库实现UIEcharts负责数据可视化。考虑到实时视频流的处理需求我们特别优化了Canvas绘制性能确保在高帧率下也能流畅显示检测框。业务逻辑层SpringBoot 2.7作为核心框架集成MyBatis-Plus处理数据持久化。这一层需要处理的主要业务包括用户认证与权限管理检测任务调度AI服务调用编排PDF报告生成使用OpenPDF库大模型API调用AI推理服务层独立部署的Flask应用核心功能包括加载YOLOv11模型权重最佳实践是将模型加载到GPU内存处理图像/视频帧的推理请求返回标准化JSON格式的检测结果实现基于Base64的图像编解码大模型服务层通过HTTP API集成DeepSeek模型主要处理接收检测统计数据如未佩戴安全帽人数生成符合行业规范的安全建议支持多轮对话式问答预留接口数据存储层MySQL 8.0数据库存储三类核心数据用户账户信息加密存储检测历史记录含时间戳、检测结果快照生成的PDF报告存储路径2.2 关键技术选型考量YOLOv11的选用相比前代版本YOLOv11在保持实时性的同时对小目标检测的准确率提升了约15%。我们测试了不同输入分辨率下的性能640x640mAP0.5 达到89.2%推理速度42FPSRTX 30601280x1280mAP0.5 提升至92.1%速度降至18FPSPythonJava混合架构的优势解耦AI模型更新与业务迭代AI团队可以独立更新模型而不影响Java服务资源隔离Python服务可以部署在GPU服务器Java服务运行在常规应用服务器技术栈匹配Python更适合快速实现DL模型Java更适合构建健壮的业务系统前端技术栈选择依据Vue3的Composition API更适合复杂交互逻辑的组织TypeScript增强了代码可维护性Echarts 5.0支持更丰富的数据可视化形式Element Plus提供了开箱即用的专业UI组件3. 核心模块实现细节3.1 YOLOv11模型训练与优化数据集准备我们收集了包含不同场景的安全帽数据集总计15,842张标注图像按照8:1:1划分训练集、验证集和测试集。数据增强策略包括随机旋转-15°~15°亮度/对比度调整±30%Mosaic增强4图拼接HSV色彩空间扰动# 训练代码示例 from ultralytics import YOLO model YOLO(yolov11s.yaml) # 使用small版本平衡速度与精度 results model.train( datadataset.yaml, epochs300, imgsz640, batch32, optimizerAdamW, lr00.001, augmentTrue, pretrainedTrue )模型量化部署为提升推理速度我们采用TensorRT对训练好的模型进行FP16量化trtexec --onnxyolov11s.onnx --saveEngineyolov11s_fp16.engine --fp16量化后模型体积减少40%推理速度提升35%仅导致mAP下降0.8%。3.2 Flask推理服务实现AI服务采用多线程模式处理并发请求关键优化点包括图像预处理流水线def preprocess(image): # 统一缩放到模型输入尺寸 image cv2.resize(image, (640, 640)) # 归一化并转换通道顺序 image image / 255.0 image image[:, :, ::-1].transpose(2, 0, 1) return np.expand_dims(image, axis0)异步结果返回机制app.route(/async_detect, methods[POST]) def async_detect(): task_id str(uuid.uuid4()) executor.submit(process_image, request.json[image], task_id) return jsonify({task_id: task_id}) app.route(/get_result/task_id) def get_result(task_id): if task_id in results_cache: return jsonify(results_cache.pop(task_id)) return jsonify({status: processing})健康检查端点app.route(/health) def health_check(): gpu_status torch.cuda.is_available() return jsonify({ status: healthy, gpu_available: gpu_status, model_loaded: model is not None })3.3 SpringBoot业务逻辑实现服务熔断设计为防止AI服务超时影响系统稳定性我们集成Resilience4j实现熔断机制CircuitBreaker(name aiService, fallbackMethod fallbackDetect) public DetectionResult callAIService(String imageBase64) { // 调用Flask服务 } private DetectionResult fallbackDetect(String imageBase64, Exception e) { log.warn(AI服务降级返回空结果); return new DetectionResult(Collections.emptyList()); }PDF报告生成使用OpenPDF库动态生成包含检测结果的PDFpublic byte[] generatePdf(DetectionResult result) { try (PdfDocument pdf new PdfDocument()) { PdfPage page pdf.addPage(new PageSize(PageSize.A4)); PdfCanvas canvas new PdfCanvas(page); // 添加标题 canvas.beginText() .setFontAndSize(PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD), 18) .moveText(50, 800) .showText(安全检测报告) .endText(); // 添加检测结果表格 PdfPTable table new PdfPTable(3); table.addCell(类别); table.addCell(数量); table.addCell(合规率); table.addCell(安全帽); table.addCell(String.valueOf(result.getHelmetCount())); table.addCell(String.format(%.1f%%, result.getComplianceRate())); // 将表格添加到PDF table.writeTo(canvas); return pdf.getBytes(); } }4. 前端可视化实现技巧4.1 实时视频流处理前端采用Canvas叠加技术实现检测框绘制function drawDetections(canvas, detections) { const ctx canvas.getContext(2d); ctx.clearRect(0, 0, canvas.width, canvas.height); detections.forEach(det { const [x1, y1, x2, y2] det.bbox; ctx.strokeStyle det.class helmet ? #00ff00 : #ff0000; ctx.lineWidth 2; ctx.strokeRect(x1, y1, x2 - x1, y2 - y1); // 绘制标签 ctx.fillStyle ctx.strokeStyle; ctx.fillText(${det.class} ${(det.confidence * 100).toFixed(1)}%, x1, y1 - 5); }); }4.2 Echarts动态图表实现随时间变化的检测统计折线图function initChart() { const chart echarts.init(chartRef.value); const option { xAxis: { type: category, data: [] }, yAxis: { type: value }, series: [ { name: 安全帽, type: line, data: [] }, { name: 未佩戴, type: line, data: [] } ] }; // 每5秒更新数据 setInterval(() { fetch(/api/stats).then(res res.json()).then(data { option.xAxis.data.push(new Date().toLocaleTimeString()); option.series[0].data.push(data.helmetCount); option.series[1].data.push(data.noHelmetCount); chart.setOption(option); }); }, 5000); }5. 系统部署与优化实践5.1 容器化部署方案使用Docker Compose编排各服务version: 3.8 services: ai-service: image: pytorch/pytorch:2.0.1-cuda11.7 ports: [5000:5000] volumes: - ./02_AI_Service:/app command: python app.py deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu] backend: image: openjdk:17 ports: [8080:8080] volumes: - ./03_Backend:/app depends_on: - mysql environment: SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/safety_db mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: safety123 volumes: - mysql_data:/var/lib/mysql volumes: mysql_data:5.2 性能优化措施AI服务批处理将多个检测请求合并为batch处理提升GPU利用率app.route(/batch_detect, methods[POST]) def batch_detect(): images [decode_image(img) for img in request.json[images]] batch torch.stack([preprocess(img) for img in images]) results model(batch) # 返回批处理结果前端视频流优化使用WebWorker处理视频解码实现检测框的差异更新仅重绘变化区域动态调整检测频率根据系统负载缓存策略Redis缓存高频访问的检测结果实现大模型响应的本地存储localStorage6. 常见问题与解决方案6.1 模型部署问题排查问题1CUDA out of memory错误检查batch size是否过大使用nvidia-smi监控GPU内存使用考虑使用模型量化FP16/INT8问题2检测框偏移确认输入图像的预处理方式与训练时一致检查模型输入尺寸是否匹配验证坐标转换逻辑是否正确6.2 前后端联调问题跨域问题解决方案Configuration public class CorsConfig implements WebMvcConfigurer { Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(/**) .allowedOrigins(*) .allowedMethods(GET, POST); } }大文件上传优化// 前端分片上传 function uploadLargeFile(file) { const chunkSize 5 * 1024 * 1024; // 5MB const chunks Math.ceil(file.size / chunkSize); for (let i 0; i chunks; i) { const chunk file.slice(i * chunkSize, (i 1) * chunkSize); axios.post(/upload, chunk, { headers: { Content-Range: bytes ${i*chunkSize}-${Math.min((i1)*chunkSize, file.size)-1}/${file.size} } }); } }7. 项目扩展方向多模态检测结合红外摄像头实现夜间检测边缘计算部署将模型部署到Jetson等边缘设备违规行为识别扩展检测抽烟、未系安全带等行为3D定位通过多摄像头实现违规人员的空间定位在实际部署中我们发现模型对低光照条件下的检测准确率仍有提升空间。后续计划通过以下方式优化增加夜间场景的训练数据尝试YOLOv11的改进版本引入注意力机制增强小目标检测能力
郑州网站建设
网页设计
企业官网