版本:V1.0 编制日期:2026年6月 编制部门:华中业务中心·开发与技术支持部 状态:初稿
目录
1. 需求概述
1.1 需求背景
市项目甲项目已部署高点视频监控系统,接入应急监控、生态环境监控、林业监控等多类摄像头资源。当前系统已具备AI识别能力(火点、烟尘、工程机械等目标的检测分类),但识别结果仅包含画面中的像素位置(bounding box[坐标已隐藏]无法直接关联到地理坐标。
为解决"AI发现了目标,但不知道目标在哪儿"的问题,需要实现基于摄像头参数的AI目标经[坐标已隐藏]定位功能:通过摄像头安装高度、俯仰角、水平偏转角等参数,结合AI识别目标在画面中的像素位置,利用三角测量公式推算出目标的实际地理坐标(经[坐标已隐藏]
1.2 核心目标
| 目标项 | 描述 |
|---|---|
| 摄像头参数获取 | 对接市视频监控平台,实时获取摄像头安装参数(高度、角度、焦距等) |
| AI目标识别 | 对视频流帧进行目标检测,获取目标在画面中的像素[坐标已隐藏] |
| 经[坐标已隐藏]推算 | 基于摄像头参数 + AI识别像素坐标,利用三角测量公式计算目标实际经[坐标已隐藏] |
| 结果展示 | 在地图上标注识别目标位置,支持查看历史记录和轨迹 |
1.3 适用场景
| 场景 | 说明 |
|---|---|
| 森林防火 | AI识别火点后自动计算火点经[坐标已隐藏]直接推送消防力量 |
| 违法占地 | AI识别工程机械后定位违法施工位置,生成执法线索 |
| 矿山监管 | 识别越界开采车辆,精确定位越界位置 |
| 工程建设 | 监测施工进度,记录施工作业位置变化 |
2. 系统架构
2.1 整体架构
┌──────────────────────────────────────────────────────────────┐
│ 系统架构总览 │
├──────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────────┐ ┌───────────────────┐ │
│ │ 视频监控 │───→│ 视频流获取 │───→│ 视频帧抽取 │ │
│ │ 平台 │ │ (RTSP/GB28181)│ │ (定时/实时/比对) │ │
│ └──────────┘ └──────────────┘ └────────┬──────────┘ │
│ │ │ │
│ │ 获取摄像头参数 │ │
│ │ (高度/角度/焦距/经[坐标已隐藏] │
│ │ ┌───────────────────┐ │
│ │ │ AI目标检测模型 │ │
│ │ │ 输出:bbox[坐标已隐藏]
│ │ │ (像素x, y, w, h) │ │
│ │ └────────┬──────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌───────────┐ ┌───────────────────┐ │
│ │ 摄像头参数 │────────────────────────→│ 经[坐标已隐藏]定位算法 │ │
│ │ 获取接口 │ │ (三角测量法) │ │
│ └───────────┘ └────────┬──────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────────┐ │
│ │ 目标经[坐标已隐藏]结果 │ │
│ │ ([坐标已隐藏]
│ └────────┬──────────┘ │
│ │ │
│ ┌────────────┼────────┐ │
│ ▼ ▼ ▼ │
│ ┌──────────┐ ┌────────┐ ┌─────┐ │
│ │ 地图标注 │ │ 数据存储 │ │ 告警 │ │
│ └──────────┘ └────────┘ └─────┘ │
│ │
└──────────────────────────────────────────────────────────────┘
2.2 数据流
摄像头参数(API) ──→ 参数解析 ──→┐
├──→ 三角测量计算 ──→ 经[坐标已隐藏][坐标已隐藏]存储/展示
AI识别结果(像素) ──→ 像素转换 ──→┘
3. 视频监控平台对接需求
3.1 平台概述
对接市视频监控平台,获取摄像头资源列表、视频流地址、云台控制及摄像头安装参数。
3.2 Token认证
| 项目 | 说明 |
|---|---|
| 接口地址 | /qxduijie/getToken |
| 请求方式 | GET |
| 认证方式 | Token鉴权,有效期24小时 |
| 缓存策略 | 系统本地缓存Token,过期前自动刷新 |
3.3 监控资源列表获取
| 接口 | 路径 | 说明 |
|---|---|---|
| 应急监控列表 | /qxduijie/getYjList | 获取应急类监控摄像头列表 |
| 生态监控列表 | /qxduijie/getStList | 获取生态环境类监控摄像头列表 |
| 林业监控列表 | /qxduijie/getLyList | 获取林业类监控摄像头列表 |
返回字段要求:
| 字段 | 说明 | 是否必须 |
|---|---|---|
| 摄像头名称 | 监控点名称 | 是 |
| 摄像头编码 | 通道编码(channelCode) | 是 |
| 视频流地址 | RTSP/GB28181流地址 | 是 |
| 摄像头类型 | 固定枪机/快球/半球 | 是 |
| 所属区域 | 行政区划/管辖区域 | 否 |
3.4 视频流获取
| 项目 | 说明 |
|---|---|
| 接口地址 | /qxduijie/getStream |
| 请求方式 | GET |
| 输入参数 | channelCode(通道编码) |
| 输出 | 视频流地址(RTSP) |
3.5 云台控制
| 项目 | 说明 |
|---|---|
| 接口地址 | /qxduijie/control |
| 请求方式 | GET |
| 功能 | 远程控制摄像头水平旋转、垂直俯仰、变焦 |
| 适用场景 | 定位AI发现的目标后,远程调整摄像头视角进行确认 |
3.6 摄像头参数获取(核心接口)
| 项目 | 说明 |
|---|---|
| 接口地址 | /shiduijie/getChannelInfo |
| 请求方式 | GET |
| 输入参数 | channelCode(通道编码) |
| 用途 | 获取摄像头安装参数,用于经[坐标已隐藏]定位计算 |
返回字段详解:
| 字段名 | 类型 | 说明 | 取值范围 | 用于定位计算 | 示例值 |
|---|---|---|---|---|---|
| channelCode | String | 通道编码(摄像头唯一标识) | - | - | "CH001" |
| [坐标已隐藏]摄像头安装位置[坐标已隐藏]是** | "113.9265" | ||||
| [坐标已隐藏]摄像头安装位置[坐标已隐藏]是** | "30.9243" | ||||
| installAddress | String | 设备安装地址(文本描述) | - | - | "XX路XX号" |
| cameraHeight | String | 摄像头安装高度(米) | - | 是 | "30" |
| horizontal | String | 水平位置,归一化值 | -1 ~ 1 | 否(用于换算) | "0.5" |
| horizontalAbs | String | 水平位置,真实角度值 | 0 ~ 360(度) | 是 | "180" |
| vertical | String | 垂直位置,归一化值 | -1 ~ 1 | 否(用于换算) | "-0.08" |
| verticalAbs | String | 垂直位置,真实角度值 | -180 ~ 180(度) | 是 | "-15" |
| zoom | String | 变倍值,归一化值 | 0 ~ 1 | 否 | "0.5" |
| zoomValue | String | 显示放大倍数,真实值 | 1 ~ MaxZoom | 否(用于视场角计算) | "10" |
| horizontalMax | String | 水平转动范围最大角度(度) | - | 否 | "360" |
| horizontalMin | String | 水平转动范围最小角度(度) | - | 否 | "0" |
| verticalMax | String | 垂直转动范围最大角度(度) | - | 否 | "180" |
| verticalMin | String | 垂直转动范围最小角度(度) | - | 否 | "-180" |
| focusMax | String | 焦距最大值(mm) | - | 是 | "180" |
| focusMin | String | 焦距最小值(mm) | - | 是 | "6" |
| irisMax | String | 光圈最大值 | - | 否 | "9.7" |
| irisMin | String | 光圈最小值 | - | 否 | "3.6" |
字段说明:
- 归一化值与真实值:
horizontal/vertical/zoom为归一化值(归一化到特定区间),仅用于云台控制指令;经[坐标已隐藏]定位计算必须使用真实值horizontalAbs/verticalAbs/zoomValue。- cameraHeight:摄像头镜头中心距离地面的高度,单位为米。
- horizontalAbs:水平偏转角真实值,0°~360°表示摄像头光轴水平投影方向。
- verticalAbs:垂直角度真实值,-180°~180°。通常0°表示水平,正值表示俯视(向下),负值表示仰视(向上),具体正负号约定需根据摄像头型号确认。
- 所有返回字段类型为String,计算时需转换为数值类型。
- zoomValue(放大倍数) 可用于估算当前焦距:
当前焦距 ≈ focusMin × zoomValue。
3.7 参数获取策略
| 策略 | 说明 |
|---|---|
| 静态参数 | [坐标已隐藏][坐标已隐藏]安装高度(cameraHeight)、焦距范围(focusMax/focusMin)、安装地址(installAddress):摄像头安装后基本不变,可一次性获取并缓存 |
| 动态参数 | 当前水平角(horizontalAbs)、当前俯仰角(verticalAbs)、放大倍数(zoomValue):随云台转动实时变化,需在每次AI识别时实时获取 |
| 刷新频率 | 动态参数在AI识别抓帧时同步获取,确保参数与画面对应 |
| 异常处理 | 参数获取失败时,本次识别结果仅记录像素坐标,不计算经[坐标已隐藏]并记录异常日志 |
3.8 实际数据情况与参数补全方案
实测发现:调用
getChannelInfo接口后,大部分定位计算必需参数返回null。
实测返回数据示例(channelCode: 1900515481946173441):
| 字段 | 实际返回值 | 状态 |
|---|---|---|
| horizontalMax | "59°" | 有值 |
| horizontalMin | "2.9°" | 有值 |
| verticalMax | "+90°" | 有值 |
| verticalMin | "-20°" | 有值 |
| focusMax | "180mm" | 有值 |
| focusMin | "6mm" | 有值 |
| irisMax | "F9.7" | 有值 |
| irisMin | "F3.6" | 有值 |
| channelCode | "1900515481946173441" | 有值 |
| [坐标已隐藏]缺失 | ||
| [坐标已隐藏]缺失 | ||
| cameraHeight | null | 缺失 |
| horizontalAbs | null | 缺失 |
| verticalAbs | null | 缺失 |
| zoomValue | null | 缺失 |
| horizontal / vertical / zoom | null | 缺失 |
| installAddress | null | 缺失 |
原因分析:
- 范围参数(Max/Min)为设备出厂硬件参数,由平台自动采集,有值
- 位置参数([坐标已隐藏]高度参数(cameraHeight)需人工配置录入,目前平台未配置
- 实时状态参数(horizontalAbs、verticalAbs、zoomValue)需云台在线且支持状态回传,当前可能因云台离线或接口未实现而返回 null
参数补全方案:
| 缺失参数 | 补全方案 | 实施方 | 优先级 |
|---|---|---|---|
| **[坐标已隐藏]方案A:视频监控平台后台管理界面增加摄像头坐标配置功能<br>方案B:通过安装地址调用高德地图API逆地理编码获取<br>方案C:在项目甲平台地图上点选标注 | 平台方 / 我方 | P0 | |
| cameraHeight | 安装人员实地测量后录入平台,或项目甲平台提供配置入口 | 平台方 / 安装方 | P0 |
| installAddress | 安装时录入设备安装地址文本 | 安装方 | P1 |
| horizontalAbs | 方案A:确认视频监控平台是否有其他PTZ状态查询接口<br>方案B:通过云台控制协议(如ONVIF)直接查询云台状态<br>方案C:调用云台控制接口时记录指令角度作为当前角度 | 平台方 / 我方 | P0 |
| verticalAbs | 同上 | 同上 | P0 |
| zoomValue | 同上 | 同上 | P1 |
摄像头参数配置管理功能需求(新增):
由于 getChannelInfo 返回的必需参数可能为 null,项目甲平台需提供参数配置管理模块,支持:
-
手动配置:在摄像头管理页面,按
channelCode配置/修改以下参数:- [坐标已隐藏][坐标已隐藏]
- 安装高度(cameraHeight)
- 安装地址(installAddress)
-
参数来源优先级:
最终值 = API实时值 ?? 平台手动配置值 ?? 默认值- 优先使用
getChannelInfoAPI 返回的非 null 值 - API 返回 null 时,使用平台手动配置的值
- 均无值时标记为"参数未配置",不进行经[坐标已隐藏]计算
- 优先使用
-
配置数据存储:
字段 类型 说明 channel_code String 通道编码(关联摄像头) config_[坐标已隐藏]手动配置的[坐标已隐藏] config_[坐标已隐藏]手动配置的[坐标已隐藏] config_height Float 手动配置的安装高度(米) config_address String 手动配置的安装地址 update_time DateTime 最后配置更新时间 config_user String 配置操作人
4. AI目标识别需求
4.1 识别触发方式
沿用现有三种识别模式,识别触发方式不变:
| 模式 | 触发 | 说明 |
|---|---|---|
| 实时识别 | 手动点击"AI识别"按钮 | 即时开启,实时检测 |
| 定时识别 | 配置定时计划后自动执行 | 按计划周期抓帧识别 |
| 分时比对识别 | 配置比对计划后自动执行 | 不同时点照片差分比对 |
4.2 识别结果格式
AI模型输出目标的bounding box(边界框),需记录以下信息:
识别结果 = {
"targetId": "唯一标识",
"targetType": "目标类别", // 如:fire(火点)、smoke(烟尘)、excavator(挖掘机)等
"confidence": 0.95, // 置信度 0~1
"bbox": {
"x": 580, // 左上角x坐标(像素)
"y": 320, // 左上角y坐标(像素)
"width": 120, // 边界框宽度(像素)
"height": 80 // 边界框高度(像素)
},
"centerPixel": { // 中心点像素[坐标已隐藏] // 中心x像素
"py": 360 // 中心y像素
},
"imageWidth": 1920, // 图像宽度(像素)
"imageHeight": 1080 // 图像高度(像素)
}
4.3 关键坐标说明
| 坐标项 | 定义 | 用途 |
|---|---|---|
| 图像原点 (0,0) | 图像左上角 | 像素坐标系基准 |
| 图像中心 (cx, cy) | 图像几何中心点 = (imageWidth/2, imageHeight/2) | 光轴在画面中的投影位置 |
| 目标中心 (px, py) | AI识别目标bounding box的中心像素[坐标已隐藏]经[坐标已隐藏]计算的核心输入 | |
| 像素偏移 (dx, dy) | 目标中心相对于图像中心的像素偏移 dx=px-cx, dy=py-cy | 角度偏移计算依据 |
5. 目标经[坐标已隐藏]定位算法需求
5.1 算法原理
本功能采用三角测量法,利用摄像头的几何参数和AI识别目标在画面中的像素位置,推算目标的实际地理坐标。
核心思路:
已知条件:
- 摄像头安装高度 H(米)
- 摄像头安装经[坐标已隐藏]
- 摄像头当前俯仰角 θ(度)
- 摄像头当前水平偏转角 φ(度)
- 摄像头当前焦距 f(毫米)
- 摄像头传感器宽度/高度(毫米)
- AI识别目标中心像素[坐标已隐藏]
求解目标:目标在地面的经[坐标已隐藏]rget)
5.2 算法步骤
步骤一:计算像素到角度偏移
将AI识别目标在画面中的像素偏移量转换为相对于光轴的角度偏移。
1.1 计算像素偏移
dx_px = px - cx // 水平像素偏移(目标中心x - 图像中心x)
dy_px = py - cy // 垂直像素偏移(目标中心y - 图像中心y)
其中 cx = imageWidth / 2,cy = imageHeight / 2
1.2 计算视场角(FOV)
根据焦距和传感器尺寸计算水平和垂直视场角:
FOV_h = 2 × arctan(sensor_width / (2 × f)) // 水平视场角
FOV_v = 2 × arctan(sensor_height / (2 × f)) // 垂直视场角
其中:
f:当前焦距(毫米),取当前实际焦距值sensor_width:传感器宽度(毫米),取自摄像头规格参数sensor_height:传感器高度(毫米),取自摄像头规格参数
1.3 计算单个像素对应的角度
α_per_px_h = FOV_h / imageWidth // 每水平像素对应的角度
α_per_px_v = FOV_v / imageHeight // 每垂直像素对应的角度
1.4 计算目标相对于光轴的角度偏移
Δα_h = dx_px × α_per_px_h // 水平角度偏移(正值为光轴右侧)
Δα_v = dy_px × α_per_px_v // 垂直角度偏移(正值为光轴下方)
步骤二:计算目标到摄像头的水平距离
利用俯仰角和垂直角度偏移,通过三角函数计算目标到摄像头的水平距离。
2.1 计算目标的实际俯仰角
θ_target = θ + Δα_v
其中:
θ:摄像头当前俯仰角真实值(API获取的verticalAbs字段,取值 -180°~180°)Δα_v:目标相对于光轴的垂直角度偏移
注意角度约定(verticalAbs):
verticalAbs取值范围 -180°~180°,具体正负号约定需根据摄像头型号确认- 常见约定:0° = 水平,正值 = 俯视(向下),负值 = 仰视(向上)
- 垂直角度偏移
Δα_v正值 = 画面下方(像素y增大方向)- 实际对接时需验证摄像头
verticalAbs的正负号方向,确保计算正确
2.2 计算水平距离
D = H / tan(|θ_target|) // 水平距离(米)
其中:
H:摄像头安装高度(API获取的cameraHeight)θ_target:目标相对于摄像头的俯仰角
推导过程:
摄像头
● ← 高度 H
/|
/ |
/ | ← 水平距离 D
/ |
/θ_target|
──────────
目标地面位置
tan(θ_target) = H / D
∴ D = H / tan(θ_target)
异常处理:
- 当
θ_target接近0°时(即目标几乎在摄像头正下方),tan值趋近无穷大,距离计算不稳定,需设置最小俯仰角阈值(建议≥3°) - 当
θ_target为负值(仰视方向)时,表示目标在摄像头上方(如飞鸟、无人机),此时无法计算地面距离,标记为"空中目标"
步骤三:计算目标相对于摄像头的方位角
φ_target = φ + Δα_h
其中:
φ:摄像头当前水平偏转角真实值(API获取的horizontalAbs字段,取值 0°~360°)Δα_h:目标相对于光轴的水平角度偏移
步骤四:计算目标的经[坐标已隐藏]坐标
根据方位角和水平距离,在摄像头位置的基础上计算经[坐标已隐藏]偏移。
4.1 计算经[坐标已隐藏]偏移量
ΔLon = D × sin(φ_target) / (111320 × cos(Lat_cam)) // [坐标已隐藏]偏移(度)
ΔLat = D × cos(φ_target) / 111320 // [坐标已隐藏]偏移(度)
其中:
111320:1度[坐标已隐藏]公里(米转度时的系数)cos(Lat_cam):[坐标已隐藏]修正因子,修正[坐标已隐藏]方向的实际距离
**4.2 计算目标经[坐标已隐藏]
Lon_target = Lon_cam + ΔLon
Lat_target = Lat_cam + ΔLat
5.3 算法流程图
开始
│
▼
获取摄像头参数 ──────────────────────┐
(cameraHeight, verticalAbs, │
horizontalAbs, [坐标已隐藏]
zoomValue, focusMax, focusMin, │
sensor_width, sensor_height) │
│
获取AI识别结果 ──────────────────────┤
(px, py, imageWidth, imageHeight)│
│
▼ ▼
参数校验:必需参数是否齐全? ──否──→ 标记"参数缺失"
([坐标已隐藏] 仅记录像素[坐标已隐藏]bs) 不计算经[坐标已隐藏]
│ 结束
是
│
▼
计算像素偏移(dx_px, dy_px) 计算当前焦距f
│
▼ ▼
计算视场角(FOV_h, FOV_v) ──→ 计算角度偏移(Δα_h, Δα_v)
│
▼
计算目标俯仰角 θ_target = θ + Δα_v
│
▼
θ_target 接近 0°? ──是──→ 标记为"正下方目标"
│ 不计算经[坐标已隐藏]
否
│
▼
计算水平距离 D = H / tan(|θ_target|)
│
▼
计算方位角 φ_target = φ + Δα_h
│
▼
计算经[坐标已隐藏]偏移(ΔLon, ΔLat)
│
▼
计算目标经[坐标已隐藏]
Lon_target = Lon_cam + ΔLon
Lat_target = Lat_cam + ΔLat
│
▼
输出结果
结束
5.4 算法参数汇总
| 参数类别 | 参数名 | 来源 | 说明 |
|---|---|---|---|
| 输入参数 | H (cameraHeight) | getChannelInfo | 摄像头安装高度(米) |
| θ (verticalAbs) | getChannelInfo | 当前俯仰角真实值(度,-180~180) | |
| φ (horizontalAbs) | getChannelInfo | 当前水平偏转角真实值(度,0~360) | |
| Lon_cam ([坐标已隐藏] 摄像头[坐标已隐藏] | |||
| Lat_cam ([坐标已隐藏] 摄像头[坐标已隐藏] | |||
| zoomValue | getChannelInfo | 当前放大倍数,用于估算焦距 | |
| sensor_width | 摄像头规格 | 传感器宽度(毫米) | |
| sensor_height | 摄像头规格 | 传感器高度(毫米) | |
| px, py | AI识别结果 | 目标中心像素[坐标已隐藏] | |
| imageWidth, imageHeight | 视频帧属性 | 图像尺寸(像素) | |
| 中间变量 | cx, cy | 计算 | 图像中心[坐标已隐藏] |
| dx_px, dy_px | 计算 | 像素偏移量 | |
| FOV_h, FOV_v | 计算 | 视场角(度) | |
| α_per_px_h, α_per_px_v | 计算 | 每像素对应角度 | |
| Δα_h, Δα_v | 计算 | 角度偏移量(度) | |
| θ_target | 计算 | 目标俯仰角(度) | |
| D | 计算 | 水平距离(米) | |
| φ_target | 计算 | 目标方位角(度) | |
| 输出结果 | Lon_target | 计算 | 目标[坐标已隐藏] |
| Lat_target | 计算 | 目标[坐标已隐藏] |
5.5 算法精度分析
| 影响因素 | 影响程度 | 说明 |
|---|---|---|
| 摄像头高度H误差 | 中 | 高度误差1m,在100m距离处造成约1m定位误差 |
| 俯仰角θ误差 | 高(近景)/ 低(远景) | 近距离目标对角度误差更敏感 |
| 水平偏转角φ误差 | 中 | 100m距离处,1°角度误差造成约1.7m横向偏差 |
| 焦距f误差 | 中 | 影响视场角计算,进而影响角度偏移计算 |
| 目标高度(非地面目标) | 高 | 算法假设目标在地面上,如目标有高度(如烟囱顶部),会产生误差 |
| 地面起伏 | 中 | 算法假设地面平坦,山地丘陵区域误差增大 |
预期精度:
| 目标距离 | 预期定位精度 | 说明 |
|---|---|---|
| 50m以内 | ±3m | 近景,精度较高 |
| 50m-200m | ±5-10m | 中景,主要定位范围 |
| 200m-500m | ±10-30m | 远景,精度下降 |
| 500m以上 | ±30m以上 | 超远距离,仅作粗略定位 |
优化方向:对于高精度需求场景,可采用多点标定法(已知地面控制点反算修正参数)来提升定位精度。
5.6 边界条件与异常处理
| 场景 | 处理方式 |
|---|---|
| θ_target 接近0°(≤3°) | 标记为"正下方",不计算经[坐标已隐藏] |
| θ_target < 0°(仰视方向,需根据verticalAbs正负约定确认) | 标记为"空中目标",不计算地面经[坐标已隐藏] |
| 摄像头参数获取失败 | 仅记录像素坐标,经[坐标已隐藏]字段填"NULL",记录异常日志 |
| zoomValue为0或缺失 | 使用默认焦距 focusMin(最小焦距) |
| 目标超出视场角范围 | 不应出现(AI在画面中检测到的目标必然在视场内) |
| 传感器参数缺失 | 需建立摄像头型号-传感器参数对照表,支持手动配置 |
| verticalAbs/horizontalAbs正负号与预期不符 | 首次对接时需验证角度正方向,必要时在算法中增加符号修正系数 |
| [坐标已隐藏]为 null 且无手动配置值 | 标记为"摄像头参数未配置",仅记录像素坐标,不计算经[坐标已隐藏]界面提示运维人员补充配置 |
| horizontalAbs/verticalAbs/zoomValue 为 null 且无手动配置值 | 标记为"云台状态不可用",可能原因:云台离线、接口未实现、不支持状态回传;仅记录像素坐标,界面提示运维人员检查云台连接 |
6. 数据存储需求
6.1 识别记录表(ai_detection_record)
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | String | 主键UUID |
| channel_code | String | 摄像头通道编码 |
| channel_name | String | 摄像头名称 |
| detect_time | DateTime | 识别时间 |
| detect_type | String | 识别模式(realtime/scheduled/comparison) |
| target_type | String | 目标类别 |
| confidence | Float | 置信度 |
| image_url | String | 识别截图存储路径 |
| bbox_x | Integer | 边界框左上角x[坐标已隐藏] |
| bbox_y | Integer | 边界框左上角y[坐标已隐藏] |
| bbox_width | Integer | 边界框宽度 |
| bbox_height | Integer | 边界框高度 |
| center_px | Integer | 目标中心x像素 |
| center_py | Integer | 目标中心y像素 |
| camera_height | Float | 摄像头高度(米) |
| camera_vertical_abs | Float | 俯仰角真实值(verticalAbs,度) |
| camera_horizontal_abs | Float | 水平偏转角真实值(horizontalAbs,度) |
| camera_[坐标已隐藏]摄像头[坐标已隐藏] | ||
| camera_[坐标已隐藏]摄像头[坐标已隐藏] | ||
| camera_focus | Float | 当前焦距估算值(毫米),通过 zoomValue × focusMin 估算 |
| camera_zoom_value | Float | 当前放大倍数(zoomValue) |
| target_[坐标已隐藏]计算后的目标[坐标已隐藏] | ||
| target_[坐标已隐藏]计算后的目标[坐标已隐藏] | ||
| target_distance | Float | 目标到摄像头的水平距离(米) |
| calc_status | String | 计算状态(success/under_camera/air_target/param_missing/error) |
| calc_error_msg | String | 计算失败原因说明 |
| create_time | DateTime | 记录创建时间 |
6.2 摄像头参数缓存表(camera_param_cache)
| 字段名 | 类型 | 说明 |
|---|---|---|
| channel_code | String | 通道编码(主键) |
| camera_height | Float | 安装高度(米) |
| [坐标已隐藏][坐标已隐藏] | ||
| [坐标已隐藏][坐标已隐藏] | ||
| focus_min | Float | 最小焦距(毫米) |
| focus_max | Float | 最大焦距(毫米) |
| horizontal_min | Float | 水平转动最小角度 |
| horizontal_max | Float | 水平转动最大角度 |
| vertical_min | Float | 垂直转动最小角度 |
| vertical_max | Float | 垂直转动最大角度 |
| sensor_width | Float | 传感器宽度(毫米) |
| sensor_height | Float | 传感器高度(毫米) |
| update_time | DateTime | 参数更新时间 |
7. 接口设计需求
7.1 对内接口(平台内部调用)
7.1.1 获取摄像头参数
接口路径:/api/camera/{channelCode}/params
请求方式:GET
功能说明:获取指定摄像头的安装参数(优先读取缓存,缺失则调用视频监控平台API)
返回内容:
{
"channelCode": "CH001",
"cameraHeight": 30.0,
"[坐标已隐藏]
"[坐标已隐藏]
"installAddress": "XX路XX号",
"currentHorizontalAbs": 180.0,
"currentVerticalAbs": -15.0,
"currentZoomValue": 10,
"focusMax": 180.0,
"focusMin": 6.0,
"sensorWidth": 6.17,
"sensorHeight": 4.55,
"source": "api|cache"
}
7.1.2 目标经[坐标已隐藏]计算
接口路径:/api/ai/geolocate
请求方式:POST
功能说明:根据摄像头参数和AI识别像素坐标,计算目标经[坐标已隐藏]
请求体:
{
"channelCode": "CH001",
"targetPixelX": 640,
"targetPixelY": 360,
"imageWidth": 1920,
"imageHeight": 1080,
"targetType": "fire",
"confidence": 0.95
}
返回内容:
{
"success": true,
"targetLon": 113.9282,
"targetLat": 30.9251,
"distance": 85.3,
"cameraParams": {
"height": 30.0,
"verticalAbs": -15.0,
"horizontalAbs": 180.0,
"zoomValue": 10,
"[坐标已隐藏]
"[坐标已隐藏]
},
"calcStatus": "success",
"precision": "medium" // low/medium/high
}
7.2 对外接口(供前端调用)
7.2.1 查询识别记录(含经[坐标已隐藏]
接口路径:/api/ai/detection/list
请求方式:GET
查询参数:channelCode, target_type, start_time, end_time, page, size
返回内容:分页列表,包含所有识别记录及计算后的经[坐标已隐藏]
7.2.2 获取识别记录详情
接口路径:/api/ai/detection/{id}
请求方式:GET
返回内容:单条识别记录详情,包含完整的计算参数和过程信息
8. 界面展示需求
8.1 识别结果地图标注
| 功能点 | 说明 |
|---|---|
| 地图展示 | 在GIS地图上展示AI识别目标的经[坐标已隐藏]位置标注 |
| 标注样式 | 不同目标类型使用不同图标(火点🔴、工程机械🚜、车辆🚗等) |
| 点击详情 | 点击标注弹出详情面板,显示:目标类型、置信度、识别截图、经[坐标已隐藏]距离、时间 |
| 摄像头位置 | 同时展示摄像头位置,用连线表示"摄像头→目标"的方向 |
8.2 识别结果列表
| 列 | 说明 |
|---|---|
| 时间 | 识别时间 |
| 摄像头 | 摄像头名称 |
| 目标类型 | 识别出的目标类别 |
| 置信度 | AI识别置信度 |
| 经[坐标已隐藏]计算出的目标经[坐标已隐藏]可点击跳转地图) | |
| 距离 | 目标到摄像头的水平距离 |
| 状态 | 定位状态(成功/失败原因) |
| 操作 | 查看截图、地图定位、云台转向 |
8.3 定位精度标记
| 状态 | 标记方式 | 说明 |
|---|---|---|
| 精确定位 | 绿色定位图标 | 距离<100m,精度较高 |
| 中等精度 | 黄色定位图标 | 距离100-300m,精度一般 |
| 粗略定位 | 橙色定位图标 | 距离>300m,仅供参考 |
| 计算失败 | 灰色标记 | 参数缺失或异常,未计算出经[坐标已隐藏] |
9. 非功能需求
9.1 性能要求
| 指标 | 要求 |
|---|---|
| 经[坐标已隐藏]计算响应时间 | ≤50ms(单目标) |
| 批量计算(≤100目标) | ≤500ms |
| 摄像头参数获取响应时间 | ≤1秒(含网络请求) |
| 参数缓存命中率 | ≥95%(减少API调用频率) |
9.2 可靠性要求
| 项目 | 要求 |
|---|---|
| 参数获取失败 | 不影响AI识别,仅经[坐标已隐藏]字段为空 |
| 计算异常 | 记录详细错误日志,不中断主流程 |
| 缓存降级 | API不可用时使用缓存参数计算,标注"使用缓存参数" |
| 数据一致性 | 经[坐标已隐藏]计算与AI识别必须使用同一时刻的摄像头参数 |
9.3 扩展性要求
| 项目 | 说明 |
|---|---|
| 算法可替换 | 定位算法封装为独立模块,支持未来替换为更复杂的针孔模型或单应性矩阵法 |
| 参数来源可扩展 | 除API获取外,支持手动录入和批量导入摄像头参数 |
| 多坐标系支持 | 初始支持WGS84坐标系,预留其他坐标系转换接口 |
10. 附录
附录A:术语表
| 术语 | 英文 | 说明 |
|---|---|---|
| 俯仰角 | Pitch/Elevation | 光轴与水平面之间的夹角,向下为正(约定) |
| 水平偏转角 | Azimuth/Pan | 光轴水平投影方向与参考方向(正北)的夹角 |
| 视场角 | FOV (Field of View) | 摄像头能拍摄到的最大水平/垂直角度范围 |
| 焦距 | Focal Length | 镜头光学中心到传感器平面的距离 |
| 传感器 | Sensor | 摄像头感光元件,其尺寸影响视场角 |
| bounding box | BBox | AI模型输出的目标边界框,用(x,y,width,height)表示 |
| 三角测量法 | Triangu[坐标已隐藏]利用已知边长和角度,通过三角函数计算未知距离的方法 |
附录B:常见摄像头传感器参数参考
| 摄像头类型 | 传感器尺寸(宽×高,mm) | 典型焦距范围 |
|---|---|---|
| 1/3" CMOS | 4.8 × 3.6 | 2.8mm - 12mm |
| 1/2.8" CMOS | 5.14 × 3.89 | 2.7mm - 12mm |
| 1/2" CMOS | 6.4 × 4.8 | 2.8mm - 12mm |
| 1/1.8" CMOS | 7.18 × 5.32 | 4mm - 50mm |
| 高点快球(典型) | 6.17 × 4.55 | 6mm - 180mm |
注意:实际传感器尺寸需以摄像头设备规格书为准,以上为常见参考值。
附录C:算法验证方案
| 验证方式 | 说明 |
|---|---|
| 已知点验证 | 在摄像头视野中选择已知经[坐标已隐藏]的地面标志物(如路口、建筑物),AI识别后对比计算结果 |
| 多点验证 | 在不同距离(50m/100m/200m/500m)选择验证点,统计误差分布 |
| 不同角度验证 | 在不同俯仰角(0°~-30°)下验证计算一致性 |
| 批量验证报告 | 输出验证报告,包含误差均值、标准差、最大误差等统计指标 |
文档编制:华中业务中心·开发与技术支持部 编制日期:2026年6月3日 版本历史:
- V1.0(2026-06-03):初稿,包含算法设计、API对接、数据存储等完整需求