AI 监测功能指南
AI 监测功能是基于视觉识别模型的智能安全检测系统,通过上传工作场所图片,自动识别安全风险并生成分析报告。系统支持工地安全检测、区域管理等多种场景。
💡核心能力
支持图片上传分析、智能风险识别、可视化标注、多级别检测配置等功能
快速开始
模型准备
系统使用视觉模型进行图像分析,推荐使用支持多模态的大语言模型- Qwen-VL 系列,确保具备图像理解和风险识别能力。
使用流程
- 访问 AI 监测页面
- 配置检测参数(选择模型、设置安全级别)
- 上传工作场所图片(支持 PNG、JPG、WEBP,最大 5MB)
- 点击"分析风险"按钮
- 查看可视化分析结果
分析结果
系统返回结构化分析结果,包含:
- 场景识别 - 判断是否为目标场景(如工地场景)
- 风险列表 - 识别出的安全隐患及详细描述
- 风险等级 - HIGH(高风险)/ MEDIUM(中风险)/ LOW(低风险)
- 位置标注 - 风险区域的坐标信息(矩形或多边形)
- 控制措施 - 针对每个风险的整改建议
技术架构
前端实现
前端页面位于 pigx-ui-pro/src/views/knowledge/aiSecurity/,采用 Vue 3 Composition API 实现。
核心组件
主页面 (index.vue)
// 分析图片的核心方法
const analyzeImage = async () => {
const requestParams: AnalyzeImageRequest = {
imageBase64: uploadedImage.value,
modelName: Local.get('selectedAiModel:Vision')?.name,
securityLevel: securityLevel.value,
}
const { data } = await analyzeImageApi(requestParams)
const backendData: BackendAnalysisResult = JSON.parse(data)
analysisResult.value = backendData
}
ImageVisualizer 组件 (components/ImageVisualizer.vue)
负责图片可视化展示,支持两种模式:
- 区域标记模式 - 在风险区域绘制矩形/多边形边框
- 热力图模式 - 使用渐变颜色显示风险密度
// 绘制热力图
const drawHeatmap = () => {
const ctx = canvas.getContext('2d')
props.hazards?.forEach(hazard => {
const region = props.regions?.find(r => r.id === hazard.id)
const centerX = (region.x + region.w / 2) * imageWidth.value
const centerY = (region.y + region.h / 2) * imageHeight.value
const gradient = ctx.createRadialGradient(/* ... */)
// 根据风险等级设置颜色
ctx.fillStyle = gradient
ctx.fill()
})
}
AnalysisResults 组件 (components/AnalysisResults.vue)
展示分析结果列表,支持:
- 风险项折叠展开
- 鼠标悬停高亮对应区域
- 按风险等级筛选
- 统计各等级风险数量
API 接口定义
// src/api/knowledge/aiSecurity.ts
export interface AnalyzeImageRequest {
imageBase64?: string // Base64 编码的图片
modelName: string // 模型名称
securityLevel?: string // 安全级别 1-低 3-中 5-高
}
export interface BackendAnalysisResult {
caption: string // 图像描述
isConstructionScene: boolean // 是否工地场景
hazards: Array<{
id: string // 风险ID H1, H2...
hazard: string // 风险描述
risk: {
severity: 'HIGH' | 'MEDIUM' | 'LOW'
reason: string // 风险原因
}
decide_controls: string[] // 控制措施
}>
regions: Array<{
id: string // 对应风险ID
shape: 'rect' | 'poly' // 形状类型
x?: number, y?: number // 矩形左上角坐标(0-1)
w?: number, h?: number // 矩形宽高(0-1)
points?: number[][] // 多边形顶点坐标
}>
}
后端实现
后端服务位于 pigx-knowledge 模块,核心流程如下。
请求处理流程
graph LR
A[前端上传图片] --> B[AiCompletionsController]
B --> C[AiCompletionsService]
C --> D[PromptBuilder渲染提示词]
D --> E[构建多模态消息]
E --> F[调用视觉模型]
F --> G[JSONRepairUtil修复JSON]
G --> H[返回结构化结果]
核心代码
控制器 (AiCompletionsController.java)
@PostMapping("/image/analyze")
public R analyzeImage(@RequestBody AiImageVisionDTO imageVisionDTO) {
return completionsService.visionAnalyze(imageVisionDTO);
}
服务层 (AiCompletionsServiceImpl.java)
public R visionAnalyze(AiImageVisionDTO imageVisionDTO) {
// 获取视觉模型
ChatModel chatModel = modelProvider.getAiVisionAssistant().getKey();
// 构建系统消息
SystemMessage systemMessage = SystemMessage.from(
PromptBuilder.render(OCR_IMAGE_SECURITY_SYSTEM)
);
// 构建用户消息(图片 + 文本)
UserMessage imageMessage = UserMessage.from(
ImageContent.from(imageVisionDTO.getImageBase64()),
TextContent.from(
PromptBuilder.render(OCR_IMAGE_SECURITY_USER,
Map.of("securityLevel", imageVisionDTO.getSecurityLevel())
) + PromptBuilder.render(OCR_IMAGE_SECURITY_USER_SCHEMA)
)
);
// 调用模型
ChatResponse response = chatModel.chat(systemMessage, imageMessage);
// 修复并返回 JSON
return R.ok(JSONRepairUtil.repair(response.aiMessage().text()));
}
⚠JSON 修复
由于大模型返回的 JSON 可能格式不规范,系统使用 JSONRepairUtil 自动修复格式错误
进阶配置
安全级别调整
安全级别控制检测的严格程度,通过 securityLevel 参数配置:
| 级别 | 值 | 说明 |
|---|
| 低 | 1 | 宽松检测,识别最高风险的1个问题 |
| 中 | 3 | 标准检测,识别最高风险的3个问题 |
| 高 | 5 | 严格检测,识别最高风险的5个问题 |
自定义检测场景
通过修改提示词模板,可以将系统应用到不同场景。
示例:停车违章检测
修改用户提示词:
请分析图像中的停车违章行为:
1. 车辆是否压线停放
2. 是否占用消防通道
3. 是否停在禁停区域
4. 车牌是否清晰可见
识别风险程度最高的{securityLevel}个违章行为...
示例:食品安全检测
修改用户提示词:
请分析厨房环境的食品安全风险:
1. 工作人员是否佩戴口罩、手套
2. 厨房环境是否整洁
3. 食材存放是否规范
4. 消毒设备是否到位
识别风险程度最高的{securityLevel}个安全隐患...
⚠提示词修改注意事项
修改提示词时,必须保持 JSON Schema 的输出格式一致,否则前端无法正确解析结果