2.1 KiB
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 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。