ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

基于SpringBoot与YOLOv5的校园垃圾分类智能识别系统

基于SpringBoot与YOLOv5的校园垃圾分类智能识别系统 1. 项目背景与核心价值校园垃圾分类一直是高校后勤管理的痛点。传统方式依赖人工督导不仅效率低下还容易引发学生抵触情绪。去年我在参与某高校智慧校园建设时发现垃圾分类准确率不足40%而督导人力成本却占到后勤总支出的15%。这促使我们团队开发了这套基于SpringBoot和微信小程序的智能识别系统。系统核心创新点在于将图像识别技术与轻量级移动应用结合。学生只需用小程序拍摄垃圾照片3秒内就能获得分类结果和投放指引。后台管理系统则能实时生成各区域的分类数据报表为校园环保决策提供数据支撑。实测数据显示使用该系统后分类准确率提升至92%人力成本降低60%。2. 技术架构设计2.1 整体技术栈选型选择SpringBoot作为后端框架主要考虑三点一是与微信小程序API的兼容性良好二是内置Tomcat简化部署三是丰富的Starter库能快速集成各组件。具体技术矩阵如下前端微信小程序WXMLWXSS后端SpringBoot 2.7 MyBatis-Plus算法Python Flask微服务部署YOLOv5模型数据库MySQL 8.0分表存储识别记录中间件Redis缓存分类结果RabbitMQ异步处理图像注意小程序选择原生开发而非uniapp是为了确保相机组件能调用系统级图像处理接口这对识别精度至关重要。2.2 图像识别方案对比我们测试了三种主流方案百度AI开放平台识别率85%但API调用有QPS限制TensorFlow Lite端侧部署节省服务器成本但低端手机跑不动自建YOLOv5服务识别率92%需GPU服务器最终选择方案3使用轻量级YOLOv5s模型在NVIDIA T4显卡上单次推理仅需120ms。模型训练时特别增加了校园特有垃圾样本如实验废料、文具等使校园场景识别准确率比通用模型提高17%。3. 核心功能实现细节3.1 小程序端关键代码// 调用相机并上传 wx.chooseMedia({ count: 1, mediaType: [image], success: (res) { wx.uploadFile({ url: https://api.xxx.com/upload, filePath: res.tempFiles[0].tempFilePath, name: file, formData: { userId: getApp().globalData.userId } }) } }) // 接收识别结果 wx.onSocketMessage((res) { this.setData({ result: JSON.parse(res.data).category, points: JSON.parse(res.data).points }) })3.2 后端处理流程接收Base64编码图片通过RabbitMQ发送到算法服务将识别结果缓存RedisKey:MD5(图片), TTL:1h返回分类ID和投放点坐标Async public void processImage(String imgBase64) { String md5 DigestUtils.md5Hex(imgBase64); if(redisTemplate.hasKey(md5)){ return redisTemplate.opsForValue().get(md5); } rabbitTemplate.convertAndSend(image.queue, imgBase64); }3.3 数据库设计要点CREATE TABLE trash_records ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id VARCHAR(32) COMMENT 学号加密存储, category_id TINYINT, image_hash CHAR(32), location POINT COMMENT 投放点坐标, create_time DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINEInnoDB PARTITION BY RANGE (MONTH(create_time)) ( PARTITION p1 VALUES LESS THAN (4), PARTITION p2 VALUES LESS THAN (7) );4. 性能优化实战4.1 图片传输压缩策略测试发现原图上传平均耗时2.8s采用以下优化方案小程序端先用canvas压缩到800×600分辨率转WebP格式质量参数设为80添加进度条动画提升等待体验优化后传输时间降至0.9s且识别准确率仅下降2%。4.2 高并发场景应对毕业季集中扔垃圾时QPS会突增到300我们采用算法服务部署3个Pod自动伸缩Redis集群分片存储消息队列堆积报警机制# Kubernetes HPA配置 apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler spec: metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 705. 踩坑实录与解决方案5.1 微信缓存陷阱初期发现iOS设备上传的图片总是被缓存导致识别结果滞后。原因是微信默认开启了image组件缓存。解决方案image src{{url}}?t{{timestamp}} /5.2 光线干扰问题昏暗环境下的识别率骤降至65%通过两种方式改善小程序增加自动亮度增强功能训练集加入低光照增强样本5.3 数据库热点写入每天上午8-9点出现写入延迟通过以下措施解决将InnoDB缓冲池从默认128MB调到1GB改为按周分表而非按月插入操作改为批量提交6. 扩展功能开发6.1 环保积分系统结合校园一卡通实现public void addPoints(String userId, int categoryId) { int points switch(categoryId) { case 1 - 2; // 可回收 case 2 - 1; // 有害 default - 0; }; cardService.updatePoints(userId, points); }6.2 督导端APP为后勤人员开发的管理功能实时查看各垃圾桶满载率接收错误分类举报生成周报PDF使用iText库# 满载率计算算法 def calc_fullness(img): contours cv2.findContours(img, cv2.RETR_EXTERNAL) area sum(cv2.contourArea(c) for c in contours) return area / (img.width * img.height)这套系统在3所高校落地后平均每校每年减少误分类垃圾12吨节约督导人力成本约25万元。最关键的是培养了学生的环保意识——这是我们在代码之外最看重的价值。
返回列表