RiVision — 边缘智能视频分析平台
1. 项目概述
RiVision的定位:
- 基于 SpaceMIT K3 RISC-V 芯片, 面向视频流的分布式 AI推理底座。
- 实现 YOLO等目标检测,VLM视频大模型等图像理解等提供分布式,并行化,高性能处理等推理服务。
- 自然语言交互,文字搜索,图片搜索等
- 视频的内容摘要,内容分析等
应用场景
- 面向C端:作为家庭AI算力基础底座,通过多模态和大模型,实现图像/视频/数据的内容分析和摘要
- 面向B端:创建基于大模型的内容摘要和视频分析,并高性能+分布式并行计算,实现智能搜索,场景闭环等
核心能力
- 支持自然语言搜索和以图搜图
- 支持model-zoo-vision
- YOLO 实时目标检测(人、车、物体等),ByteTrack 多目标跟踪
- VLM 视觉语言模型场景描述
- 多节点推理负载均衡与健康管理
- Web UI 实时监控、分析回放、节点管理
- GB28181 / ONVIF / RTSP 多协议摄像头接入与管理
2. 系统架构

3. 模块详细描述
3.1 rivision_cli — 编排中心
系统的核心调度器,负责视频流管理、AI 推理编排和数据存储。
关键子模块:
- go2rtc 嵌入式流中继 — 内嵌 go2rtc 进程,RTSP → fMP4/WebRTC 协议转换,支持 MSE 低延迟播放
- YOLO 扇出检测管线 — 3 层架构:Capture(抓帧)→ WorkerPool(并发推理)→ ByteTrack(多目标跟踪)
- VLM 触发控制 — 3 种模式:定时触发(interval)、YOLO 阈值触发(yolo-threshold)、手动触发(manual)
- 语义搜索引擎 — SQLite + brute-force 余弦相似度,混合评分:文本 0.6 + 图像 0.4 + 关键词 0.3
- Provider 链 — EmbedProvider → RemoteProvider → HashProvider(FNV-1a 降级)
技术栈: Go, Gin, go2rtc, SQLite (WAL), Vue 3 (go2rtc-vue)
3.2 rivision_gateway — 推理网关
多节点推理任务的统一入口,负责负载均衡和结果聚合。
关键能力:
- 节点管理 — Token 注册,10s 心跳,30s 健康检查,网络分区检测
- VLM 智能调度 — 多维评分:健康度 40% + 负载 30% + 延迟 15% + 成功率 15%,原子 SelectAndAcquire
- YOLO 轮询分发 — RoundRobin 策略,按节点能力均匀分配
- 实时推送 — WebSocket Manager,VLM 结果实时广播
- 历史缓存 — 内存环形缓冲区(500 条),支持分页查询
技术栈: Go, Gin, WebSocket, JWT
3.3 rivision_owl — NVR 视频管理
网络视频录像机模块,负责摄像头协议接入和媒体流管理。
关键能力:
- GB28181 SIP 协议栈 — 纯 Go 实现,支持 REGISTER/INVITE/BYE/MESSAGE/NOTIFY,设备注册与保活
- ONVIF 发现 — WS-Discovery 组播发现,GetProfiles/GetStreamUri 自动获取流地址
- ZLMediaKit 嵌入 — 内嵌 C++ 流媒体服务器,支持 RTSP/RTMP/HLS/WebRTC,9 个 Webhook 回调
- 六边形架构 — Protocoler 接口抽象,GB28181/ONVIF/RTSP/RTMP 四种适配器可插拔
- GB28181 模拟器 — 用于开发测试,模拟摄像头 SIP 注册和推流
技术栈: Go, Gin, ZLMediaKit (C++), SIP/SDP, ONVIF, Vue 3 (gb28181-web)
3.4 rivision_node — 边缘计算节点
部署在边缘设备上的推理执行单元。
子组件:
| 组件 | 语言 | 功能 |
|---|---|---|
| node-agent | Go | 进程管理(/proc + systemctl)、心跳上报、健康监控 |
| yolo-server | C++ | ONNX Runtime 推理、WorkerPool/Pipeline 双模式、ByteTrack 跟踪 |
| llama-server | C++ | llama.cpp 封装、MiniCPM-V / Qwen3VL 视觉语言模型 |
NPU 加速: RISC-V K3 通过 SpaceMIT ONNX Runtime EP 调用 A100 NPU;ARM64 通过 CUDA EP
3.5 rivision_embed — 向量嵌入服务
提供文本和图像的向量化能力,支撑语义搜索。
API 接口:
| 方法 | 路径 | 功能 |
|---|---|---|
| GET | /health | 健康检查 |
| GET | /v1/models | 模型信息 |
| POST | /v1/embeddings/text | 文本向量化 |
| POST | /v1/embeddings/image | 图像向量化(Base64/URL) |
模型: Chinese-CLIP ViT-B/16,512 维向量,字符级分词器(最大 52 tokens)
技术栈: Go, CGo, ONNX Runtime, SpaceMIT NPU EP
3.6 go2rtc-vue — Web 前端
基于 Vue 3 + Vite 的单页应用,嵌入 rivision_cli 二进制分发。
页面: 监控(Monitor)、仪表盘(Dashboard)、节点管理(Nodes)、任务(Tasks)、分析回放(Analysis)、设置(Settings)、登录(Login)
4 路 WebSocket: Gateway VLM 推送、YOLO 多路复用、VLM 结果流、MSE 视频流
4. 数据流
4.1 视频接入流

