免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

我用 ASP.NET Core 做了个水稻病虫害检查系统

我用 ASP.NET Core 做了个水稻病虫害检查系统 上传一张叶片照片AI 告诉你它得了什么病大家好我是码农刚子。前阵子回了趟老家正赶上水稻抽穗发现一件挺头疼的事。村里谁家田里叶子出了斑点第一反应不是找农技员——镇上的农技站本来就没几个人下一趟田得排好几天。大家习惯找村里种了一辈子地的老农民给看看。但老农民的经验有两个问题。一是不一定叫得准稻瘟和纹枯早期症状像同一个村几个老人看法能不一样二是人不在跟前就没辙年轻人在外打工视频里说不清照片发过去老人也看不清。病虫害这东西早一天识别和晚一天产量差出去一大截。等农技员排到、等老人有空来看可能就过了最佳防治期。我就想能不能搞个东西手机拍张照当场就知道是什么病、该打什么药不用求人、不用等。说干就干用我最熟的.NET 技术栈搭了一套。做完之后效果比预想的好准确率能到 94.78%。这篇把整个过程拆给你看。01 先把痛点想清楚水稻病虫害的诊断传统路子有两个绕不开的问题。一是靠老农民经验。经验靠谱但不总能用上——老人不一定在跟前不同人判断还可能打架。年轻人没那份积累对着病叶干瞪眼。二是靠书靠农技员。病虫害图谱翻起来费劲症状描述又专业对着照片对不上号农技站人手少排队下田等不起。所以这个系统的目标很明确拍照 → 识别 → 给防治建议三步搞定不需要任何专业背景。02 技术栈怎么选既然是毕业设计我没选 PythonFlask 那条最常见的路而是全栈用 .NET。理由很简单一个语言贯穿前后端调试起来省事。核心技术栈是这样的后端ASP.NET Core 8 MVC C# 12数据Entity Framework Core 8 SQLiteCode FirstAI 推理ML.NET ONNXDenseNet1216 类水稻病害前端Razor Bootstrap 5 ECharts认证ASP.NET Core Identity管理员 / 普通用户双角色这里面最有意思的是 ML.NET。很多人以为 .NET 搞 AI 只能调 Python 接口其实 ML.NET 能直接加载 ONNX 模型在进程内推理不用起 Python 服务部署就一个进程。03 模型从哪来自己从零训练一个模型不现实标注数据就是个大坑。我找了 HuggingFace 上一个开源的水稻病害预训练模型架构是 DenseNet121在 Rice_Leaf_AUG 数据集上微调过。六类输出刚好覆盖水稻最常见的叶片病害白叶枯病、褐斑病、健康、稻瘟病、叶枯病、纹枯病下载下来是 PyTorch 的 .pth 权重我用 timm 重建模型结构再导出成 ONNX。整个过程在 CPU 上跑没用到显卡。导出的 ONNX 模型输入 224×224输出 6 维 logits。验证集准确率94.78%做毕业设计够用了。04 推理管道怎么跑图片进来之后MLPredictionService 干这么几件事加载图片ML.NET 的 LoadImages 转换读取本地图片预处理Resize 到 224×224ExtractPixels 提取像素并归一化推理ApplyOnnxModel 加载 ONNX 模型输出 6 维 logits后处理Softmax 归一化取置信度最高的类别匹配知识库根据类别名查 Pest 表返回症状和防治方法有个细节 worth 一提。模型文件可能不存在比如部署时忘了放我做了个降级策略检测到模型加载失败自动切到模拟预测模式基于图片路径生成稳定结果。这样系统永远能跑不会因为缺个模型文件就崩了。05 功能长什么样系统一共六大模块我把核心的几个过一遍。图像检测拖拽或点击上传图片几秒后返回病虫害名称、置信度以及从知识库里匹配出来的防治建议。界面上还能看到各类别的概率分布。病虫害知识库内置了 9 种常见水稻病虫害的详细信息包括症状、危害、防治方法。支持按类别筛选和关键词搜索。管理员可以新增和编辑。数据统计用 ECharts 画了近 30 天检测趋势折线图和病虫害分布饼图一眼能看出最近哪种病高发。权限管理基于 Identity 做的双角色。普通用户能检测、看记录管理员额外有用户管理、知识库维护、操作日志查看权限。06 踩过的坑开发过程中踩了几个印象比较深的坑写出来供参考。ONNX 输出维度。一开始用的是 ImageNet 预训练的 MobileNetV2输出 1000 维得自己映射到水稻病害标签。后来换成专门训练的 DenseNet121输出就是 6 维直接对得上标签省了好多事。InMemory 数据库测试。单元测试用 EF Core 的 InMemory 提供程序自增 ID 的行为跟真实数据库不一样硬编码 ID 会挂。改成取实际返回记录的 ID 就好了。前端静态资源。Bootstrap 和 jQuery 的 CDN 偶尔加载失败换成了本地文件兜底确保断网也能跑。最后跑了一遍单元测试26 个用例全过核心服务层的逻辑基本覆盖到了。07 写在最后说实话做这个项目最大的收获不是技术本身而是把一个真实场景的问题用自己熟悉的工具链从零到一地解决掉。以前总觉得 AI 推理是 Python 的地盘做完才发现 .NET 这边生态也挺成熟。ML.NET ONNX 的组合让一个普通的 ASP.NET Core Web 应用也能跑深度学习模型而且部署特别干净。当然这个系统还有不少可以完善的地方。目前只覆盖了 6 类叶片病害虫害稻飞虱、二化螟这些还没纳入移动端适配也只是基础响应式没有专门做小程序。但作为一个毕业设计的完整项目该有的都有了。 想拿到完整源码 ONNX 模型 论文草稿见我的博客原文我用 ASP.NET Core 做了个水稻病虫害检查系统 - 码录集
返回列表