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

ASP.NET前后端用户安全管理技术全解析 本文系统介绍ASP.NET Core中用户管理的核心技术,涵盖注册登录、密码加密(PBKDF2)、JWT身份认证及AccessToken/RefreshToken机制。通过轻量级Web API项目演示,强调安全实践:密码明文不存储,使用加盐哈希;登录后生成带有效期的JWT令牌,结合短时效AccessToken与安全存储的RefreshToken实现无状态身份验证,提升系统安全性与用户体验。 阅读详情

上传一张叶片照片,AI 告诉你它得了什么病


大家好,我是码农刚子。前阵子回了趟老家,正赶上水稻抽穗,发现一件挺头疼的事。

村里谁家田里叶子出了斑点,第一反应不是找农技员——镇上的农技站本来就没几个人,下一趟田得排好几天。大家习惯找村里种了一辈子地的老农民给看看。

但老农民的经验有两个问题。一是不一定叫得准,稻瘟和纹枯早期症状像,同一个村几个老人看法能不一样;二是人不在跟前就没辙,年轻人在外打工,视频里说不清,照片发过去老人也看不清。

病虫害这东西,早一天识别和晚一天,产量差出去一大截。等农技员排到、等老人有空来看,可能就过了最佳防治期。

我就想,能不能搞个东西,手机拍张照,当场就知道是什么病、该打什么药,不用求人、不用等。

说干就干,用我最熟的 .NET 技术栈搭了一套。做完之后效果比预想的好,准确率能到 94.78%。这篇把整个过程拆给你看。


01 先把痛点想清楚

水稻病虫害的诊断,传统路子有两个绕不开的问题。

一是靠老农民经验。经验靠谱但不总能用上——老人不一定在跟前,不同人判断还可能打架。年轻人没那份积累,对着病叶干瞪眼。

二是靠书靠农技员。病虫害图谱翻起来费劲,症状描述又专业,对着照片对不上号;农技站人手少,排队下田等不起。

所以这个系统的目标很明确:拍照 → 识别 → 给防治建议,三步搞定,不需要任何专业背景。


02 技术栈怎么选

既然是毕业设计,我没选 Python+Flask 那条最常见的路,而是全栈用 .NET。理由很简单:一个语言贯穿前后端,调试起来省事。

核心技术栈是这样的:

  • 后端:ASP.NET Core 8 MVC + C# 12
  • 数据:Entity Framework Core 8 + SQLite(Code First)
  • AI 推理:ML.NET + ONNX(DenseNet121,6 类水稻病害)
  • 前端: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 干这么几件事:

  1. 加载图片:ML.NET 的 LoadImages 转换读取本地图片
  2. 预处理:Resize 到 224×224,ExtractPixels 提取像素并归一化
  3. 推理:ApplyOnnxModel 加载 ONNX 模型,输出 6 维 logits
  4. 后处理:Softmax 归一化,取置信度最高的类别
  5. 匹配知识库:根据类别名查 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 做了个水稻病虫害检查系统 - 码录集

船载 OpenHarmony AIS 航海工作台:网络层与后端 API 通信 本文介绍船载OpenHarmony AIS航海工作台的网络层设计,通过单例HttpManager统一管理HTTPS请求,采用应用标识、随机串与密钥的MD5签名实现安全鉴权,密钥构建注入不落地。接口涵盖天气、潮汐、水位等,响应统一结构并确保资源释放。关键数据如潮汐采用“缓存优先”策略,支持离线查看。配套管理器协同处理多类网络任务,保障弱网体验与系统稳定。 阅读详情

相关推荐

地图打印与 GeoTIFF 导出:框选区域、矢量标绘、一键出图

空间智能实验室 Vol.19:地图打印与 GeoTIFF 导出:框选区域、矢量标绘、一键出图 「把这块区域导成一张带地理坐标的高清图」是个很朴素的需求,但朴素不等于简单。你要在浏览器里框一个框、画几个箭头标个文字、叠一层

yilvyangguang520的博客 23

SpringBoot 新闻推荐系统:88个Java文件105个接口,首页推荐位是后端按点击数排出来的

