cli to control zed camera start and stop. 2. measure now use every svo2 file for 1 fish, give intermideate result and final result with confidecne level(*).

This commit is contained in:
kevin
2026-04-16 11:38:30 +08:00
parent 9dce487c79
commit cc6cef0f73
57 changed files with 1877 additions and 386 deletions

130
docs/conda-deploy.md Normal file
View File

@@ -0,0 +1,130 @@
# 使用 Conda 单环境部署 FishServer方案 A
本文说明在另一台 **Linux x86_64** 机器上,用 **一个 conda 环境** 安装 Fish API、FishMeasure、FishAction 所需依赖并启动服务。子进程与 uvicorn 共用同一 Python 解释器,**无需**在 `fish_api/.env` 中设置 `PYTHON_FISH_MEASURE` / `PYTHON_FISH_ACTION`(保持为空即可)。
---
## 前置条件
- 已克隆本仓库,目录中包含 `fish_api/``FishMeasure/``FishAction/`
- **模型权重**:将原机器上的 `models/``.env` 中引用的 checkpoint 拷贝到新机器;空目录会导致推理失败。
- **GPU可选**:若使用 `SAM_DEVICE=cuda` 或 PyTorch CUDA需安装与 PyTorch 版本匹配的 **NVIDIA 驱动与 CUDA**
- **ZED SDK处理 `.svo2` 时)**:在新机器安装 **Stereolabs ZED SDK** 及 Python API版本尽量与现有开发/生产环境一致。
- **ffmpeg**:用于视频转码;可用系统包(`apt install ffmpeg` 等),或使用仓库内 `scripts/setup_ffmpeg.sh`(需将脚本中的 `PROJECT_ROOT` 改为本机仓库路径)。
---
## 1. 创建并激活 conda 环境
Fish API 要求 **Python ≥ 3.11**(见 `fish_api/pyproject.toml`)。
```bash
conda create -n fishserver python=3.11 -y
conda activate fishserver
```
后续所有 `pip`/`python` 命令均在该环境中执行。
---
## 2. 安装 Fish APIFastAPI 网关)
```bash
cd /path/to/FishServer/fish_api
pip install -e .
```
可选开发依赖(本地冒烟测试等):
```bash
pip install -e ".[dev]"
```
---
## 3. 在同一环境中安装 FishMeasure / FishAction 依赖
**方案 A 的核心**:测量与行为脚本由 API 以子进程调用,默认使用 **当前 `python`(与 uvicorn 相同)**,因此 PyTorch、OpenCV、ZED、X3D 等必须**全部**装进 **`fishserver`** 这一环境。
本仓库未提供单一的 `FishMeasure/requirements.txt`,请按以下方式之一对齐依赖:
1. **从已有机器导出**(推荐):在已能跑通测量的环境中执行 `pip freeze > requirements-frozen.txt`,在新环境中用 `pip install -r requirements-frozen.txt`(注意需人工剔除/替换与平台、CUDA 不兼容的包)。
2. **按模块 README 与脚本逐步安装**:参考 `FishMeasure/README.md`、各子目录说明,以及 `FishAction/predict_video_x3d_3class.py` 的实际 import至少安装 `FishAction/requirements.txt` 中的依赖,并补齐 PyTorch、torchvision、与 ZED 文档匹配的包。
安装完成后,在 **`conda activate fishserver`** 下验证:
```bash
python -c "import torch; print(torch.__version__)"
# 若使用 ZED按 Stereolabs 文档验证 pyzed 等
```
---
## 4. 配置 `fish_api/.env`
从旧机器复制 `fish_api/.env` 到新机器,**全部路径改为本机绝对路径**,例如:
- `PUBLIC_BASE_URL`:客户端可访问的 API 根地址,**不要**末尾 `/`
- `ACTION_WATCH_DIR``MEASURE_WATCH_DIR`:若启用目录监控,填本机目录。
- `YOLO_MODEL``WEIGHT_CHECKPOINT``ACTION_CHECKPOINT` 等:指向本机真实文件。
- `SAM_DEVICE``cuda``cpu`
**方案 A 下不要填写** `PYTHON_FISH_MEASURE``PYTHON_FISH_ACTION`(留空),让子进程使用当前环境的 `python`
---
## 5. 与 `uv` 的优先级
`fish_api/start_fresh.sh` 若检测到系统中有 `uv` 命令,会优先使用 `uv run`。若你希望**强制使用当前 conda 环境**
- 启动前执行 **`conda activate fishserver`**,并确认 `which python` / `which uvicorn` 指向 `fishserver`;或
- 在不含 `uv` 的 PATH 下启动;或临时从 PATH 中移除 `uv`
若未安装 `uv`,脚本会自动使用 `python3``uvicorn`(依赖已激活的 conda
---
## 6. 启动服务
在**仓库根目录**执行:
```bash
conda activate fishserver
cd /path/to/FishServer
bash scripts/start_fresh.sh
```
默认监听 `0.0.0.0:8000`。可覆盖:
```bash
HOST=0.0.0.0 PORT=8000 bash scripts/start_fresh.sh
```
可选环境变量(见 `fish_api/start_fresh.sh` 注释):
- `CLEAR_SQLITE_DATABASE=1`:清空 SQLite谨慎
- `CLEAR_MEASURE_OUTPUT=1` / `CLEAR_ACTION_OUTPUT=1`:清空中间输出目录。
浏览器访问:`http://<主机>:8000/docs`
---
## 7. 自检清单
| 检查项 | 说明 |
|--------|------|
| 环境 | `conda activate fishserver``python -V` 为 3.11+ |
| API 包 | 在 `fish_api` 目录下 `python -c "import app"` 无报错 |
| 可执行文件 | `which uvicorn` 指向 `fishserver``bin` |
| 权重 | `.env` 中模型路径在本机存在 |
| 测量SVO | ZED 与 PyTorch 在同一 conda 环境中可用 |
| ffmpeg | `ffmpeg -version` 成功(若走视频转码路径) |
---
## 8. 参考
- 根目录 `README.md``fish_api/README.md`:环境变量表与启动说明。
- `fish_api/start_fresh.sh`:启动前 `prestart_fresh` 与 uvicorn 参数。
若需将 FishMeasure / FishAction 拆到**独立 conda 环境**,请在 `fish_api/.env` 中填写 `PYTHON_FISH_MEASURE``PYTHON_FISH_ACTION`(不在本文「方案 A」范围内