cmvr_edge_ai/server/detect/README.md

100 lines
3.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Detect Server
本目录归属“被动调用”的视觉检测 HTTP 服务。服务端负责模型注册、模型生命周期、
`category -> model` 映射、图像解码和推理资源;调用方只使用稳定的业务
`category`,不能指定 `model_id`、权重路径或 pipeline。
阶段一固定协议入口:
- `GET /v1/models`:列出 `active_push``passive_invoke` 两组能力;
- `POST /v1/inference`:接收 `InferenceRequest/v1` JSON返回
`InferenceResponse/v1`
本顶层目录保存部署边界和可编译示例HTTP API 与 pipeline 边界组件位于
`cmvr_edge_ai.server`。公共 wire DTO 以 `cmvr_edge_ai.contracts` 中的版本化类型为准,
路由层不得复制一套形状相近但不兼容的字典协议。
每个被动检测 route 使用一条完整且独立的请求链:
```text
server.request_source@1
-> media.image_decoder.pillow@1
-> detection.model@1
-> server.detection_response@1
-> server.response_sink@1
```
链路使用 `request/block` QoS不配置 `max_fps` 或丢帧策略,因此每个进入 broker 的
请求都会产生一个相关响应或明确失败。Detector 配置 `attach_frame: true`,只有调用方
`requested_artifact_roles` 中请求 `annotated``original`response 节点才编码
对应 JPEG artifact。
## 配置归属
服务端配置拥有监听地址、category、模型 ID、权重、provider、并发和服务端默认参数。
客户端配置只拥有服务 URL、认证/超时以及每次调用允许覆盖的业务参数。
见 [configs/server_detect.yaml](../../configs/server_detect.yaml)。它沿用根 `AppConfig`
`api_version: cmvr.edge.ai/v1`,并通过 `server.routes` 把公开 category 映射到同一
文件内声明的 pipelines。
示例只做配置加载和 DAG 编译时不会加载模型权重;真正启动 pipeline 时才会初始化
Pillow、ONNX Runtime、manifest 和静态 ONNX graph。
CPU ONNX 服务需要 `server``onnx-cpu` extras同一环境还要运行 Detect Client 时加入
`http`
```bash
uv sync --locked --extra server --extra http --extra onnx-cpu
```
只校验配置和两条 DAG
```bash
uv run --no-sync cmvr-edge-ai validate \
--config configs/server_detect.yaml
```
启动两条被动检测 Pipeline 和 HTTP API
```bash
uv run --no-sync cmvr-edge-ai serve \
--config configs/server_detect.yaml \
--log-level INFO \
--log-format text
```
`serve` 会启动配置中全部 `enabled: true` 的 Pipeline不接受 `--pipeline`。启动后可在
另一终端检查健康状态、能力目录并发起一次检测:
```bash
curl -sS http://127.0.0.1:8081/health/live
curl -sS http://127.0.0.1:8081/health/ready
curl -sS http://127.0.0.1:8081/v1/models
CMVR_DETECT_BASE_URL=http://127.0.0.1:8081 \
uv run --no-sync python client/detect/example.py \
/path/to/image.jpg detect.ppe
```
最后一个命令调用 `POST /v1/inference`;也可把 category 改为
`detect.mobile_phone`。客户端始终不携带 `model_id`、Pipeline ID 或权重路径。
若把 `server.http.bind` 改为局域网地址,配置会强制要求 `bearer_token`,并默认要求
`tls_certfile``tls_keyfile`。此时调用示例还需设置
`CMVR_DETECT_BEARER_TOKEN`base URL 使用 `https://`。只有受信隔离网络才能显式配置
`allow_insecure_remote: true` 跳过 TLS存活和就绪探针始终不要求 token。
## OpenCV 实时画框 Viewer
Viewer 是直接订阅 cmvr-es 相机并同时显示 PPE 与手机检测结果的本地调试入口,不经过
被动 HTTP API
```bash
uv run --no-sync python server/detect/show_detections.py \
--config configs/detection_viewer.yaml \
--pipeline detection_show \
--log-level INFO
```
运行前配置远端 endpoint、`device_id` 和两份权重;按 `q``Esc` 退出。