4.2 YOLO 检测流

4.3 VLM 场景理解流

4.4 语义搜索流

5. 端口矩阵
| 服务 | 默认端口 | 协议 | 说明 |
|---|---|---|---|
| rivision_cli | 8080 | HTTP/WS | Web UI + API |
| rivision_cli (go2rtc) | 1984 | HTTP | 流中继 API |
| rivision_cli (go2rtc) | 8554 | RTSP | RTSP 服务 |
| rivision_gateway | 8090 | HTTP/WS | 推理网关 |
| rivision_owl | 15123 | HTTP | NVR 管理 API |
| rivision_owl (SIP) | 15060 | UDP/TCP | GB28181 SIP 信令 |
| rivision_owl (ZLM) | 8220 | HTTP | ZLMediaKit API(ZLM_HTTP_PORT) |
| rivision_embed | 18081 | HTTP | 向量嵌入 API |
| rivision_node (agent) | 9090 | HTTP | 节点管理(AGENT_PORT) |
| yolo-server | 9081 | HTTP | YOLO 推理(YOLO_PORT) |
| llama-server | 9080 | HTTP | VLM 推理(LLAMA_PORT) |
6. 技术栈
| 层级 | 技术 |
|---|---|
| 语言 | Go 1.25+, C++ 17, Vue 3, TypeScript |
| Web 框架 | Gin (Go), Vite (前端) |
| 流媒体 | go2rtc, ZLMediaKit, FFmpeg |
| AI 推理 | ONNX Runtime, llama.cpp, ByteTrack |
| 模型 | YOLOv8/v11, MiniCPM-V, Qwen3VL, Chinese-CLIP ViT-B/16 |
| 存储 | SQLite (WAL mode) |
| 协议 | GB28181 (SIP/SDP), ONVIF (WS-Discovery), RTSP, RTMP, WebRTC |
| NPU | SpaceMIT A100 EP (RISC-V), CUDA (ARM64 Jetson) |
| 构建 | Make, CMake, Go cross-compile, SpaceMIT 交叉工具链 |
7. 项目结构
prj_dir/
├── build/
│ └── Makefile # 统一构建入口
├── scripts/ # 构建/部署脚本
├── tools/ # 交叉编译工具链
│ └── spacemit-toolchain-linux-glibc-x86_64-v1.2.2/
├── src/
│ ├── rivision_cli/ # 编排中心
│ │ ├── go2rtc-vue/ # Web 前端 (Vue 3)
│ │ ├── internal/ # 核心业务逻辑
│ │ │ ├── semantic/ # 语义搜索引擎
│ │ │ ├── yolo/ # YOLO 扇出管线
│ │ │ ├── vlm/ # VLM 触发控制
│ │ │ ├── embed/ # 嵌入式二进制
│ │ │ └── webserver/ # HTTP/WS 服务
│ │ ├── configs/ # 配置模板
│ │ └── Makefile
│ ├── rivision_gateway/
│ │ └── inference-gateway-go/
│ │ ├── cmd/ # 入口
│ │ ├── internal/ # 节点管理、调度、WebSocket
│ │ └── Makefile
│ ├── rivision_owl/
│ │ ├── owl/ # NVR 核心
│ │ │ └── pkg/gbs/ # GB28181 SIP 协议栈
│ │ ├── gb28181-sim/ # GB28181 模拟器
│ │ ├── onvif-sim/ # ONVIF 模拟器
│ │ ├── gb28181-web/ # NVR Web UI
│ │ ├── ZLMediaKit/ # 流媒体服务器 (C++)
│ │ └── Makefile
│ ├── rivision_node/
│ │ ├── node-agent/ # 节点管理 (Go)
│ │ ├── yolo-server/ # YOLO 推理 (C++)
│ │ ├── benchmark/ # 性能测试工具
│ │ └── Makefile
│ └── rivision_embed/
│ ├── cmd/server/ # 嵌入服务入口
│ ├── models/embed/ # ONNX 模型文件
│ ├── third_party/ # ONNX Runtime 库
│ └── Makefile
└── dist/ # 构建产物输出
8. 构建与部署
8.1 统一构建
cd build/
# RISC-V K3 全量发布
make release-riscv64
# 单组件构建
make cli-riscv64
make gateway-riscv64
make embed-riscv64
make owl-riscv64
make node
8.2 构建产物
make release-riscv64 输出 dist/ 目录:
dist/
├── rivision-cli/ # CLI + Web UI + go2rtc + 模型
├── rivision_gateway/ # 推理网关二进制
├── rivision-embed/ # 嵌入服务 + ONNX 模型 + 运行时库
├── rivision_owl/ # NVR + ZLMediaKit + 配置
└── rivision_node/ # node-agent + yolo-server + llama-server
8.3 部署拓扑

