feat: 完善 mask 编辑、传播平滑与开发重启闭环
功能增加: - 新增后端 /api/ai/smooth-mask 接口,对当前 mask polygon 执行 Chaikin 边缘平滑,并返回 polygon、bbox、area 与拓扑锚点。 - 在右侧实例属性面板加入边缘平滑强度和应用边缘平滑操作,应用后将 mask 标记为 draft/dirty,并通过正常保存链路落库。 - 保存标注与传播 seed 时保留 geometry_smoothing 元数据,自动传播 forward/backward 结果保存前应用同一平滑参数。 - 自动传播 seed signature 纳入平滑参数,修改平滑强度后会触发旧同源传播结果清理并重新传播。 - 支持跨帧跟随同一传播链 mask,AI 推送回工作区时保留当前帧视角。 Bugfix: - 修复中间帧向前传播时旧 forward/backward 同物体结果未被清理导致双重 mask 的问题。 - 修复 propagation worker 写入目标帧前只按旧方向清理导致 backward 重传残留的问题。 - 修复多边形顶点拖拽和编辑后画布视口异常移动的问题,并补充拖拽状态回写。 - 修复实例属性标题跟随全局 active class 而不是当前 mask label 的问题,并移除后端模型置信度展示。 开发与部署: - 新增 restart_dev_services.sh,使用 setsid 独立后台重启 FastAPI、Celery 和前端,写入 pid/log 文件并做 3000/8000 健康检查。 - 明确后端或 Celery 相关改动完成后需要运行重启脚本,保证运行态加载最新代码。 测试与文档: - 补充后端 smooth-mask、传播平滑 metadata、seed signature、传播去重方向覆盖等测试。 - 补充前端 OntologyInspector、VideoWorkspace、CanvasArea 和 api 契约测试,覆盖边缘平滑、传播参数、跨帧选区跟随和画布编辑行为。 - 更新 README、AGENTS、安装文档、前端元素审计、需求冻结、设计冻结和测试计划,记录当前真实行为与重启要求。
This commit is contained in:
@@ -330,6 +330,73 @@ PostgreSQL -> Redis -> MinIO -> FastAPI -> Celery worker -> 前端
|
||||
- MinIO 数据目录 `/home/wkmgc/minio_data`
|
||||
- 脚本里包含本机 sudo 密码写法,迁移机器时应移除或改成安全的 systemd/service 管理方式
|
||||
|
||||
### 10.1 开发重启速查
|
||||
|
||||
本地开发时不要靠猜。不同服务的热更新行为如下:
|
||||
|
||||
| 改动类型 | 是否需要重启 | 原因 |
|
||||
|----------|--------------|------|
|
||||
| 前端 `src/`、`server.ts` | 通常不需要 | `npm run dev` 使用 Vite/tsx,前端会热更新 |
|
||||
| 前端依赖、`.env`、`vite.config.ts` | 需要重启前端 | 依赖和环境变量只在进程启动时读取 |
|
||||
| FastAPI 路由/普通后端代码 | 需要重启后端 | 开发重启脚本用独立后台进程运行后端;显式重启可以保证接口和运行态一致 |
|
||||
| `backend/.env`、模型路径、依赖安装 | 需要重启后端 | 配置和依赖在进程启动时生效 |
|
||||
| Celery 任务、拆帧、自动传播、SAM runner | 必须重启 Celery worker | worker 不是 `uvicorn --reload` 的子进程,不会自动加载代码改动 |
|
||||
|
||||
推荐使用项目根目录的开发重启脚本:
|
||||
|
||||
```bash
|
||||
cd /home/wkmgc/Desktop/Seg_Server
|
||||
./restart_dev_services.sh
|
||||
```
|
||||
|
||||
该脚本会:
|
||||
|
||||
```text
|
||||
检查 PostgreSQL/Redis/MinIO -> 停止旧 FastAPI/Celery/前端 -> 用独立后台进程启动 FastAPI/Celery/前端 -> 检查 3000/8000
|
||||
```
|
||||
|
||||
脚本通过 `setsid` 启动应用层服务,脚本退出后服务会继续运行;pid 文件默认位于 `/tmp/seg_server_*.pid`,日志默认位于 `/tmp/seg_server_*.log`。
|
||||
|
||||
默认日志:
|
||||
|
||||
```text
|
||||
/tmp/seg_server_fastapi.log
|
||||
/tmp/seg_server_celery.log
|
||||
/tmp/seg_server_frontend.log
|
||||
/tmp/seg_server_minio.log
|
||||
```
|
||||
|
||||
如果只想手动重启应用层服务,可以使用:
|
||||
|
||||
```bash
|
||||
cd /home/wkmgc/Desktop/Seg_Server
|
||||
|
||||
# 停止旧进程
|
||||
pkill -f "uvicorn main:app" || true
|
||||
pkill -f "celery -A celery_app:celery_app worker" || true
|
||||
pkill -f "/home/wkmgc/Desktop/Seg_Server/node_modules/.bin/tsx server.ts" || true
|
||||
pkill -f "npm run dev" || true
|
||||
|
||||
# 启动后端和 worker
|
||||
cd /home/wkmgc/Desktop/Seg_Server/backend
|
||||
setsid ~/miniconda3/bin/conda run -n seg_server uvicorn main:app --host 0.0.0.0 --port 8000 \
|
||||
> /tmp/seg_server_fastapi.log 2>&1 < /dev/null &
|
||||
setsid ~/miniconda3/bin/conda run -n seg_server celery -A celery_app:celery_app worker --loglevel=info --concurrency=1 \
|
||||
> /tmp/seg_server_celery.log 2>&1 < /dev/null &
|
||||
|
||||
# 启动前端
|
||||
cd /home/wkmgc/Desktop/Seg_Server
|
||||
setsid npm run dev > /tmp/seg_server_frontend.log 2>&1 < /dev/null &
|
||||
```
|
||||
|
||||
验收:
|
||||
|
||||
```bash
|
||||
curl http://localhost:8000/health
|
||||
curl -I http://localhost:3000
|
||||
ps -ef | grep -E "(uvicorn main:app|celery -A celery_app:celery_app worker|tsx server.ts)" | grep -v grep
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 11. 生产构建方式
|
||||
@@ -487,4 +554,3 @@ curl http://localhost:8000/api/ai/models/status
|
||||
### 不需要 SAM 3
|
||||
|
||||
当前版本不用 SAM 3。不要为了正常部署执行 `backend/setup_sam3_env.sh`,也不要在项目里保存 Hugging Face token。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user