设备端 · 哨兵 APP

运行在 OPPO Reno4 Pro(废旧手机复用)· 田间边缘节点 · 对应 Android 工程 app/
演示说明:本页为设备端 APP 界面原型,数据来自 assets/seed.js 演示种子,与 PC 端、农户端同源一致。 真实 APP 为 Kotlin 原生实现(app/src/main/java/com/agrisentinel/),本页用于路演演示与 UI 评审。
18:47 4G▮▮▮ 78%
AI 农业哨兵
哨兵-A012 · 生菜·东区 · 固件 1.2.0
● 监控中
仪表盘
虫情识别
任务队列
设备自检

1设备端在架构里的位置

设备端是唯一在田里的节点,也是整套系统唯一"必须离线可用"的一层。它承担三件事:

  • 采集:多摄像头轮巡拍照 + BLE 读取环境传感器
  • L1 边缘初筛:本地 YOLOv8n 判"这张图值不值得传",87ms 出结果,断网照跑
  • 过滤上传:仅超标/异常图上传,滤掉约 90% 无效图像

它与 Mac 上的司农模型是接力关系,不是替代关系:手机回答"几只虫",司农回答"该怎么办"。

2一次虫情识别的完整链路

阶段耗时说明
L1 边缘87 ms手机本地 YOLOv8n · 离线可用 · 输出虫种+数量+框
阈值判定<1 ms63 只 > 生菜苗期阈值 30 只 → 判定"需上传"
图像上传1-3 sJPEG 压缩至 ~180KB,仅异常图上传
L2 大脑18.4 sMac M1 · 司农 Sinong1.0-8B · 生成防治建议
回传<1 s推到 PC 管理端 + 农户小程序
演示话术:"拍照后 1 秒内手机就给出了虫口密度——这一步不需要网络。 深度防治建议由远端大模型生成,需要 20 秒左右——这段时间正好可以讲架构。" 把等待变成叙事工具,而不是缺陷。

3为什么坚持在手机端跑小模型

方案问题
全部上传云端识别4G 流量爆(150MB/月是按"仅传异常图"估的);Mac 要为每张空板跑推理
手机跑大模型Reno4 Pro 8GB,系统占 3-4GB,相机缓冲+BLE+前台服务已吃掉大半,再塞 1GB 模型 极易 OOM 被杀——常驻监控 APP 被杀等于设备下线
纯规则无 AI无法计数,也讲不出"94% 置信度"这个故事

边缘初筛 + 云端复核 这句话你计划书第六章已经写了,本方案只是把"云端"再拆成两级——计划书一个字都不用改,反而讲得更完整。

4设备端代码现状与待办

状态
多摄像头管理已完成 Camera2 · 主摄/超广角/微距
虫情识别接口已完成 TFLite 加载逻辑已写好
BLE 传感器桥已完成 UUID 与 ESP32 固件已对齐
前台服务/开机自启已完成
模型文件缺失 放入 assets/pest_model.tflite 即启用
云端地址占位符 CloudReporter.kt:33
环境数据上报0 调用 reportSensorData() 无人调用
图片上传未实现 目前只发 JSON
离线队列 / 持久化未实现 断网即丢
Kiosk 模式空实现 仅一句 Toast
演示前必须处理:至少完成上表前 4 项标红项,否则现场演示时"识别结果"只存在于手机本地日志里,大屏上看不到任何东西。

5与 PC 端 / 农户端的联动

设备端只负责产出数据,不做展示决策。同一次识别会同时流向:

  • PC 管理后台:虫情智能分析(含抓拍图、趋势曲线、AI 建议卡)
  • 农户小程序:首页告警 + 虫情记录 + AI 防治建议

接口定义见 agri-web/API契约.md,三端共用同一份种子数据,保证演示时数字对得上。

三端切换
① 设备端 ② PC 后台 ③ 农户端 全部入口