本文介绍基于 Hologres AI Function 与多模态能力,实现海量监控视频的快速检索与混合分析的最佳实践,适用于安防、城市治理、加油站/商超等场景。
方案概述
场景介绍
在安防、城市治理、加油站/商超等场景中,通常会部署大量监控摄像头,每天都在产生持续增长的海量多模数据,以视频为主,围绕这些数据典型的业务诉求包括:
-
案件追溯:快速在海量监控中定位“抢劫、盗窃、斗殴、肇事逃逸”等异常事件相关视频;
-
治安巡查:针对重点区域(如加油站、便利店、ATM 旁)进行事后抽查和风险梳理;
-
交通治理:根据描述(如“十字路口逆行”“行人闯红灯造成事故”)快速定位相关视频片段;
-
事故分析与研判:按“场景+行为”检索视频,用于事后复盘、安全培训和风险评估。
传统的视频检索方式主要依赖:人工回看监控视频,效率极低;或者简单的时间段/摄像头维度检索,难以按“语义”快速定位目标片段,导致检索效率慢、无法支撑多模数据的综合分析等。
在这样的多模数据混合分析的需求驱动下,基于 Hologres AI Function 调用大模型,实现海量监控视频的快速检索与混合分析。
产品核心能力介绍
本次最佳实践主要实现对音频、视频加工与多模检索分析,包含的主要能力如下:
-
百炼:阿里云百炼是一站式大模型开发与应用平台,集成了千问及主流第三方模型。它为开发者提供了兼容 OpenAI 的 API 及全链路模型服务;本次最佳实践中提供模型能力,由 Hologres 直接调用。
-
Object Table:支持通过表的形式读取 OSS 中非结构化数据。
-
AI Function:在 Hologres 中可以用标准 SQL 的方式调用 Function,通过调用百炼大模型,完成 AI 服务建设场景。
-
数据加工:提供 Embed 算子,可以对非结构化数据加工成结构化数据存储,无需使用外部算法就能自动 embed。
-
数据检索和分析:提供 ai_gen、ai_summarize 等算子,使用 SQL 就能对数据进行推理、问题总结、翻译等能力。
-
-
Dynamic Table:支持增量刷新模式对非结构化数据自动加工,每次只计算增量数据,有效减少重复计算,降低资源利用率。
-
向量检索:支持标准 SQL 的向量检索,用于非结构化数据的相似度搜索、场景识别等,在同一个查询中可以自由实现向量+标量的检索。
-
全文检索:通过倒排索引、分词等机制实现对非结构化数据的高效检索,支持关键词匹配、短语检索等丰富的检索方式。
方案优势
通过如上核心能力,在 Hologres 中对音频、视频检索的核心优势如下:
-
把视频“变成可检索的数据资产:通过多模态大模型将视频转换成向量(embedding),把原本“只能看不能算”的视频数据,变成可计算、可检索、可分析的结构化/半结构化数据,并支持自然语言检索。
-
统一存储与计算平台:视频可以与其他结构化数据统一接入同一个 Hologres 大数据平台,多模数据混合分析。
-
显著提升检索效率与准确性:不需要通过人工方式检索,通过自然语言等多模形式实现对视频的检索与分析,大幅降低人力消耗,提高案件处理、事故研判的效率。
-
数据不出库,更安全:不需要将数据导出到外部系统,与 Hologres 的多种安全能力无缝集成,高效保护数据安全。
方案流程介绍
本次方案的流程如下:
-
数据集准备:将视频数据上传至 OSS 存储。
-
视频加工:使用 Object Table 读取视频的元数据信息,然后创建 Dynamic Table 对数据进行 embed,并设置刷新模式为增量刷新;同时对 Dynamic Table 构建向量索引,以便后续检索使用索引能力。
-
使用 ai_embed 算子将自然语言问题进行 embedding,然后使用向量检索输出 Top N 的结果。
方案步骤
步骤1:导入视频数据至 OSS
本次最佳实践准备了多个监控视频,视频内容为各个场景(如商店、加油站等)下的抢劫行为。请将视频上传至 OSS,用于后续的视频检索分析。
步骤2:为账号准备 RAM 角色并授权
需要为账号准备一个 RAM 角色,并授予相关权限,才能读取 OSS 中的文件。
-
为 RAM 角色授予 OSS 的 AliyunOSSReadOnlyAccess 权限。
-
为 RAM 角色授予 Hologres 的相关权限,信任策略示例代码如下。
如果是子账号,请前往 Object Table 文档查看授权操作。
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"RAM": [
"acs:ram::1866xxxx:root"
],
"Service": [
"hologres.aliyuncs.com"
]
}
}
],
"Version": "1"
}
步骤3:部署百炼模型
前往 Hologres管理控制台,在实例详情 > AI模型 中部署百炼模型。本次最佳实践部署的模型为 qwen3-vl-embedding 和 qwen3-vl-plus。
步骤4:对视频进行 embedding
需要创建 Object Table 和 Dynamic Table 读取视频元数据,并对视频进行 embedding。示例代码如下。
-- 创建 Object Table
CREATE OBJECT TABLE public.obj_snatching_video
WITH (
path = 'oss://xxx/SNACHING/', -- 必填
oss_endpoint = 'oss-cn-beijing-internal.aliyuncs.com', -- 必填
role_arn = 'acs:ram::1055323xxxx:role/xxx' -- 必填
);
-- 刷新 Object Table
SET hg_computing_resource = 'serverless';
REFRESH OBJECT TABLE public.obj_snatching_video;
-- 创建 Dynamic Table
CREATE DYNAMIC TABLE dt_snatching_video
(
CHECK(array_ndims(embedding_vector) = 1 AND array_length(embedding_vector, 1) = 2560)
)
WITH (
vectors = '{
"embedding_vector": {
"algorithm": "HGraph",
"distance_method": "Cosine",
"builder_params": {
"base_quantization_type": "sq8_uniform",
"max_degree": 64,
"ef_construction": 400,
"precise_quantization_type": "fp32",
"use_reorder": true
}
}
}',
auto_refresh_mode = 'incremental',
freshness = '5 minutes',
auto_refresh_enable = 'false'
) AS
SELECT
object_uri,
etag,
ai_embed('qwen3_vl_embedding', file) AS embedding_vector,
ai_gen('qwen3_vl_plus','请以安防分析的角度,简要描述这段监控视频的内容,并重点说明是否存在明显的抢劫行为、参与人数和大致过程,包含事件发生的时间、地点', file) AS vedio_desc
FROM public.obj_snatching_video;
-- 刷新 Dynamic Table
SET hg_computing_resource = 'serverless';
REFRESH DYNAMIC TABLE public.dt_snatching_video;
步骤5:视频检索与分析
视频处理完成后,可以在 Hologres 中使用 AI Function 对视频进行检索与多模分析。
以文搜视频示例 SQL:
-- 以文搜视频
SELECT
object_uri,
approx_cosine_distance (
embedding_vector,
ai_embed ('qwen3_vl_embedding', '加油站发生了抢劫')) AS score
FROM
public.dt_snatching_video
ORDER BY
score DESC
LIMIT 2;
示例返回:
object_uri | score
---------------------------------------------------------------+--------
oss://xxxx/SNACHING/Snatching (20).mp4 | 0.412422508
视频总结示例 SQL:
SELECT ai_gen('qwen3_vl_plus', prompt('请根据每个视频的描述,汇总相关内容生成一个安防报告,同时给出治理建议,控制在200字左右:{0}', array_agg(vedio_desc))) FROM dt_snatching_video;
可得到安防报告汇总与治理建议(200字内)等结构化输出,用于事后复盘与风险治理。