40 lines
2.1 KiB
Markdown
40 lines
2.1 KiB
Markdown
# 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`。
|