新增AIoT边缘智能模块:摄像头ROI配置、算法管理、配置推送
- 后端:新增aiot模块(bean/dao/service/controller),支持ROI区域CRUD、 算法注册表管理、ROI-算法绑定、配置推送到FastAPI边缘端、变更日志 - 前端:新增摄像头配置页(列表+ROI子页面)、算法配置页、Canvas绘图组件 (矩形/多边形)、动态算法参数编辑器、ZLM截图作为ROI编辑背景 - 数据库:新建4张表(wvp_ai_roi/algorithm/roi_algo_bind/config_log) 字段与FastAPI端SQLite兼容,含2个预置算法 - 路由裁剪:隐藏无关菜单(地图/部标/推流/录制计划等) - 修复cameraId含/导致REST路径解析错误(改用query参数) - 新增ai.service配置项(边缘端地址/超时/开关) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
23
web/src/api/aiAlgorithm.js
Normal file
23
web/src/api/aiAlgorithm.js
Normal file
@@ -0,0 +1,23 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function queryAlgorithmList() {
|
||||
return request({
|
||||
method: 'get',
|
||||
url: '/api/ai/algorithm/list'
|
||||
})
|
||||
}
|
||||
|
||||
export function toggleAlgorithmActive(id, isActive) {
|
||||
return request({
|
||||
method: 'post',
|
||||
url: `/api/ai/algorithm/toggle/${id}`,
|
||||
params: { isActive }
|
||||
})
|
||||
}
|
||||
|
||||
export function syncAlgorithmsFromEdge() {
|
||||
return request({
|
||||
method: 'post',
|
||||
url: '/api/ai/algorithm/sync'
|
||||
})
|
||||
}
|
||||
26
web/src/api/aiConfig.js
Normal file
26
web/src/api/aiConfig.js
Normal file
@@ -0,0 +1,26 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function pushConfig(cameraId) {
|
||||
return request({
|
||||
method: 'post',
|
||||
url: '/api/ai/config/push',
|
||||
params: { cameraId }
|
||||
})
|
||||
}
|
||||
|
||||
export function exportConfig(cameraId) {
|
||||
return request({
|
||||
method: 'get',
|
||||
url: '/api/ai/config/export',
|
||||
params: { cameraId }
|
||||
})
|
||||
}
|
||||
|
||||
export function queryConfigLogs(params) {
|
||||
const { page, count, configType, configId } = params
|
||||
return request({
|
||||
method: 'get',
|
||||
url: '/api/ai/log/list',
|
||||
params: { page, count, configType, configId }
|
||||
})
|
||||
}
|
||||
64
web/src/api/aiRoi.js
Normal file
64
web/src/api/aiRoi.js
Normal file
@@ -0,0 +1,64 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function queryRoiList(params) {
|
||||
const { page, count, cameraId, deviceId, query } = params
|
||||
return request({
|
||||
method: 'get',
|
||||
url: '/api/ai/roi/list',
|
||||
params: { page, count, cameraId, deviceId, query }
|
||||
})
|
||||
}
|
||||
|
||||
export function queryRoiDetail(id) {
|
||||
return request({
|
||||
method: 'get',
|
||||
url: `/api/ai/roi/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
export function queryRoiByCameraId(cameraId) {
|
||||
return request({
|
||||
method: 'get',
|
||||
url: '/api/ai/roi/channel',
|
||||
params: { cameraId }
|
||||
})
|
||||
}
|
||||
|
||||
export function saveRoi(data) {
|
||||
return request({
|
||||
method: 'post',
|
||||
url: '/api/ai/roi/save',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteRoi(roiId) {
|
||||
return request({
|
||||
method: 'delete',
|
||||
url: `/api/ai/roi/delete/${roiId}`
|
||||
})
|
||||
}
|
||||
|
||||
export function bindAlgo(data) {
|
||||
return request({
|
||||
method: 'post',
|
||||
url: '/api/ai/roi/bindAlgo',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function unbindAlgo(bindId) {
|
||||
return request({
|
||||
method: 'delete',
|
||||
url: '/api/ai/roi/unbindAlgo',
|
||||
params: { bindId }
|
||||
})
|
||||
}
|
||||
|
||||
export function updateAlgoParams(data) {
|
||||
return request({
|
||||
method: 'post',
|
||||
url: '/api/ai/roi/updateAlgoParams',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
30
web/src/api/cameraConfig.js
Normal file
30
web/src/api/cameraConfig.js
Normal file
@@ -0,0 +1,30 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function queryCameraList(params) {
|
||||
const { page, count, query, pulling, mediaServerId } = params
|
||||
return request({
|
||||
method: 'get',
|
||||
url: '/api/proxy/list',
|
||||
params: { page, count, query, pulling, mediaServerId }
|
||||
})
|
||||
}
|
||||
|
||||
export function startCamera(id) {
|
||||
return request({
|
||||
method: 'get',
|
||||
url: '/api/proxy/start',
|
||||
params: { id }
|
||||
})
|
||||
}
|
||||
|
||||
export function stopCamera(id) {
|
||||
return request({
|
||||
method: 'get',
|
||||
url: '/api/proxy/stop',
|
||||
params: { id }
|
||||
})
|
||||
}
|
||||
|
||||
export function getSnapUrl(cameraId) {
|
||||
return `/api/ai/roi/snap?cameraId=${encodeURIComponent(cameraId)}`
|
||||
}
|
||||
Reference in New Issue
Block a user