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