cmvr_edge_ai/server/gauge/worker/README.md

40 lines
2.1 KiB
Markdown
Raw Normal View History

# Analog Gauge 隔离运行环境
`ethz-asl/analog_gauge_reader` 依赖 Python 3.8、Torch 2.0 和为 CPython 3.8
预编译的 MMCV 2.0 wheel不能安全地安装进本项目的 Python 3.10 主环境。本目录是一个
独立的 uv project只服务 `gauge.analog_reader@1` 子进程。
## 创建环境
运行:
```bash
bash server/gauge/worker/bootstrap.sh
```
脚本安装 uv 管理的 Python 3.8,并按照本目录的 `uv.lock` 创建 `.venv`。不会改动根目录
`.venv`。MMCV URL 是 Linux x86_64、CPython 3.8、Torch 2.0 CPU 的专用 wheel因此
当前部署配置不支持其他平台。
## 进程协议
主进程由 `gauge.analog_reader@1` 自动启动 worker无需手工常驻。worker 使用
`cmvr.external-worker/v1`4 字节大端 JSON header 长度、JSON header随后按
`blob_lengths` 顺序传输 raw blob。图像不做 base64 二次复制。
worker 启动后首先返回 `ready`;每个请求使用一个 JPEG/PNG blob响应包含标量读数、
单位、耗时、诊断和可选 `annotated` blob。Ultralytics/MMOCR 和上游项目的 stdout 已被
重定向到 stderr协议流单独持有启动时复制的 stdout FD日志不会污染二进制帧。
worker 会先解析图片头并按 `--max-pixels` 检查 `width * height`,超限时不会创建临时
输入文件,也不会进入 Pillow/OpenCV 或上游 pipeline。
明确的“未检测到仪表、OCR 数字不足、椭圆拟合失败、未找到指针”属于业务无结果,返回
`no_result`。checkpoint 不兼容、依赖缺失和其他推理/部署异常返回相关联的 `failed`
response帧本身损坏时无法继续可靠解析边界进程会退出并由主框架在下一次请求时重建。
版本基线来自上游项目Torch 2.0.0、Torchvision 0.15.1、MMCV 2.0.0、MMEngine
0.7.2、MMDetection 3.0.0、MMOCR 1.0.0、Ultralytics 8.0.66 和
scikit-learn 1.2.2。NumPy/OpenCV/SciPy 额外固定在仍支持 Python 3.8 且已知兼容的版本,
避免未来解析得到 NumPy 2 或停止支持 Python 3.8 的 wheel。Setuptools 固定为
75.3.2,因为旧版 Ultralytics 启动时仍会导入其中的 `pkg_resources`