docs+chore: 模型清单下载入口/取消能力补文档,版本递增 1.0.8+9

This commit is contained in:
2026-09-01 09:17:56 +08:00
parent 0bd1af3b42
commit 113e93284f
4 changed files with 10 additions and 3 deletions
@@ -758,6 +758,10 @@ git commit -m "feat(app): ModelManager 目录/下载分离 + 激活集持久化
### Task 6: app — 设置弹层模型清单 UI【TDD】 ### Task 6: app — 设置弹层模型清单 UI【TDD】
> 执行期新增需求(2026-08-31):下载中可**中断**——进度区加「取消」按钮,
> `ModelManager.cancelDownload(id)` 置取消标志,下一个数据块到达时终止并清理
> .part(不记错误,可再次下载);卡片恢复「使用」。
**Files:** **Files:**
- Create: `flutter_app/lib/camera/model_catalog_section.dart` - Create: `flutter_app/lib/camera/model_catalog_section.dart`
- Create: `flutter_app/test/model_catalog_section_test.dart` - Create: `flutter_app/test/model_catalog_section_test.dart`
@@ -17,6 +17,7 @@
1. **多选叠加**:点「使用」的模型都保持生效,多个模型并行推理(沿用现有多模型架构);再次点击取消。 1. **多选叠加**:点「使用」的模型都保持生效,多个模型并行推理(沿用现有多模型架构);再次点击取消。
2. **仅点选才下载**:启动只拉目录不下载;下载只发生在点「使用」时,且显示进度。 2. **仅点选才下载**:启动只拉目录不下载;下载只发生在点「使用」时,且显示进度。
下载中可**中断**(进度区「取消」按钮,终止后丢弃 .part 恢复「使用」,不记错误可重下)。
3. **缩略图**:后端在 models[] 下发 `coverUrl`(公开路由,无需鉴权)。 3. **缩略图**:后端在 models[] 下发 `coverUrl`(公开路由,无需鉴权)。
## 后端改动(server/ ## 后端改动(server/
+4 -2
View File
@@ -44,14 +44,16 @@ xcrun devicectl device process launch --console --terminate-existing \
`models` 目录(公开接口,无需登录),与 `UpdateChecker` 的 APK 检查并行。 `models` 目录(公开接口,无需登录),与 `UpdateChecker` 的 APK 检查并行。
- **目录条目**`{datasetId, datasetName, version, labels[], sizeBytes, sha256, - **目录条目**`{datasetId, datasetName, version, labels[], sizeBytes, sha256,
downloadUrl}`;服务器未发布模型时不返回 `models` 字段,App 无模型可用, downloadUrl, coverUrl}`;服务器未发布模型时不返回 `models` 字段,App 无模型可用,
相机页仅预览不识别。 相机页仅预览不识别。
- **下载入口**:相机页设置弹层「模型清单」按需下载/使用(封面缩略图 2 列网格,
未下载点击「使用」显示进度,完成自动激活;已激活再次点击取消;下载中可取消)。
- **存储**:应用私有目录 `models/<datasetId>/`,含 `model.tflite`、 - **存储**:应用私有目录 `models/<datasetId>/`,含 `model.tflite`、
`labels.json`、`meta.json`meta 记录 `{version, sha256}`)。版本与摘要都 `labels.json`、`meta.json`meta 记录 `{version, sha256}`)。版本与摘要都
未变化时跳过下载;变化则下载到 `.part` 临时文件、sha256 校验通过后 未变化时跳过下载;变化则下载到 `.part` 临时文件、sha256 校验通过后
原子 rename 替换,失败重试一次并保留旧模型,下次启动再试。 原子 rename 替换,失败重试一次并保留旧模型,下次启动再试。
- **清理**:服务器下线的数据集下次同步时删除本地对应目录。 - **清理**:服务器下线的数据集下次同步时删除本地对应目录。
- **并行推理合并**:识别时加载全部已下载模型(`DetectorWorker` isolate 内 - **并行推理合并**:识别时加载全部已激活模型(`DetectorWorker` isolate 内
逐模型加载,单个失败不影响其他),同帧各模型独立推理后按类别分组做 逐模型加载,单个失败不影响其他),同帧各模型独立推理后按类别分组做
**跨模型 NMS**(同类别不同模型检出同一目标取高分去重,不同类别互不压制), **跨模型 NMS**(同类别不同模型检出同一目标取高分去重,不同类别互不压制),
结果叠加 `modelName` 标注来源。 结果叠加 `modelName` 标注来源。
+1 -1
View File
@@ -2,7 +2,7 @@ name: observer
description: "视野 - 动物实时识别 (环颈雉鸡/生境), YOLOv8 + 充值付费" description: "视野 - 动物实时识别 (环颈雉鸡/生境), YOLOv8 + 充值付费"
publish_to: 'none' publish_to: 'none'
version: 1.0.7+8 version: 1.0.8+9
environment: environment:
sdk: ^3.12.2 sdk: ^3.12.2