本文介绍基于 Hologres AI Function 与多模态能力,实现海量监控视频的快速检索与混合分析的最佳实践,适用于安防、城市治理、加油站/商超等场景。
方案概述
场景介绍
在安防、城市治理、加油站/商超等场景中,通常会部署大量监控摄像头,每天都在产生持续增长的海量多模数据,以视频为主,围绕这些数据典型的业务诉求包括:
案件追溯:快速在海量监控中定位“抢劫、盗窃、斗殴、肇事逃逸”等异常事件相关视频;
治安巡查:针对重点区域(如加油站、便利店、ATM 旁)进行事后抽查和风险梳理;
交通治理:根据描述(如“十字路口逆行”“行人闯红灯造成事故”)快速定位相关视频片段;
事故分析与研判:按“场景+行为”检索视频,用于事后复盘、安全培训和风险评估。
传统的视频检索方式主要依赖:人工回看监控视频,效率极低;或者简单的时间段/摄像头维度检索,难以按“语义”快速定位目标片段,导致检索效率慢、无法支撑多模数据的综合分析等。
在这样的多模数据混合分析的需求驱动下,基于 Hologres AI Function 调用大模型,实现海量监控视频的快速检索与混合分析。
产品核心能力介绍
本次最佳实践主要实现对音频、视频加工与多模检索分析,包含的主要能力如下:
托管模型:Hologres 提供托管模型服务,支持在 Hologres 管理控制台直接购买 AI 节点资源并部署模型,无需依赖外部模型平台或配置 API Key,即可在 SQL 中通过 AI Function 调用模型能力。
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 模型资源,再前往Hologres管理控制台部署托管模型。
托管模型功能要求 Hologres 实例版本为 4.0.40 及以上、4.1.26 及以上、4.2.5 及以上或 5.0 及以上。当前支持地域为华北2(北京)、华东2(上海)、华东1(杭州)、华南1(深圳)和新加坡。
购买 AI 模型资源。
前往 AI 模型资源购买页 购买 Hologres AI 模型资源。托管模型采用按量付费模式,购买时请选择与 Hologres 实例相同的 Region,确保资源与实例在同一地域。具体操作,请参见托管模型。
部署托管模型。
在实例详情页面,在左侧导航栏选择AI模型,进入模型管理页面,单击部署模型。在弹窗中,模型提供方选择Hologres 托管模型,根据业务需求选择模型类别(支持一次选择多个模型同时部署),为每个模型设置相关参数(一般使用默认参数即可)并配置模型重试机制,单击确认完成部署。详细操作,请参见托管模型。
本次最佳实践需要部署以下两个模型:
qwen3-vl-embedding:用于对视频进行 embedding。
qwen3.7-plus:用于生成文字描述。
本文示例中使用的模型名称(如 qwen3-vl-embedding、qwen3.7-plus)均为在 Hologres 控制台中配置的部署名称,请根据您实际部署的模型名称进行替换。您可以通过以下 SQL 查询当前实例中已部署的模型列表:
SELECT * FROM pg_catalog.hg_ai_models;步骤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.7-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.7-plus', prompt('请根据每个视频的描述,汇总相关内容生成一个安防报告,同时给出治理建议,控制在200字左右:{0}', array_agg(vedio_desc))) FROM dt_snatching_video;可得到安防报告汇总与治理建议(200字内)等结构化输出,用于事后复盘与风险治理。