AI Function实现视频检索分析最佳实践

更新时间:
复制 MD 格式

本文介绍基于 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 的多种安全能力无缝集成,高效保护数据安全。

方案流程介绍

本次方案的流程如下:

  1. 数据集准备:将视频数据上传至 OSS 存储。

  2. 视频加工:使用 Object Table 读取视频的元数据信息,然后创建 Dynamic Table 对数据进行 embed,并设置刷新模式为增量刷新;同时对 Dynamic Table 构建向量索引,以便后续检索使用索引能力。

  3. 使用 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(深圳)和新加坡。

  1. 购买 AI 模型资源。

    前往 AI 模型资源购买页 购买 Hologres AI 模型资源。托管模型采用按量付费模式,购买时请选择与 Hologres 实例相同的 Region,确保资源与实例在同一地域。具体操作,请参见托管模型。

  2. 部署托管模型。

    在实例详情页面,在左侧导航栏选择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字内)等结构化输出,用于事后复盘与风险治理。