SpringBoot+Vue+深度学习:农作物害虫智能检测系统架构与核心模块设计
在农业病虫害管理场景中,真正困难的并不是“上传一张图片并返回一个名称”,而是怎样把图像识别、监测预警、防治建议、知识服务和后台管理串成一套可持续运行的业务系统。
本文以一个农作物害虫智能检测项目为例,拆解 Spring Boot、Vue 与深度学习模型的组合方式。系统面向农户、农技人员、区域农业管理人员和平台管理员,覆盖 15 类常见害虫识别,并把单次识别结果继续用于区域监测和防治决策。
本文侧重系统设计与工程实现思路,不展开模型训练数据和论文原文。后续文章将继续拆解数据库、接口、异步识别与可视化模块。
一、为什么不能只做一个“识别接口”
一个能演示的识别接口,通常只包含三步:
- 上传图片;
- 调用模型;
- 返回类别和置信度。
但生产系统还需要解决以下问题:
- 谁上传了图片,来自哪块农田;
- 识别任务是否排队、失败或超时;
- 相同区域的害虫密度是否超过阈值;
- 天气变化会不会加剧虫害;
- 不同作物、生长期和危害程度应该采用什么防治方案;
- 农技人员如何修正错误结果;
- 管理人员如何查看区域趋势和预警记录。
因此,这个项目没有把 AI 模型直接暴露给前端,而是把它放在完整业务链路中的“智能引擎层”。
二、总体技术架构
系统采用前后端分离设计,可以划分为五层:
| 层级 | 主要职责 | 推荐技术 |
|---|---|---|
| 访问层 | PC 管理端、移动端、小程序 | Vue 3、TypeScript、Element Plus |
| 应用层 | 用户、识别、预警、防治、知识库等业务服务 | Spring Boot、RESTful API |
| AI 引擎层 | 图片预处理、模型推理、结果后处理 | Python 推理服务或独立模型服务 |
| 数据层 | 业务数据、图片地址、识别结果、知识库 | MySQL、对象存储、Redis |
| 基础设施层 | 日志、监控、消息、部署与安全 | Nginx、Docker、消息队列 |
应用层进一步拆为七类服务:
- 图像采集服务;
- 智能识别服务;
- 监测预警服务;
- 防治决策服务;
- 数据管理服务;
- 专家服务;
- 系统管理服务。
这样拆分的好处是:模型可以独立升级,业务规则也可以单独调整,不会因为重新训练模型而影响用户、权限和后台管理功能。
三、核心业务流程
一次完整识别流程可以设计为:
用户上传图片 ↓ Spring Boot 校验文件与用户权限 ↓ 保存原图并创建识别任务 ↓ 异步调用深度学习推理服务 ↓ 写入害虫类别、置信度和候选结果 ↓ 关联作物、地块、时间和天气数据 ↓ 执行预警规则并生成防治建议 ↓ 前端展示结果,必要时由农技人员复核这里建议采用异步任务,而不是让浏览器一直等待模型推理。创建任务后立即返回taskId,前端轮询任务状态,或者通过 WebSocket 接收完成通知。
任务状态至少包括:
publicenumRecognitionStatus{PENDING,PROCESSING,SUCCESS,FAILED,MANUAL_REVIEW}当置信度低于业务阈值时,不应直接给出确定结论,而应把任务转入MANUAL_REVIEW,交由农技人员复核。
四、数据库如何建模
核心数据可以拆成六组:
sys_user:用户、角色和区域信息;recognition_task:识别任务、图片地址和处理状态;recognition_result:害虫类别、置信度和模型版本;pest_knowledge:害虫特征、危害作物和防治知识;warning_record:预警等级、触发规则和覆盖区域;prevention_record:实际采取的防治措施及效果反馈。
识别任务表的简化结构如下:
CREATETABLErecognition_task(idBIGINTPRIMARYKEY,user_idBIGINTNOTNULL,farmland_idBIGINT,image_urlVARCHAR(500)NOTNULL,statusVARCHAR(32)NOTNULL,model_versionVARCHAR(64),error_messageVARCHAR(500),created_atDATETIMENOTNULL,finished_atDATETIME,INDEXidx_user_created(user_id,created_at),INDEXidx_status_created(status,created_at));识别结果不要只保存最终类别,还应保存模型版本和原始置信度。模型升级后,才能准确比较不同版本的效果,并对历史图片进行重新识别。
五、预警与防治决策
预警规则不能只依赖一次识别结果。更可靠的做法是综合:
- 单位时间内同一区域的识别次数;
- 害虫密度或阳性样本比例;
- 温度、湿度、降雨等天气因素;
- 作物类型和生长阶段;
- 历史虫害发生趋势。
可以先实现可配置的规则引擎:
publicWarningLevelcalculateWarning(BigDecimaldensity,WeatherSnapshotweather,CropStagecropStage){if(density.compareTo(highThreshold)>=0&&weather.isSuitableForPestSpread()){returnWarningLevel.RED;}if(density.compareTo(mediumThreshold)>=0){returnWarningLevel.ORANGE;}returnWarningLevel.NORMAL;}防治建议则根据“害虫种类 + 危害程度 + 作物 + 生长期 + 气候条件”组合生成。建议内容应明确标注来源、适用条件和更新时间,避免把过期方案长期展示给用户。
六、Vue 管理端的页面设计
PC 管理端可用 Vue 3、TypeScript 和 Element Plus 实现,主要页面包括:
- 识别任务列表与详情;
- 害虫知识库维护;
- 区域监测地图;
- 预警记录和处理闭环;
- 防治方案维护;
- 用户、角色和权限管理;
- 数据大屏与趋势分析。
数据大屏可以使用 ECharts 展示害虫类别分布、区域趋势、识别成功率和预警处理率。图表只负责展示,聚合计算应放在后端,避免一次向浏览器传输大量明细数据。
七、工程落地时最容易忽略的四件事
1. 图片安全
对上传文件校验 MIME 类型、后缀、大小和真实文件头;图片使用随机文件名,并与 Web 应用目录隔离。
2. 模型版本管理
每条结果都记录模型版本、推理时间和阈值。新模型上线时采用灰度切换,便于快速回退。
3. 失败重试与幂等
模型服务暂时不可用时,任务可以有限次数重试。使用任务 ID 保证幂等,避免同一图片生成多条重复结果。
4. 低置信度人工复核
AI 输出不是最终事实。系统需要允许专家修正,并把复核结果沉淀为后续模型优化的数据。
八、目前的局限与改进方向
该类系统通常面临两个实际限制:一是新害虫和相似类别覆盖不足;二是外部天气接口异常会影响联动预警。
后续可以从三方面改进:
- 建立持续补充和标注样本的闭环;
- 为天气数据增加本地缓存与降级策略;
- 引入模型监控,持续观察置信度分布和人工纠错率。
总结
Spring Boot + Vue + 深度学习的价值,不只是把三个技术名词放在一起,而是用 Spring Boot 管理稳定的业务流程,用 Vue 提供清晰的交互体验,再让模型成为可升级、可监控、可复核的智能能力。
如果你正在做 Java 课程设计、毕业设计或农业数字化项目,可以先按照本文的五层架构搭起主流程,再逐步完善模型、预警规则和数据大屏。后续我会继续拆解这套系统的接口设计、数据库关系和异步任务实现。