技能:从 RTSP 流进行标定(Calibrate from RTSP Streams)
何时使用此技能
当用户需要基于实时 RTSP 摄像机流进行相机标定时,使用此技能。典型用法包括:
- 校准 RTSP 流 / 校准实时摄像机
- 在 RTSP 源上运行 AutoMagicCalib(AMC)
- 用户提供一个或多个
rtsp://...地址
VIOS 会为每路视频流录制固定时长的片段,AMC 微服务将这些片段导入到项目中,随后工作流与预录制 MP4 标定相同:验证、标定、轮询和获取结果。
注意:此技能不用于处理磁盘上已有的本地 MP4 文件(请使用 skills/amc-run-video-calibration/SKILL.md),也不用于内置示例数据集(请使用 skills/amc-run-sample-calibration/SKILL.md)。除非用户明确指定,否则不得复用示例数据、assets/ 或历史项目中的文件。
前提条件
- AMC 微服务与 UI 运行中
- VIOS 运行中且可从 AMC 微服务访问
- AMC 微服务环境已配置
VIOS_BASE_URL - RTSP URL 可从 VIOS 主机访问
- 场景中有足够移动目标;录制时长建议不少于 60 秒,场景稀疏时建议 120~180 秒或更长
- Python 3 + requests(使用脚本时)
数据隐私
RTSP URL 可能包含用户名、密码、主机名或网络拓扑信息;不应在对话、日志或最终结果中打印完整带凭据的 URL。VIOS token 要通过环境变量等安全方式传递。
需要向用户确认的信息
必填
- 每台摄像机的 RTSP URL
- 每路流的摄像机名称(缺省用
cam_00,cam_01等) - 录制时长(秒),最短 60 秒,建议 120~180 秒
- AMC 微服务 URL,例如
http://<HOST_IP>:8000 - 项目名称
- 标定资产来源:本地目录 / 显式文件路径 / 通过 AMC UI 上传。若未提供,停止并询问。UI 默认地址为
http://<HOST_IP>:5000
可选
sensor_id(若已在 VIOS 注册)- Ground truth zip (
GT.zip),用于评估指标 - 每台摄像机的焦距
- VIOS bearer token(如需)
- 是否在 AMC 标定完成后运行 VGGT refinement(仅当
vggt_state == "READY"时)
操作步骤
步骤 0 - 验证 AMC 和 VIOS
检查 http://<HOST_IP>:<MS_PORT>/v1/ready 以确认 AMC 可用。检查 VIOS 的 sensor/list 接口;若 VIOS 未运行,要求用户启动并配置。
步骤 1 - 创建项目
调用 POST /v1/create_project,字段为 project_name,返回 project_id。
步骤 2 - 开始 RTSP 录制
调用 POST /v1/rtsp/capture/<project_id>,传入 streams 列表(包含 rtsp_url 和 camera_name)、duration_seconds、vios_token 等。返回中的 session.session_id 用于后续操作。
步骤 3 - 轮询录制状态并摄取
每隔 10 秒调用 GET /v1/rtsp/capture/<project_id>/<session_id>。状态流转为 STARTING -> RECORDING -> COMPLETED -> INGESTING -> INGESTED。当状态为 COMPLETED 时,调用 POST /v1/rtsp/capture/<project_id>/<session_id>/ingest 将片段摄取进 AMC 项目。支持手动 stop 并摄取部分录像。
步骤 4 - 上传标定配置文件
根据用户提供的资产目录或显式路径,上传以下文件:
- 标定参数(settings):
POST /v1/config/<project_id> - 对齐文件(alignment):
POST /v1/upload_alignment/<project_id> - 布局图片(layout):
POST /v1/upload_layout/<project_id> - 真值文件(可选):
POST /v1/upload_gt_file/<project_id> - 焦距(可选):
POST /v1/upload_focal_length/<project_id>
若用户没有本地文件,则引导到 AMC UI 的 Step 3/Step 4 手动设置,并询问使用 resnet 还是 transformer 检测器。
步骤 5 - 验证、标定、轮询与获取结果
调用 POST /v1/verify_project/<project_id>,确认 project_state == "READY"。向用户确认标定方案,包括流数量、录制时长、检测器、参数来源、对齐来源、GT 等。随后调用 POST /v1/calibrate/<project_id>,body 为 {"detector_type": "<resnet-or-transformer>"}。轮询 GET /v1/get_project_info/<project_id> 直到状态为 COMPLETED 或 ERROR。若成功,调用 GET /v1/result/<project_id>/evaluation_statistics 获取评估结果(仅有 GT 时才有)。
步骤 6 - 可选 VGGT 精炼
标定完成后检查 vggt_state,若为 READY 则询问是否运行 VGGT。确认后调用 POST /v1/vggt/calibrate/<project_id> 并轮询。若未 READY,则跳过。
成功标准
- VIOS 健康检查返回 200
- 录制会话状态达到
COMPLETED - 摄取成功且项目包含预期视频文件
verify_project返回READY- AMC 标定状态达到
COMPLETED - 有 GT 时能返回评估统计
- 不泄露 RTSP 凭据、token、NGC/HuggingFace 密钥
输出文件
标定结果存放于 projects/project_<project_id>/ 下,包括 manual_adjustment/alignment_data.json、layout.png,以及 output/ 下的单视图和多视图标定结果(camInfo_XX.yaml)。
常见问题
| 问题 | 解决办法 |
|---|---|
| VIOS 网络不通 | 确认 VIOS 已部署并设置正确的 VIOS_BASE_URL |
| 返回 503/“VIOS not configured” | 给 AMC 微服务注入 VIOS_BASE_URL 并重启 |
录制卡在 STARTING |
在 VIOS 中检查传感器是否在线,等待或重启 |
录制卡在 RECORDING |
手动调用 stop 后尝试摄取部分片段 |
| 400 “duration too short” | duration_seconds 至少为 60 |
| 400 “empty streams” | 提供至少一个含 rtsp_url 的流 |
verify_project 非 READY |
检查视频、对齐、布局是否已正确关联 |
| 标定报错 | 获取 GET /v1/amc/calibrate/<project_id>/log 查看日志 |