# SpringBoot 新闻推荐系统:88个Java文件105个接口,首页推荐位是后端按点击数排出来的 > 这是一套基于 Spring Boot 的新闻推荐系统源码,配套 `db.sql` 建表脚本,业务覆盖新闻发布、排行榜管理、评论回复、点赞点踩、收藏夹和轮播图配置。形态是**前后台双端**:前台是读者用的 layui 静态站,后台是管理员用的 Vue 单页应用(编译产物已嵌在工程里)。最值

面朝大海 252

后端开发 Docker4.99.0 AppleSilicon 苹果芯片 Mac 安装包

本资源为 Docker Desktop 4.99.0 苹果芯片(Apple Silicon)专用安装包,原生适配 M 系列 Mac,可快速搭建本地容器开发环境,支持镜像拉取、容器编排、项目打包部署。适合后端开发、运维、全栈开发者,用于本地微服务、测试环境、项目容器化开发。

BLG大战T1导致应用大规模启动

2026年11月9日,BLG对战T1赛事结束后4小时,因iOS灵动岛功能特性引发大规模应用后台启动。赛事期间用户开启灵动岛,赛后系统推送结束消息,但锁屏UI延迟4小时集中移除,触发大量客户端后台唤醒,导致登录态续期、设备指纹等服务告警。经排查,问题仅限iOS端,根源为灵动岛默认4小时后移除锁屏界面时自动唤醒应用。优化措施包括:临时扩容、推送打散(多通道串行+时间错峰)、客户端识别并保护后端请求,有效缓解压力。

weixin_42448366的博客 195

2025年12月11日 Coherent收发器下沉到数据中心:调研

技术可行性已基本具备。随着3nm DSP技术的成熟和Coherent-Lite等低功耗方案的推出,Coherent技术与IMDD的功耗差距在800G及以上速率节点快速缩小。特别是在1.6T及更高速率,两种技术的功耗开始趋于收敛。同时,通过系统级优化,如将DSP功能从可插拔模块转移到ASIC芯片,可实现30%以上的功耗降低。在成本方面,硅光技术的进步使得单通道硅光引擎BOM成本降至18美元,较2020年下降62%,逼近InP方案的经济临界点。光学系统机会丰富多样。

weixin_51184047的博客 1167

matplotlib三维画图之观察博弈论混合策略下纳什均衡点