9. 运行截图
rivision_cli Web UI

10. 配置示例
rivision_cli (rivision.yaml)
node:
id: "node-master-01"
role: master # master / yolo / compute
name: "主控节点"
server:
host: "0.0.0.0"
port: 8080
cameras:
- name: "前门"
source: "rtsp://admin:password@192.168.1.100:554/stream1"
yolo:
enabled: true
model: "yolov8n.onnx"
confidence: 0.5
target_fps: 5
vlm:
trigger: "yolo" # interval / yolo / manual
prompt: "描述画面中的场景和人物活动"
rivision_owl (config.toml)
[Server.HTTP]
Port = 15123
[Sip]
Port = 15060
ID = "34020000002000000001"
Password = ""
[Media]
HTTPPort = 8220
RTPPortRange = "20000-20100"
[Data.Database]
Dsn = "./configs/data.db"
11. API 接口调用
本节面向应用开发者,说明如何通过 HTTP / WebSocket 接口集成 RiVision 各组件。所有 JSON 接口均以 UTF-8 编码,错误响应统一为 {"error": "<msg>"}(rivision_owl 部分接口为 {"code": <int>, "msg": "<msg>"})。
11.1 服务总览
| 服务 | 默认 Base URL | 协议 | 主要职责 |
|---|---|---|---|
| rivision_cli | http://<host>:8080 | HTTP/WS | Web UI + 编排(摄像头 / VLM / YOLO / OWL 透传) |
| rivision_gateway | http://<host>:8090 | HTTP/WS | 推理网关(节点注册 / 调度 / Token) |
| rivision_embed | http://<host>:18081 | HTTP | 文本 / 图像向量化(OpenAI 兼容) |
| rivision_owl | http://<host>:15123 | HTTP | NVR / GB28181 接入与录像 |
| rivision_node(node-agent) | http://<host>:9090 | HTTP | 节点健康与进程控制 |
11.2 rivision_cli(编排中心 :8080)
11.2.1 摄像头管理 /api/cameras
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/cameras | 列出全部摄像头 |
| GET | /api/cameras/status | 全量状态(在线 / FPS / 码率) |
| GET | /api/cameras/:id | 单个摄像头详情 |
| POST | /api/cameras | 添加摄像头(请求体见 §10 配置示例) |
| PUT | /api/cameras/:id | 更新摄像头配置 |
| DELETE | /api/cameras/:id | 移除摄像头 |
| GET | /api/cameras/:id/stream | 获取播放 URL(fMP4 / RTSP / HLS) |
| POST | /api/cameras/:id/snapshot | 抓拍一帧 JPEG |
| POST | /api/cameras/:id/capture | 触发离线帧采集 |
11.2.2 VLM 触发与结果 /api/vlm
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/vlm/config | 获取 VLM 触发配置 |
| PUT | /api/vlm/config | 更新触发配置(interval / yolo / manual) |
| POST | /api/vlm/trigger/:camera_id | 手动触发一次 VLM 分析 |
| GET | /api/vlm/results | 分页查询历史结果(实现中,参数预留 limit / offset / camera_id) |
| GET | /api/vlm/results/:id | 获取单条结果 |
| DELETE | /api/vlm/results/:id | 删除结果 |
| GET | /api/vlm/stats | VLM 调用统计 |
| GET | /api/vlm/status | VLM 触发器运行状态 |
11.2.3 VLM 语义搜索 /api/vlm/search
文本/图像语义检索独立路由组,请求体均为 JSON(区别于 /api/vlm/results 的列表查询)。
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/vlm/search | 文本搜索,请求体 {"query":"<text>", "camera_id":"<id>", "limit":<N>} |
| POST | /api/vlm/search/image | 以图搜图,请求体含 caption / tags / image_embedding / image_base64 / task_id 等可选字段 |
| POST | /api/vlm/search/hybrid | 混合搜索(文本 + 图像向量加权),请求体含 HybridSearchInput 字段集 + 可选 image_base64 |
| GET | /api/vlm/search/stats | 索引总数与 Provider 状态 |
| GET | /api/vlm/search/provider/status | Embed Provider 状态(EmbedProvider / RemoteProvider / HashProvider 链) |
| POST | /api/vlm/search/reindex | 从网关历史导入并更新本地 SQLite 语义索引 |
| POST | /api/vlm/search/backfill | 回填缺失的图像 / 文本 Embedding |
11.2.4 YOLO 控制 /api/yolo
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/yolo/status | 已启用 YOLO 的摄像头列表与同步参数 |
| POST | /api/yolo/enable/:camera_id | 启用指定摄像头的 YOLO 检测 |
| POST | /api/yolo/disable/:camera_id | 禁用 |
| GET | /api/yolo/check/:camera_id | 检查指定摄像头是否启用 |
| POST | /api/yolo/disable-all | 一键禁用全部 |
| GET | /api/yolo/pipeline-stats | 推理管线统计(Capture / WorkerPool / ByteTrack) |
| POST | /api/yolo/settings | 设置同步帧率 / JPEG 质量 / VLM 间隔 |
11.2.5 OWL / NVR 透传 /api/owl
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/owl/login | NVR 鉴权(透传到 rivision_owl) |
| GET | /api/owl/server/info | NVR 服务信息 |
| GET | /api/owl/devices | 设备列表(page / page_size) |
| GET | /api/owl/devices/:id | 设备详情 |
| GET | /api/owl/devices/:id/channels | 设备下通道列表 |
| GET | /api/owl/channels | 全部通道(可选 device_id 过滤) |
| GET | /api/owl/streams | go2rtc 兼容流地址表 |
| POST | /api/owl/channels/:id/play | 启动通道拉流 |
| POST | /api/owl/channels/:id/stop | 停止拉流 |
| POST | /api/owl/channels/:id/snapshot | 通道抓拍(返回 JPEG) |
| POST | /api/owl/channels/:id/ai/enable | 通道启用 AI 分析 |
| POST | /api/owl/channels/:id/ai/disable | 通道禁用 AI 分析 |
| POST | /api/owl/ptz/control | 云台控制(channel_id / command / speed) |
11.2.6 系统与 WebSocket
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /health | 顶层健康检查 |
| GET | /api/system/status | 系统运行状态 |
| GET / PUT | /api/system/config | 全局配置 |
| GET | /api/system/logs | 日志查询 |
| POST | /api/system/restart | 重启服务 |
| GET | /api/system/events | 事件查询(轮询) |
| GET (WS) | /ws/vlm | VLM 结果实时推送(全量) |
| GET (WS) | /ws/vlm/:camera_id | 单摄像头 VLM 推送 |
| GET (WS) | /ws/yolo | YOLO 多路复用 WebSocket |
| GET (WS) | /ws/yolo/:camera_id | YOLO 单路 |
| GET (WS) | /ws/inference | 推理结果流 |
| GET (WS) | /ws/events | 系统事件流 |
11.3 rivision_gateway(推理网关 :8090)
所有 REST 接口前缀 /api/v1/。
11.3.1 推理 /api/v1/inference
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/v1/inference/analyze | 图像 VLM 分析(image_base64 + prompt) |
| POST | /api/v1/inference/chat | 多轮对话 |
| GET | /api/v1/inference/history | 历史推理记录(分页) |
11.3.2 节点管理 /api/v1/nodes
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/v1/nodes | 已注册节点列表 |
| GET | /api/v1/nodes/snapshot | 快照(含健康 / 负载) |
| GET | /api/v1/nodes/:id | 单节点详情 |
| POST | /api/v1/nodes/register | 节点注册(需携带 Token) |
| POST / PUT | /api/v1/nodes/:id/heartbeat | 节点心跳上报 |
| DELETE | /api/v1/nodes/:id | 注销节点 |
| POST | /api/v1/nodes/:id/enable | 启用 |
| POST | /api/v1/nodes/:id/disable | 禁用 |
| POST | /api/v1/nodes/:id/check | 手动健康检查 |
| POST | /api/v1/nodes/:id/start | 远程启动 llama-server |
| POST | /api/v1/nodes/:id/stop | 停止 |
| POST | /api/v1/nodes/:id/restart | 重启 |
| POST | /api/v1/nodes/:id/kill | 强制终止 |
| GET | /api/v1/nodes/:id/process-status | llama 进程状态 |
11.3.3 健康 / 统计 / 指标
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/v1/health | 健康检查 |
| GET | /api/v1/health/detailed | 详细健康(各子模块) |
| POST | /api/v1/health/check | 触发主动健康检查 |
| GET | /api/v1/stats | 总览 |
| GET | /api/v1/stats/overview | 全局指标 |
| GET | /api/v1/stats/nodes | 各节点统计 |
| GET | /api/v1/stats/performance | 性能指标 |
| GET | /api/v1/stats/tasks | 任务统计 |
| GET | /api/v1/stats/tasks/running | 运行中任务 |
| GET | /api/v1/stats/tasks/pending | 排队任务 |
| GET | /api/v1/metrics/realtime | 实时指标 |
| GET | /api/v1/metrics/timeseries | 时间序列 |
| GET | /api/v1/metrics/prometheus | Prometheus 拉取端点 |
11.3.4 Token 管理 /api/v1/admin/node-tokens
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/v1/admin/node-tokens/generate | 生成节点注册 Token |
| GET | /api/v1/admin/node-tokens/list | Token 列表 |
| DELETE | /api/v1/admin/node-tokens/:token | 撤销指定 Token |
| DELETE | /api/v1/admin/node-tokens/revoke-by-node/:nodeID | 按节点 ID 撤销 |
| GET | /api/v1/admin/node-tokens/stats | 注册统计 |
| GET / POST | /api/v1/admin/node-tokens/blacklist | 黑名单管理 |
| POST | /api/v1/admin/node-tokens/cleanup | 清理过期 Token |
11.3.5 YOLO 与异步任务
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/v1/yolo/detect | YOLO 单帧检测(网关 RoundRobin 分发) |
| GET | /api/v1/yolo/status | YOLO 集群状态 |
| GET | /api/v1/yolo/health | YOLO 集群健康 |
| POST | /api/v1/async-tasks/submit | 提交异步任务 |
| GET | /api/v1/async-tasks/status/:task_id | 查询任务状态 |
| GET | /api/v1/async-tasks/result/:task_id | 获取结果 |
| POST | /api/v1/async-tasks/ack/:task_id | 确认结果 |
| POST | /api/v1/async-tasks/batch/submit | 批量提交 |
| POST | /api/v1/async-tasks/batch/status | 批量查询 |
| GET | /api/v1/async-tasks/main/:main_task_id/progress | 主任务进度 |
11.3.6 WebSocket 与配置
| 方法 | 路径 | 说明 |
|---|---|---|
| GET (WS) | /api/v1/ws/realtime | 网关实时事件 |
| GET (WS) | /api/v1/ws/live | VLM 结果直播流 |
| GET | /api/v1/ws/status | WebSocket 连接状态 |
| GET | /api/v1/config | 网关配置(只读) |
11.4 rivision_embed(向量嵌入 :18081)
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /health | 健康检查(含模型加载状态) |
| GET | /v1/models | 模型信息(dim / owner) |
| POST | /v1/embeddings/text | 文本向量化,请求体 {"input": "<text>"} |
| POST | /v1/embeddings/image | 图像向量化,请求体 {"input": "<base64 | url>"} |
返回向量维度 512(Chinese-CLIP ViT-B/16)。
11.5 rivision_owl(NVR :15123)
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /health | 健康 + 构建版本 |
| GET | /app/version/check | 检查升级 |
| POST | /app/upgrade | OTA 升级(需 JWT) |
| POST | /user/login | 用户登录(返回 JWT) |
| GET | /user/login/key | 登录公钥 |
| GET | /recordings | 录像列表(分页) |
| GET | /recordings/timeline | 时间轴 |
| GET | /recordings/monthly | 月度统计 |
| GET | /recordings/:id | 单条录像 |
| GET | /recordings/:id/download | 录像下载(支持 HTTP Range) |
| GET | /recordings/channels/:cid/index.m3u8 | 通道 HLS 播放列表 |
| ANY | /proxy/sms/*path | 媒体服务反向代理 |
GB28181 / SMS / 事件等接口另行独立说明,详见源码 src/rivision_owl/owl/internal/web/api/。
11.6 rivision_node node-agent(:9090)
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | / | 节点基本信息 |
| GET | /api/v1/health | 健康(liveness + readiness) |
| GET | /api/v1/ready | 就绪 |
| GET | /api/v1/live | 存活 |
| GET | /api/v1/status | 节点状态(CPU / 内存 / GPU) |
| POST | /api/v1/process/start | 启动进程(name=yolo-server | llama-server) |
| POST | /api/v1/process/stop | 停止 |
| POST | /api/v1/process/restart | 重启 |
| POST | /api/v1/process/kill | 强制终止 |
| POST | /api/v1/process/kill-all | 终止全部受管进程 |
| GET | /api/v1/process/status | 单进程状态 |
| GET | /api/v1/process/list | 进程列表 |
| POST | /api/v1/yolo/detect | 节点本地单帧 YOLO 检测 |
| GET | /api/v1/yolo/health | YOLO 子进程健康 |
| GET | /api/v1/yolo/status | YOLO 子进程状态 |
11.7 调用示例
示例假设各服务运行在本机,可按实际部署替换
<host>与端口。
11.7.1 文本嵌入与语义搜索
# 1. 文本向量化(验证 rivision_embed)
curl -s http://localhost:18081/v1/embeddings/text \
-H 'Content-Type: application/json' \
-d '{"input":"红色轿车驶过路口"}' | jq '.data[0].dim'
# 输出: 512
# 2. 通过 rivision_cli 进行语义搜索(POST /api/vlm/search,混合评分排序)
curl -s -X POST http://localhost:8080/api/vlm/search \
-H 'Content-Type: application/json' \
-d '{"query":"红色轿车","limit":10}' | jq '.items'
11.7.2 触发一次 VLM 场景分析
# 对 camera_id=cam-front 触发一次 VLM 分析
curl -s -X POST 'http://localhost:8080/api/vlm/trigger/cam-front' \
-H 'Content-Type: application/json' \
-d '{"prompt":"描述画面中的人物活动","model":"qwen3vl"}' | jq
# 实时订阅 VLM 结果(任选 websocat / wscat 等工具)
websocat ws://localhost:8080/ws/vlm
11.7.3 添加摄像头并启用 YOLO
# 1. 添加 RTSP 摄像头
curl -s -X POST http://localhost:8080/api/cameras \
-H 'Content-Type: application/json' \
-d '{
"id": "cam-front",
"name": "前门",
"source": "rtsp://admin:pw@192.168.1.100:554/stream1"
}'
# 2. 启用 YOLO 检测
curl -s -X POST http://localhost:8080/api/yolo/enable/cam-front
# 3. 查看推理管线统计
curl -s http://localhost:8080/api/yolo/pipeline-stats | jq
11.7.4 网关节点注册流程
# 1. 管理员生成节点 Token
TOKEN=$(curl -s -X POST http://localhost:8090/api/v1/admin/node-tokens/generate \
-H 'Content-Type: application/json' \
-d '{"node_id":"node-edge-01","role":"yolo"}' | jq -r .token)
# 2. 节点端使用 Token 注册
curl -s -X POST http://localhost:8090/api/v1/nodes/register \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{"node_id":"node-edge-01","address":"192.168.1.50:9090","capabilities":["yolo"]}'
# 3. 节点心跳(默认 10s 一次)
curl -s -X POST http://localhost:8090/api/v1/nodes/node-edge-01/heartbeat \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{"load":0.42,"healthy":true}'
11.8 错误与认证
- HTTP 状态码:
200成功;400请求参数错误;401未鉴权;403鉴权失败 / 已加入黑名单;404资源不存在;5xx服务异常。 - rivision_gateway 使用 Bearer Token 鉴权:Token 由
/api/v1/admin/node-tokens/generate生成并发放给边缘节点;节点register/heartbeat必须在Authorization头中携带Bearer <token>。 - rivision_owl 使用 JWT:通过
/user/login获取,写操作(升级、修改)需在Authorization头携带Bearer <jwt>。 - rivision_cli 默认开放 LAN 访问;生产部署建议在反向代理层(Nginx / Caddy)叠加鉴权与限流。