app/设备端是唯一在田里的节点,也是整套系统唯一"必须离线可用"的一层。它承担三件事:
它与 Mac 上的司农模型是接力关系,不是替代关系:手机回答"几只虫",司农回答"该怎么办"。
| 阶段 | 耗时 | 说明 |
|---|---|---|
| L1 边缘 | 87 ms | 手机本地 YOLOv8n · 离线可用 · 输出虫种+数量+框 |
| 阈值判定 | <1 ms | 63 只 > 生菜苗期阈值 30 只 → 判定"需上传" |
| 图像上传 | 1-3 s | JPEG 压缩至 ~180KB,仅异常图上传 |
| L2 大脑 | 18.4 s | Mac M1 · 司农 Sinong1.0-8B · 生成防治建议 |
| 回传 | <1 s | 推到 PC 管理端 + 农户小程序 |
| 方案 | 问题 |
|---|---|
| 全部上传云端识别 | 4G 流量爆(150MB/月是按"仅传异常图"估的);Mac 要为每张空板跑推理 |
| 手机跑大模型 | Reno4 Pro 8GB,系统占 3-4GB,相机缓冲+BLE+前台服务已吃掉大半,再塞 1GB 模型 极易 OOM 被杀——常驻监控 APP 被杀等于设备下线 |
| 纯规则无 AI | 无法计数,也讲不出"94% 置信度"这个故事 |
边缘初筛 + 云端复核 这句话你计划书第六章已经写了,本方案只是把"云端"再拆成两级——计划书一个字都不用改,反而讲得更完整。
| 项 | 状态 |
|---|---|
| 多摄像头管理 | 已完成 Camera2 · 主摄/超广角/微距 |
| 虫情识别接口 | 已完成 TFLite 加载逻辑已写好 |
| BLE 传感器桥 | 已完成 UUID 与 ESP32 固件已对齐 |
| 前台服务/开机自启 | 已完成 |
| 模型文件 | 缺失 放入 assets/pest_model.tflite 即启用 |
| 云端地址 | 占位符 CloudReporter.kt:33 |
| 环境数据上报 | 0 调用 reportSensorData() 无人调用 |
| 图片上传 | 未实现 目前只发 JSON |
| 离线队列 / 持久化 | 未实现 断网即丢 |
| Kiosk 模式 | 空实现 仅一句 Toast |
设备端只负责产出数据,不做展示决策。同一次识别会同时流向:
接口定义见 agri-web/API契约.md,三端共用同一份种子数据,保证演示时数字对得上。