参考链接: 博弈论入门20讲之第16讲-猜谜游戏-散户如何赢庄家 游戏背景: 我的期望是: 你的期望是: 使用Python的matplotlib画图: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = Axes3D(fig) X = np.linspace(0, 1, 100) Y = np.linspace(0, 1,

敲代码的小风 1258

【寻币打靶笔记】服务端模板注入(SSTI)练习:Jinja2指纹识别、Python对象链遍历与RCE

寻币xuncoin靶场模板注入(template-injection)房间打靶笔记,记录用{{7*'7'}}区分Jinja2与Twig、导出Flask config敏感配置、Python魔术方法继承链与self.__init__.__globals__任意文件读取和os.popen执行命令,以及排查邮件主题行旁路接口的过程。

QAQerji的博客 194

从零开始构建量化价值投资多因子模型

量化价值投资多因子模型的构建目的在于通过系统性的方法,综合考虑多个影响股票价值的因素,以更准确地评估股票的投资价值,为投资者提供科学的投资决策依据。本模型的构建范围涵盖了从因子的选取、数据的处理、模型的建立到模型的评估和优化等一系列过程。通过对历史数据的分析和回测,验证模型的有效性和稳定性,进而应用于实际的投资组合管理中。本文将按照以下结构进行组织:首先介绍量化价值投资和多因子模型的相关背景知识,包括核心概念和联系;接着详细阐述核心算法原理和具体操作步骤,并给出Python代码示例;

AI天才研究院 1242

HTML+CSS+JS对话式实战(5)-活动管理页之查看报名名单的实现

本文实现活动管理中的“查看报名名单”功能,通过POST接口 /activity/getSignList 根据活动ID查询报名信息,返回统一格式数据。前端在活动列表页新增【查看报名】按钮,点击后弹出独立窗口展示报名人员列表,支持空数据提示。使用 postRequest 封装请求,动态渲染表格,逻辑清晰可扩展。测试验证了正常、空名单及错误场景,最终优化弹窗样式,提升用户体验。

编程副队长 198

Acer宏碁暗影骑士擎AN515-58原厂系统恢复指南:从ISO镜像到完整出厂设置

本文详细介绍了为Acer宏碁暗影骑士擎AN515-58游戏本恢复原厂系统的完整指南。从准备工作、数据备份到下载官方镜像、制作恢复U盘,再到BIOS设置与恢复流程,一步步教你如何将系统完整还原至出厂状态,确保所有硬件驱动、NITROSENSE控制中心等专属优化功能恢复正常,解决系统卡顿、功能异常等问题。

weixin_29271263的博客 1096

Python遥感图像处理指南(2)-卫星影像分析MNDWI提取

在第一篇文章中,我们使用了我们导入的软件包中已定义的函数,如 rasterio 中的 open 和 read 以及 matplotlib 中的 imshow。现在,我们可以编写自己的函数了。函数是一段代码,它接收一些参数作为输入并返回输出(经过一些计算),可以在代码中多次重复使用,也可以被其他代码重用。在 Python 中定义一个新函数非常简单。return v在此语法示例中,arg1和arg2强制参数,应该传递给函数,否则会引发错误,而arg3是一个可选参数,如果是,则假定默认值 1从函数调用中省略。

gis收藏家的博客 1576

AMD显卡上的 ROCm、HIP 与 Vulkan 是什么?它们对大模型推理起什么关键作用?

ROCm 是 AMD 的GPU计算平台,支撑大模型推理框架运行;HIP 是类CUDA的编程接口,决定算子性能上限;Vulkan 为无ROCm环境下的备选推理路径。在R9700等专业卡上,优先部署ROCm(HIP后端)以获最佳性能,支持量化加速与多卡扩展;仅当环境受限时使用Vulkan保底。三者关系:ROCm为平台,HIP为语言,Vulkan为通用后备。

Denuin多啦咧梦的专栏 354

视频流推理的工程架构:YOLO模型如何做到单卡处理16路1080P实时流?

<think>我们只需要根据内容生成摘要,不超过150字。内容是关于YOLO模型单卡处理16路1080P实时流的技术分析,包括方案对比、架构设计等。摘要要简洁,突出关键点。</think>本文深度解析了YOLO模型单卡处理16路1080P实时流的技术方案,对比EagleEye、TensorRT+DeepStream、华为CANN及RK3588四条路线,重点介绍流水线架构、并发模型及显存优化,指出消费级显卡(如RTX 4090)即可实现高并发智能视觉分析。

2601_95807009的博客 162

流式输出 SSE:实现 AI 对话打字机效果后端开发

摘要解决传统 HTTP 请求在 LLM 长文本生成时导致的客户端长时间阻塞与 TTFT 极高的问题。适用于需为 AI 应用提供打字机效果、优化交互体验的后端开发工程师。读完可获得基于 FastAPI 与 SSE(Server-Sent Events)技术的流式响应实现代码、协议规范及生产环境避坑指南。关键词SSE、流式输出、FastAPI、打字机效果、TTFT、大模型推理背景与问题大模型(LLM)生成完整回复通常耗时数秒至数十秒,传统请求-响应模型导致用户界面长时间无响应,体验极差。

2402_85729970的博客 181

SY6982C 7.4V锂电池1A充电模块原理图设计,已量产

在手持设备、便携工具与小型无人机等场景中,7.4V(2S)锂聚合物电池的应用愈发广泛。这类电池对充电系统的安全性、效率与兼容性提出了明确要求:需支持 USB 5V 输入、1A 安全充电,同时具备多重保护机制。本文将结合一款基于 SY6982C 的充电原理图,深入解析其电路设计与技术亮点。

不脱发的程序猿 362

22h2版本的win10安装Docker Desktop时页面空白

摘要:Windows10 22H2系统重装Docker时出现安装界面卡死问题,通过管理员CMD执行静默安装命令解决。命令指定了WSL-2后端及多个自定义数据存储路径(安装目录、Hyper-V数据、Windows容器数据、WSL数据),安装需等待几分钟。最终验证安装成功。

猿小白的博客 657

GPUWorks 免 K8s 交付:单二进制装起推理平台,异构加速卡统一纳管

面向受限机房的 GPUWorks 落地方法:单二进制免 K8s 交付推理服务,用适配层统一纳管多厂商加速卡,并给出路由、观测与分阶段上线步骤。

2301_78967866的博客 383

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

记录Luckysheet导出为Excel的方法

本文针对后端无直接导出Excel接口的问题,基于Luckysheet JSON数据结构,通过TypeScript与ExcelJS实现前端完整导出。重点优化了类型安全、可选链防御、图片定位、合并单元格同步及边框样式还原。关键改进包括:补全私有属性类型定义,使用?.和??防崩溃;精准映射图片坐标与格式;兼容config.merge数组/对象结构并聚合对齐方式;解析config.border并转换为ExcelJS边框样式,确保导出文件完全保留原表的合并、居中、边框等复杂格式,实现高保真导出。

Mr.小灰狼_随笔 516

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

MCP实战手记(十四):MCP调用链追踪,`_meta`注入traceparent的独家方案

篇13已在网关补齐多租户,本篇解决MCP Client→Server链路不可见问题:SkyWalking、OTel Java Agent识别不了`_meta`通道。手动向`_meta`注入 W3C traceparent传递链路,给出可运行代码,支持注入、续接 span、下游透传;Micrometer 埋点延迟、QPS、成功率、P95、错误分布,日志携带traceId与租户。附选型与Docker 栈,实测MCP Java SDK 2.0.0透传可用,支持生产落地。

weixin_39885962的博客 389

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

基于LangChain的服装搭配平台(1)

此项目在我们的后端技术栈的基础上,还应当在掌握LangChain、LangGraph、Agent等AI主流框架的基础上学习。

2501_91306134的博客 243

Vue Router

介绍vue-router的基本使用以及核心概念

k_5412528的博客 157

Writeup 4 0xGame 2021 · command (WEB)

前端限制不可信:永远不要相信前端的任何限制(如disabled按钮、JS 验证等)。攻击者可以直接构造 HTTP 数据包绕过前端校验,所有的安全限制必须在后端实现。命令执行/注入(RCE):Web 应用如果直接调用系统命令且未对输入进行严格过滤,攻击者可以利用;||等符号拼接恶意命令。绕过技巧:在 CTF 中,如果遇到命令执行被过滤,常见的绕过方式包括:${IFS}$IFS$9等。。cat /fla?或cat /fl*。Linux 基础。

hengdonghui的博客 131

04 · OpenStack的块存储管理 Cinder

Cinder 是 OpenStack 中实现持久化块存储的核心服务,解决虚拟机实例删除后数据丢失问题。它通过抽象层统一管理 LVM、NFS、Ceph 等多种后端存储,提供可挂载、可扩容、可快照、可迁移的持久卷。其架构包含 cinder-api(REST 接口)、scheduler(调度)、volume(驱动执行)、backup(备份)四大组件,协同完成卷的创建、挂载与管理。用户可通过 CLI 或 Dashboard 操作卷、快照、备份,并支持 QoS、多后端配置及高可用部署。

路漫漫其修远兮,吾将上下而求索 517

JSON 驱动完全控制布局

JSON 驱动完全控制布局

ZQ200720的博客 187

LLM 推理引擎全对照:15 个主流引擎的模型格式、加速后端与选型逻辑

跑开源大模型第一步不是调 prompt 而是选推理引擎。本文用三张表把 llama.cpp、vLLM、TensorRT-LLM、MLX-LM、LiteRT-LM 等 15 个主流引擎的模型格式、加速后端、适用场景摊开对照,并给出按场景的选型决策与四个最常见的踩坑点。

元宇宙1314 563

【随笔】KV缓存量化:省下的显存,要付出多少数值误差

用可运行量化器解释位宽、比例信息、分组和离群值的关系,核算KV缓存实际载荷,并给出Transformers配置与容量、延迟、质量验收方法。

code2cat的博客 454
上一篇: .NET 项目 Docker 化 + Nginx 反向代理,一篇讲透
下一篇: .NET 面试必问的 8 道 GC 题,建议收藏
码农刚子.
博客等级 码龄8年 554粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农刚子.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值