# 实现方案 — 2026-04-30
## R1 — PyTorch CUDA + SAM2 安装
### 步骤
1. `pip uninstall torch torchvision torchaudio -y`
2. `pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124`
3. `pip install sam2`
4. 验证: `torch.cuda.is_available()` → True
5. 修改 `backend/services/sam2_engine.py`,移除 stub fallback,使用真实 SAM2
### SAM2 模型配置
- 模型文件: `/home/wkmgc/Desktop/Seg_Server/models/sam2_hiera_tiny.pt` (149MB)
- 配置文件: 需下载对应 YAML 或使用默认配置
## R2 — 视频封面
### 后端
1. `frame_parser.py`: `parse_video()` 提取第一帧为 `thumbnail.jpg`
2. `upload_frames_to_minio()`: 同时上传 thumbnail 到 `projects/{id}/thumbnail.jpg`
3. `models.py`: Project 增加 `thumbnail_url` 字段
4. `schemas.py`: ProjectOut 增加 `thumbnail_url`
5. `projects.py`: list_projects / get_project 返回 thumbnail presigned URL
### 前端
1. `ProjectLibrary.tsx`: 卡片背景显示 `proj.thumbnail_url` 的 `
`
## R3 — 帧率
### 后端
1. `models.py`: Project 增加 `original_fps` (float), `parse_fps` (float, default=30)
2. `schemas.py`: ProjectOut / ProjectCreate 增加字段
3. `frame_parser.py`:
- `parse_video()` 开头用 FFmpeg/FFprobe 读取原始帧率,返回给调用方
- 解析时按 `parse_fps` 参数提取帧
4. `media.py`: `parse_media()` 传入 parse_fps
5. `main.py`: 默认视频种子逻辑设置 original_fps
### 前端
1. `useStore.ts`: Project 增加 `original_fps`, `parse_fps`
2. `api.ts`: getProjects / createProject 映射字段
3. `ProjectLibrary.tsx`: 显示真实帧率 `original_fps`
4. 上传时弹窗允许设置 parse_fps
## R4 — DICOM 批量导入
### 后端
1. `models.py`: Project 增加 `source_type` (str, default="video")
2. `schemas.py`: ProjectOut 增加 source_type
3. `media.py`:
- `upload_media()` 支持批量上传(`List[UploadFile]`)
- 新增 `/api/media/upload/dicom` 接口,专用于批量 .dcm 上传
- DICOM 文件存储到 `uploads/{project_id}/dicom/`
- 上传完成后可直接触发解析
4. `frame_parser.py`: `parse_dicom()` 支持从 MinIO 读取整个 dicom 目录
### 前端
1. `ProjectLibrary.tsx`:
- 导入按钮支持两种模式: 视频导入 / DICOM 序列导入
- DICOM 模式: ``
- 上传进度显示
2. `useStore.ts`: Project 增加 `source_type`