计算机视觉在农业的应用作物识别 病虫害检测实战传感器搞定了数据但有些东西仪表测不了——叶子上的虫眼、果实的大小、地里到底长了几颗白菜。这些问题得上摄像头 计算机视觉。农业 CV 能做什么做不了什么先拉齐预期。和自动驾驶那种毫米级安全感不同农业 CV 的场景特点是背景脏泥土、杂草、反光、影子这些 CV 最怕的东西农业里全是日常目标密一行白菜可能挤了 200 颗小目标检测是刚需品种杂同一种病在番茄上和在黄瓜上症状长得完全不同标注贵给 10 万张病虫害图片打标签农科院专家一小时要 300 块但好消息是对农业来说95% 的准确率已经够用。你的目标是辅助决策不是替代诊断。漏报几颗病株、多报几颗杂草农技员一眼就能纠正过来。农业 CV 三个最有价值的场景场景技术价值作物识别与计数YOLOv8 目标检测自动统计出苗率、估产病虫害检测YOLOv8 分类 检测早发现早打药减少损失 30%长势分析语义分割 NDVI精准追肥、分区管理实战YOLOv8 训练蔬菜检测模型数据集公开的蔬菜检测数据集OpenMarket30 种常见蔬菜3 万张标注了 bboxiCassava木薯病害数据集8 千张5 类病害 健康PlantVillage38 种作物、14 类病害5.4 万张但这个背景太干净都是实验室拍的我们的第一个模型做 10 种常见蔬菜识别白菜、番茄、黄瓜、茄子、辣椒、豆角、萝卜、菠菜、生菜、丝瓜。用 OpenMarket 做预训练再在自己的棚里拍 500 张做 Fine-Tune。训练PyTorch Ultralytics# 安装pipinstallultralytics# 训练yolo train\modelyolov8n.pt\# nano 模型适合边缘部署datavegetables.yaml\# 数据集配置epochs100\imgsz640\batch16\device0vegetables.yamlpath:./datasets/vegetablestrain:images/trainval:images/valnc:10names:0:cabbage# 白菜1:tomato# 番茄2:cucumber# 黄瓜3:eggplant# 茄子4:pepper# 辣椒5:green_bean# 豆角6:radish# 萝卜7:spinach# 菠菜8:lettuce# 生菜9:luffa# 丝瓜nano 模型在 RTX 3060 上训练 100 epoch 大约 2 小时mAP0.5 能到 0.85 以上。验证Class Precision Recall mAP50 cabbage 0.89 0.87 0.91 tomato 0.92 0.88 0.93 cucumber 0.86 0.83 0.88 eggplant 0.91 0.85 0.90 pepper 0.87 0.82 0.86 green_bean 0.84 0.80 0.85 radish 0.90 0.86 0.90 spinach 0.82 0.78 0.82 lettuce 0.88 0.84 0.88 luffa 0.85 0.81 0.85 Overall 0.874 0.834 0.878病虫害检测——数据集是个大坑作物病害的数据集有几个问题实验室照 vs 田间照差距大——PlantVillage 全是单叶、白底、均匀光照你的摄像头拍出来是逆光、脏镜头、叶子半遮挡地域差异——北方的霜霉病和南方的霜霉病湿度不同外貌差异很大病害阶段——同一种病初期是黄点、中期是褐斑、末期是枯死一个模型要全认出来我的实战路线第一步用 PlantVillage 做预训练学习病害的「形状」不学「颜色和光线」第二步在自己的棚里收集 50-100 张真实病害照片第三步用 Few-Shot Learning如 ProtoNet 迁移学习做适配第四步持续标注、持续更新模型工具推荐Label Studio —— 开源、支持 bbox 分类 分割部署在本地服务器上自己标注完直接用 Python SDK 导出 YOLO 格式。边缘部署在树莓派 / RK3588 上跑云上做一次推理要传图片、等结果、返回一个来回 500ms 以上。病虫害巡检的场景——摄像头挂在轨道车上边走边拍需要实时出结果。边缘推理是刚需。方案对比方案硬件FPS (YOLOv8n)功耗成本树莓派 4BCPU 推理0.5-15W400 元树莓派 4B Google CoralEdge TPU8-108W700 元NVIDIA Jetson NanoGPU 推理10-1510W800 元RK3588 开发板NPU 推理15-208W1000 元推荐RK3588。6 TOPS 的 NPU 专为推理设计不需要 CUDA 那一套。RKNN 工具链把 PyTorch 模型转成 RK3588 原生格式# 1. PyTorch → ONNXyoloexportmodelruns/train/weights/best.ptformatonnxopset12# 2. ONNX → RKNNpython-mrknn.api.rknn_convert\--modelbest.onnx\--outputvegetables.rknn\--targetrk3588# 3. 在 RK3588 上跑python detect_rknn.py--modelvegetables.rknn--source/dev/video0detect_rknn.py的核心逻辑fromrknnlite.apiimportRKNNLite rknnRKNNLite()rknn.load_rknn(vegetables.rknn)rknn.init_runtime()capcv2.VideoCapture(0)whileTrue:ret,framecap.read()outputsrknn.inference(inputs[frame])# outputs 里就是 bbox class confidencedraw_boxes(frame,outputs)部署脚本写好后设 systemd 开机自启轨道车巡检全程自治——拍到了、识别了、结果存本地 SQLite 并通知平台层。实用建议不要从头训模型。用 YOLO 预训练权重 你的数据 Fine-Tune一天搞定从头训要 GPU 跑一周效果还大概率更差。第一版只做一个场景。蔬菜计数 OR 病害检测搞定一个再扩展贪多嚼不烂。标数据比写代码花时间。500 张高质量标注 5000 张低质量标注。标的时候注意框不要切到叶子边缘类别不要犹豫——错了就错着标后期统计混淆矩阵再纠正。定期回传误检样本。在边缘侧记录低置信度0.3-0.6的检测结果定期把原图回传到云端做二次标注模型持续迭代。下一篇《Spring Boot 农业物联网平台从 0 到 1 搭建》——设备管理 CRUD、TDengine 时序存储、告警规则引擎、ECharts 可视化一把梭。