1. 项目背景与核心价值
市政井盖管理一直是城市基础设施维护的难点痛点。传统人工巡检方式存在效率低、覆盖不全、响应滞后等问题,每年因井盖缺失或损坏导致的交通事故和人身伤害事件屡见不鲜。我们团队开发的这套基于SpringBoot+Android的智能识别系统,通过计算机视觉技术实现了井盖隐患的自动化检测,将传统需要2-3天的巡检周期缩短至实时响应。
这个毕业设计项目的创新点在于:
- 首次将YOLOv5目标检测模型移植到移动端
- 开发了轻量化的微信小程序作为上报入口
- 构建了完整的隐患处理闭环工作流
关键数据:实测在Redmi Note 11 Pro上,模型推理速度达到17FPS,准确率89.2%,完全满足实时检测需求
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构解析
2.1 整体技术栈
采用经典的三层架构:
code复制客户端:Android原生+微信小程序
服务端:SpringBoot 2.7 + MySQL 8.0
算法层:PyTorch 1.12 + OpenCV 4.5
2.2 关键技术选型
- SpringBoot:相比传统SSM框架,内置Tomcat简化部署,starter机制方便集成MyBatis-Plus等组件
- Android:选用Java语言开发,兼容性更好(实测在Android 5.0+设备运行稳定)
- 微信小程序:利用wx.chooseImage API实现拍照上传,比H5方案体验更流畅
3. 核心功能实现
3.1 隐患识别模块
采用改进的YOLOv5s模型:
- 数据集:自建3000+张井盖图片(含正常/破损/缺失三种状态)
- 训练:在Colab Pro上训练50个epoch,mAP@0.5达到0.91
- 模型优化:
- 通道剪枝减少30%参数量
- 量化成INT8格式
- 最终模型大小仅4.3MB
python复制# 模型加载示例
model = torch.jit.load('manhole_cover.pt')
results = model(img_tensor)
3.2 数据上报流程
- 小程序端调用wx.uploadFile上传图片
- 服务端使用MultipartFile接收文件
- 生成唯一事件ID并存入MySQL
java复制// SpringBoot文件接收示例
@PostMapping("/upload")
public Result upload(@RequestParam MultipartFile file) {
String filename = UUID.randomUUID() + ".jpg";
file.transferTo(new File(uploadPath + filename));
// ...保存到数据库
}
4. 开发避坑指南
4.1 安卓端模型部署
- 使用TensorFlow Lite格式转换时注意:
- 输入输出节点名称必须与原始模型一致
- 量化可能导致精度下降5-8%,需测试验证
- 内存优化技巧:
xml复制<!-- AndroidManifest.xml --> <application android:largeHeap="true">
4.2 微信小程序兼容性问题
- 图片上传限制:
- 单张不超过10MB
- 安卓端默认压缩质量75%
- 解决方案:
javascript复制wx.chooseImage({ sizeType: ['original'], // 不压缩 success: (res) => { // 自行实现压缩逻辑 } })
5. 数据库设计要点
5.1 核心表结构
| 表名 | 字段 | 类型 | 说明 |
|---|---|---|---|
| event | id, location, image_url, status | VARCHAR, POINT, VARCHAR, TINYINT | 主表 |
| user | openid, nickname | VARCHAR, VARCHAR | 微信用户 |
| repair | event_id, worker_id, complete_time | VARCHAR, INT, DATETIME | 维修记录 |
5.2 空间索引优化
sql复制ALTER TABLE event ADD SPATIAL INDEX(location);
-- 附近井盖查询
SELECT * FROM event
WHERE ST_Distance(location, POINT(116.404,39.915)) < 1000;
6. 部署实战
6.1 SpringBoot打包
推荐使用分层构建Docker镜像:
dockerfile复制FROM openjdk:17-jdk-slim as builder
WORKDIR /app
COPY . .
RUN ./gradlew bootJar
FROM openjdk:17-jdk-slim
COPY --from=builder /app/build/libs/*.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
6.2 安卓性能调优
- 开启GPU加速:
java复制interpreter.setUseNNAPI(true); - 内存泄漏检测:
gradle复制debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.9.1'
7. 项目扩展方向
- 多模态检测:加入振动传感器数据,提升识别准确率
- 边缘计算:使用树莓派搭建边缘节点,减轻服务器压力
- 区块链存证:将维修记录上链,防止数据篡改
实测中发现一个有趣现象:雨天时井盖破损识别准确率会下降约12%,这是因为积水会改变井盖的表面特征。后续可以通过数据增强(添加水渍合成图像)来改进模型鲁棒性。
