版本:v1.0 | 日期:2026-06-03 | 编写人:[姓名已隐藏] | 状态:初稿
1. 背景与目标
1.1 背景
当前无人机APP在虚拟座舱飞行模式下,已具备AI实时识别能力(如建筑物、裸土、防尘网、坑塘等目标检测)。识别结果在飞行过程中以实时线索面板形式展示(置信度、截图缩略图、鹰眼定位等),数据已实时写入数据库。
核心问题:虚拟座舱内的AI线索面板是任务维度的视图——仅展示当前正在执行任务的线索。一旦任务结束退出虚拟座舱,用户就没有入口再回溯查看这些线索了(包括当前任务的和其他历史任务的)。需要新增一个独立的线索管理模块,提供跨任务、跨时间范围的统一查询入口。
1.2 目标
| 目标项 | 说明 |
|---|---|
| 跨任务统一视图 | 打破"仅当前任务可见"的限制,提供所有历史线索的汇总查看入口 |
| 任务绑定 | 每条线索与所属航线任务/正射影像任务强绑定,支持按任务维度筛选和追溯 |
| 统一入口 | 底部Tab栏提供「AI线索」独立入口(非飞行态也可随时访问) |
| 多维筛选汇总 | 支持按时间、任务类型、线索类型、关键词等多维度筛选聚合 |
| 地图可视化 | 在地图上展示线索空间分布,支持点击查看详情 |
1.3 适用范围
- 项目甲项目无人机APP(Android端)
- 涉及AI识别的场景:航摄任务、正射影像任务
- 识别目标类别:建筑物、裸土、防尘网、坑塘等(可扩展)
2. 业务流程
┌──────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ 创建/执行任务 │ ──▶ │ 虚拟座舱飞行中 │ ──▶ │ 任务结束 │
│ (航摄/正射) │ │ AI实时识别 │ │ 退出座舱 │
└──────────────┘ └──────────────────┘ └────────┬────────┘
│ │ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ AI线索实时写入DB │ │
│ │ 座舱内面板展示 │ │
│ │ (仅当前任务可见) │ │
│ └──────────────────┘ │
│ │
│ ◀────────────────────────┘
│ 任务结束后座舱面板不可访问
│
▼
┌─────────────────┐
│ AI线索管理模块 │ ← 新增独立入口(底部Tab)
│ - 跨任务汇总查看 │ 不受"当前任务"限制
│ - 列表/地图浏览 │
│ - 筛选/搜索 │
│ - 线索详情查看 │
│ - 导出/处置流转 │
└─────────────────┘
核心规则:
- 实时阶段(虚拟座舱内):AI引擎持续检测 → 实时写入数据库 → 座舱右侧线索面板查询当前任务的线索 + 鹰眼地图打点
- 关键约束:座舱内的线索面板是任务作用域视图,只能看到
task_id = 当前任务ID的线索,任务结束退出后该入口关闭 - 访问阶段(线索管理模块):用户通过底部「AI线索」Tab进入,可查看所有任务的历史线索,支持跨任务筛选聚合
3. 功能需求
3.1 模块总览
3.1.1 入口位置
| 入口位置 | 说明 |
|---|---|
| 底部导航栏 | 「AI线索」Tab(与其他Tab并列:现场遍检 / 离线地图 / AI线索 / 无人机 / 个人中心) |
| 虚拟座舱内 | 右侧工具栏「AI线索」按钮(飞行中的实时视图) |
3.1.2 页面布局(参考截图)
┌─────────────────────────────────────────────────────────┐
│ AI线索管理 [跨任务汇总] [×] │
├─────────────────────────────────────────────────────────┤
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │线索总数│ │今日新增│ │航线任务│ │正射影像│ ← 统计卡片 │
│ │ 128 │ │ 18 │ │ 68 │ │ 60 │ │
│ └──────┘ └──────┘ └──────┘ └──────┘ │
├─────────────────────────────────────────────────────────┤
│ 任务类型:[全部任务 ▼] 类型:[全部类型 ▼] │
│ 时间:[开始日期 ~ 结束日期] 🔍[请输入线索名称] │
│ [重置] [筛选] │
├─────────────────────────────────────────────────────────┤
│ ┌────┐ 坑塘 11:31:02 2025-05-12 航摄任务 92% │
│ │缩略│ ○ 监测世荣·马A │
│ └────┘ │
│ ┌────┐ 建筑物 11:31:48 2025-05-12 正射影像任务 90% │
│ │缩略│ ○ 日常巡检B │
│ └────┘ │
│ ... │
│ [查看更多线索 ▶] │
├─────────────────────────────────────────────────────────┤
│ ┌─────────────────────┐ ┌────────┐ │
│ │ │ │ 工具 │ │
│ │ 地图区域 │ │ 查询 │ │
│ │ (线索空间分布) │ │ ▲ │ │
│ │ │ │ 定位 │ │
│ │ │ │ 图层 │ │
│ └─────────────────────┘ └────────┘ │
└─────────────────────────────────────────────────────────┘
3.2 功能点详细设计
3.2.1 F01 — 统计概览区(顶部卡片)
| 字段 | 说明 | 数据来源 |
|---|---|---|
| 线索总数 | 当前筛选条件下线索总量 | 服务端聚合统计 |
| 今日新增 | 当日新增线索数 | 按create_time当日过滤 |
| 航线任务 | 来自航摄任务的线索数 | 按task_type=航摄任务聚合 |
| 正射影像任务 | 来自正射影像任务的线索数 | 按task_type=正射影像任务聚合 |
交互说明:
- 卡片可点击,点击后自动填充对应筛选条件
- 数字变化带动画过渡效果
- 「跨任务汇总」标签:表示当前视图为全任务聚合视角
3.2.2 F02 — 筛选条件区
| 筛选项 | 控件类型 | 可选值 | 默认值 | 说明 |
|---|---|---|---|---|
| 任务类型 | 下拉选择 | 全部任务 / 航摄任务 / 正射影像任务 | 全部任务 | 按绑定的任务分类 |
| 类型(线索类型) | 下拉选择 | 全部类型 / 建筑物 / 裸土 / 防尘网 / 坑塘 / ... | 全部类型 | 按AI识别目标类别 |
| 时间范围 | 日期区间选择器 | 开始日期 ~ 结束日期 | 近7天(或近30天) | 按线索产生时间 |
| 关键词搜索 | 输入框 | 自由输入(线索名称) | 空 | 模糊匹配线索名称 |
交互说明:
- 点击「重置」清空所有筛选项恢复默认
- 点击「筛选」触发查询,结果刷新列表+地图点位
- 筛选条件变化时实时更新顶部统计卡数字
3.2.3 F03 — 线索列表区
每条线索卡片包含以下信息:
| 字段 | 说明 | 示例 |
|---|---|---|
| 缩略图 | AI识别时刻的截图(裁剪区域) | 80×60px |
| 线索名称 | AI识别的目标类型名称 | 坑塘、建筑物、裸土、防尘网 |
| 识别时间 | 线索产生的精确时间 | 11:31:02 |
| 任务日期 | 所属任务的执行日期 | 2025-05-12 |
| 任务类型 | 航摄任务 / 正射影像任务 | 航摄任务 |
| 置信度 | AI识别置信度百分比(右对齐高亮) | 92%(蓝色粗体) |
| 操作人员/设备标识 | 执行该任务的飞手或设备名 | 监测世荣·马A |
交互说明:
- 点击线索卡片 → 进入线索详情页(F05)
- 列表支持上拉加载更多(分页)
- 底部固定「查看更多线索」按钮,点击加载下一页
3.2.4 F04 — 地图展示区
| 功能点 | 说明 |
|---|---|
| 线索点位 | 每条线索在地图上以Marker展示,显示序号或置信度数字 |
| 聚合显示 | 多个线索近距离时自动聚合,显示数量气泡(如截图中的 7/8/9/10/11/12) |
| 点击点位 | 高亮该点位,左侧列表联动滚动到对应线索卡片 |
| 鹰眼联动 | 与列表双向联动:点列表→地图定位;点地图→列表高亮 |
| 右侧工具栏 | 工具 / 查询(收起展开) / 定位(回到当前位置) / 图层切换 |
图层选项建议:
- 卫星底图(默认)
- 矢量底图
- 线索热力图(可选)
3.2.5 F05 — 线索详情页
点击单条线索后进入详情,需展示:
| 区块 | 内容 |
|---|---|
| 基本信息 | 线索ID、名称、类型、置信度、识别时间 |
| 任务关联 | 任务名称、任务类型、执行日期、飞手/设备、航线名称 |
| 位置信息 | 经[坐标已隐藏]坐标、相对起飞点的方位和距离、海拔高度 |
| 影像资料 | AI识别原图(含检测框标注)、裁剪缩略图大图 |
| 飞行姿态 | 采集时的飞行参数(机高、地高、云台角度、航向等) |
| 操作按钮 | 导出线索报告 / 标记已处理 / 转工单 / 删除 |
3.2.6 F06 — 虚拟座舱实时线索面板(已有能力,需确认持久化对接)
当前虚拟座舱已有的实时线索面板能力(数据已走数据库,但视图受限于当前任务作用域):
| 已有功能 | 说明 |
|---|---|
| AI识别状态 | 置信度(Accuracy)、平均耗时(Avg Time)、检测数(Detections) |
| 实时线索列表 | 右侧面板滚动列表,查询条件固定为 task_id = 当前任务ID |
| 变焦控制 | 左侧画面变焦(+/-按钮) |
| 鹰眼地图 | 小地图显示飞机位置与当前检测目标方向 |
现状问题:
- 座舱线索面板的查询是任务隔离的——只能看到正在执行的这个任务的线索
- 任务结束退出座舱后,该面板入口关闭,用户再无途径查看任何历史线索
- 已入库的线索数据本身没有丢失,只是缺少一个跨任务的统一查询UI
本次新增要求(新增独立的AI线索管理模块,与座舱面板共用同一套数据库):
- 新增底部Tab「AI线索」入口,查询范围不受单个任务限制
- 座舱面板的写入逻辑不变(已实时写DB),新增模块直接复用已有数据
- 建议任务结束时触发一次数据完整性校验,确保飞行中产生的所有线索均已落库
4. 数据模型
4.1 核心实体关系
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Task │ 1 N │ Clue │ N 1 │ ClueType │
│ (任务) │──────▶│ (线索) │──────▶│ (线索类型) │
└─────────────┘ └──────────────┘ └─────────────┘
│ │
│ │
│ 1 N │
▼ ▼
┌─────────────┐ ┌──────────────┐
│ Device │ │ ClueImage │
│ (设备) │ │ (线索图片) │
└─────────────┘ └──────────────┘
4.2 线索表(ai_clue)字段设计
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | VARCHAR(32) | Y | 线索唯一ID |
| task_id | VARCHAR(32) | Y | 关联任务ID |
| task_name | VARCHAR(100) | Y | 冗余:任务名称(方便列表展示) |
| task_type | TINYINT | Y | 任务类型:1=航摄任务 2=正射影像任务 |
| clue_type_id | INT | Y | 线索类型ID(外键) |
| clue_type_name | VARCHAR(50) | Y | 冗余:线索类型名称 |
| confidence | DECIMAL(5,2) | Y | 置信度(0~100,如92.00) |
| [坐标已隐藏]) | Y | [坐标已隐藏] | |
| [坐标已隐藏]6) | Y | [坐标已隐藏] | |
| altitude | DECIMAL(8,2) | N | 海拔高度(米) |
| detect_time | DATETIME | Y | AI检测时间 |
| image_url | VARCHAR(500) | Y | 识别截图URL(含检测框) |
| crop_image_url | VARCHAR(500) | N | 裁剪缩略图URL |
| device_id | VARCHAR(32) | N | 采集设备ID |
| operator_id | VARCHAR(32) | N | 飞手/操作员ID |
| operator_name | VARCHAR(50) | N | 飞手姓名 |
| flight_params | JSON | N | 飞行快照(机高、地高、云台角度、航向等) |
| status | TINYINT | Y | 处理状态:0=待处理 1=已处理 2=已忽略 3=已转工单 |
| process_time | DATETIME | N | 处理时间 |
| process_note | VARCHAR(500) | N | 处理备注 |
| created_at | DATETIME | Y | 创建时间 |
| updated_at | DATETIME | Y | 更新时间 |
4.3 线索类型表(ai_clue_type)
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | INT | 主键自增 |
| type_code | VARCHAR(20) | 类型编码(如 building/bare_soil/dust_net/pond) |
| type_name | VARCHAR(50) | 类型中文名(建筑物/裸土/防尘网/坑塘) |
| icon_url | VARCHAR(200) | 类型图标 |
| color | VARCHAR(10) | 地图Marker颜色(如 #1890ff) |
| sort_order | INT | 排序号 |
| is_enabled | TINYINT | 是否启用 |
4.4 与现有任务表的关联方式
-- 线索通过 task_id 关联到现有任务表
-- 假设现有任务表为 flight_task 或类似表名
-- 关键关联字段:
ALTER TABLE ai_clue ADD CONSTRAINT fk_clue_task
FOREIGN KEY (task_id) REFERENCES flight_task(id);
5. 接口设计
5.1 接口清单
| 序号 | 接口名称 | 方法 | 说明 |
|---|---|---|---|
| API-01 | 线索列表(分页) | GET | 支持筛选条件的分页查询 |
| API-02 | 线索统计概览 | GET | 顶部四个统计卡片数据 |
| API-03 | 线索详情 | GET | 单条线索完整信息 |
| API-04 | 线索地图点位 | GET | 返回筛选条件下线索坐标集合 |
| API-05 | 写入线索 | POST | 虚拟座舱实时写入(已有接口,新增模块复用) |
| API-06 | 更新线索状态 | PUT/PATCH | 标记处理状态、备注等 |
| API-07 | 线索导出 | POST | 导出Excel/PDF报告 |
| API-08 | 线索删除 | DELETE | 逻辑删除 |
5.2 关键接口详解
API-01 线索列表
GET /api/v1/clues/list
Query Params:
task_type? -- Integer 任务类型(1=航摄 2=正射影像,不传=全部)
clue_type_id? -- Integer 线索类型ID(不传=全部)
start_date? -- Date 开始日期(格式 yyyy-MM-dd)
end_date? -- Date 结束日期
keyword? -- String 关键词搜索(模糊匹配线索名称)
page? -- Integer 页码(默认1)
page_size? -- Integer 每页条数(默认20)
Response:
{
"code": 0,
"data": {
"total": 128,
"page": 1,
"page_size": 20,
"list": [
{
"id": "CL202605120001",
"task_id": "TK202605120001",
"task_name": "某县市日常巡检-A",
"task_type": 1,
"task_type_name": "航摄任务",
"clue_type_name": "坑塘",
"confidence": 92.00,
"detect_time": "2025-05-12 11:31:02",
"image_url": "https://.../clue_xxx.jpg",
"crop_image_url": "https://.../crop_xxx.jpg",
"operator_name": "监测世荣·马A",
"status": 0,
"[坐标已隐藏]
"[坐标已隐藏]
}
]
}
}
API-02 线索统计概览
GET /api/v1/clues/stats
Query Params: (同API-01的筛选条件)
Response:
{
"code": 0,
"data": {
"total_count": 128,
"today_count": 18,
"flight_task_count": 68,
"ortho_task_count": 60
}
}
API-05 写入线索(虚拟座舱实时调用,已有接口)
此接口为座舱实时识别时调用的写入接口,已在线运行。新增的线索管理模块(API-01~04)直接读取该接口写入的数据即可。此处列出仅作完整性参考。
POST /api/v1/clues/create
Body:
{
"task_id": "TK202605120001",
"task_name": "某县市日常巡检-A",
"task_type": 1,
"clue_type_id": 4,
"clue_type_name": "坑塘",
"confidence": 92.00,
"[坐标已隐藏]
"[坐标已隐藏]
"altitude": 45.5,
"detect_time": "2025-05-12T11:31:02",
"image_url": "https://.../detect_001.jpg",
"device_id": "DJIM3TD_001",
"operator_id": "U10086",
"operator_name": "马A",
"flight_params": {
"altitude_agl": 120.5,
"altitude_rel": 170.1,
"distance_start": 3231.0,
"horizontal_speed": 15.0,
"gimbal_pitch": -68,
"heading": 180
}
}
批量写入接口(任务结束时调用,一次性同步剩余未落库线索):
POST /api/v1/clues/batch-create
Body: { "clues": [ { ... }, { ... }, ... ], "task_id": "xxx" }
6. 非功能性需求
6.1 性能要求
| 指标 | 要求 |
|---|---|
| 列表加载 | 首屏 < 1.5秒(20条分页) |
| 地图渲染 | ≤200个点位渲染 < 1秒 |
| 实时写入 | 单条线索写入 < 300ms |
| 批量归档 | 100条以内批量归档 < 3秒 |
| 筛选响应 | 统计卡片+列表联动脉冲 < 800ms |
6.2 存储估算
| 参数 | 估算依据 |
|---|---|
| 单张缩略图大小 | 约 50~100KB(JPEG压缩后) |
| 单张原图大小 | 约 500KB~2MB(含检测框标注) |
| 单条线索记录 | 约 2KB(不含图片) |
| 日均线索量 | 按日均5架次 × 每架次20 |
| 月存储增量 | 文本约15MB + 图片约2~5GB/月(建议定期归档冷储) |
6.3 离线策略(适用于座舱实时写入链路)
考虑到无人机作业场景可能存在弱网/无网络环境,座舱侧的线索写入需做离线兜底:
| 场景 | 策略 |
|---|---|
| 有网络 | 实时写入服务端(当前已有能力) |
| 弱网络 | 本地SQLite缓存,网络恢复后自动同步上传 |
| 无网络 | 本地SQLite缓存,返回有网区域后手动/自动同步 |
| 同步机制 | 基于线索ID幂等去重,避免重复写入 |
说明:本节描述的是数据生产端(虚拟座舱)的离线策略。新增的线索管理模块是数据消费端(读取/查询),在有网络环境下正常访问服务端API即可。
7. 界面原型要点(基于截图还原)
7.1 配色规范
| 元素 | 色值 | 用途 |
|---|---|---|
| 主色调 | #1890ff(蓝色) | Tab选中、按钮、置信度高亮 |
| 背景色 | #FFFFFF | 卡片背景 |
| 置信度分级 | ≥90% 蓝 #1890ff / 80 | 置信度颜色区分 |
| 统计卡片 | 渐变蓝底 | 顶部4个统计卡片 |
| 地图聚合气泡 | 橙红渐变圆形 | 地图聚合数字标记 |
7.2 底部Tab栏结构
[现场遍检] [离线地图] [AI线索★] [无人机] [个人中心]
↑ 当前选中态
7.3 虚拟座舱右侧工具栏顺序(从上到下)
┌──────┐
│ AI识别 │
│ 航迹 │
│ 搜索 │
│ 操控 │
│ 任务 │
│ AI线索 │ ← 本次重点(已有UI,需打通数据持久化)
│ 更多… │
└──────┘
8. 待确认事项(Q&A)
| 编号 | 问题 | 建议 | 优先级 |
|---|---|---|---|
| Q01 | 线索是否需要支持人工标注修正?(如AI判错,人工改为其他类型) | 建议V1.0先只做状态管理(待处理/已处理/忽略),人工改类型放V1.1 | P1 |
| Q02 | 是否需要线索转工单能力?即发现线索后一键转为处置工单 | 建议预留接口字段(status=3已转工单),实际工单系统对接看整体规划 | P1 |
| Q03 | 图片存储走对象存储(OSS)还是本地服务器? | 建议OSS(适合大量图片+CDN加速),与现有正射影像存储方案保持一致 | P0 |
| Q04 | 线索数据保留周期多长?是否需要定期清理归档? | 建议默认保留180天,超期转入冷存储 | P1 |
| Q05 | 是否需要多端同步?(APP端录入 → Web端/PC端也能查看) | 建议服务端统一存储,后续Web管理端可复用同一套API | P1 |
| Q06 | 虚拟座舱实时写入频率过高时(密集识别场景),当前是逐条写还是攒批写?是否需要优化? | 建议确认现有写入策略;若逐条写则可考虑优化为双策略:飞行中本地缓存+定时批量(每10秒或每5条),任务结束时最终归档校验 | P1 |
| Q07 | 「跨任务汇总」之外,是否还需要单任务维度的查看入口?(如从任务详情页跳转到该任务的所有线索) | 强烈建议支持,从任务详情增加「查看线索」入口 | P0 |
9. 版本规划建议
V1.0(MVP)
- 线索基础CRUD(列表/详情/筛选/统计)
- 虚拟座舱实时线索 → 服务端持久化链路打通
- 地图点位展示+聚合+联动
- 任务绑定关联(线索 ↔ 任务 一对多)
- 离线缓存+自动同步机制
- 底部Tab入口
V1.1(迭代)
- 线索人工标注修正(改类型/调置信度)
- 线索转工单流转
- 线索导出报告(Excel/PDF)
- 烛力图/密度分析视图
- Web端管理后台复用
10. 附录
附录A:名词解释
| 术语 | 说明 |
|---|---|
| AI线索 | AI图像识别算法在无人机实时视频流或正射影像中检测到的目标实例 |
| 虚拟座舱 | 无人机APP中飞行控制主界面,集成实时视频、遥测数据、AI识别等功能 |
| 航线任务 | 按预设航线自主飞行的任务类型 |
| 正射影像任务 | 进行正射摄影测量作业的任务类型 |
| 鹰眼地图 | 小尺度地图窗口,用于展示全局位置和方向感知 |
| 置信度 | AI模型对识别结果的概率评估(0~100%) |
附录B:参考文档
- 《某采集平台无人机管理服务平台-二次开发接口文档》
- 《大疆机场2产品介绍》
- 《高点视频AI识别技术方案》
- 某县市项目甲体系相关需求文档
本文档基于截图UI原型及业务描述编写,待评审后进入开发排期。