本文概述了通过自带 AI 模型启用的 Azure AI 视频索引器。
简介
你可以合并来自其他来源(包括第三方、分类和检测模型)的见解,以对媒体数据进行详细分析。 可以使用 Microsoft 提供的任何一个或多个模型、从外部来源获取的自定义模型,或 Azure 视频索引器提供的自定义人员、品牌、语音或语言模型。
此功能也适用于 Arc 启用的 VI。
注释
免责声明:Microsoft的 Azure OpenAI 服务的行为准则 适用于你使用自带模型功能,Microsoft有权因不合规而停止你对该功能的访问和使用。
定价
使用视频索引器的BYO模型,您可以将自定义的见解添加到视频见解对象中,而无需支付除索引过程列出的成本之外的额外费用。 但是,与外部环境和模型相关的任何成本不应被视为视频索引器的计费价格的一部分。 强烈建议查看最佳做法部分,以优化外部逻辑并降低成本。
常规工作流
- 视频是使用 Azure AI 视频索引器上传和编制索引的。
- 索引过程完成后,将创建事件。
- 自定义代码侦听事件并启动视频后处理过程。
先决条件
在开始将 BYO 模型功能与 Azure AI 视频索引器配合使用之前,必须:
- 训练或引入用于接收视频资产并返回见解的外部 AI 模型。
- 创建自定义代码,该代码:
- 侦听 Event Hubs 事件。
- 从
video id
事件中提取数据。 - 通过调用 VI API 检索相关资产。 在此方案中,请求 获取视频索引 和 获取帧 SAS URL。
- 将资产发送到外部 AI 模型。
- 基于从自定义 AI 模型检索到的见解创建 JSON 对象。
- 请求修补程序更新视频索引。
架构
用于填充自定义数据的值如下所示:
名称 | 描述 | 必需 |
---|---|---|
名字 | 外部 AI 模型名称 | 是 |
显示名称 | 要显示在视频索引器中的见解组名称 | 是 |
displayType | 定义此特定见解组的 UI 表示形式类型。
默认值:胶囊 可能的类型: 胶囊 - 仅一级文本 CapsuleAndTags-目前只有两个级别的文本,未来会增加更多。 |
假 |
结果 | 表示外部 AI 模型检测到的见解的对象数组 | 是 |
results.id | 用户提供的结果对象的 ID 在结果范围内应是唯一的 | 是 |
results.type | 此字段表示由外部 AI 模型分类的见解类型。 它用于表示一般见解类别,这意味着特定帧中可能存在此类型的多个见解。 见解类型的示例包括: basketball 、 crowd clapping 、 white shirt 。 |
是 |
results.subType | 此字段表示由外部 AI 模型分类的见解类型。 它用于表示特定见解类别,这意味着只能在特定帧中识别此类型的单个见解。 见解类型的示例包括: basketball #23 、 John clapping 、 Dana’s white shirt 。 |
假 |
results.metaData | 有关见解的更多数据 | 假 |
results.instances | 表示洞察被检测到的时间窗口的数组。 | 是 |
results.instances.confidence | 使用从外部模型返回的置信度分数进行设置 | 假 |
results.instances.start | 视频中实例的开始时间。 格式:hh.mm.ss.ff |
假 |
results.instances.end | 视频中实例的结束时间。 格式:hh.mm.ss.ff |
假 |
results.instances.adjustedStart | 在 UI 中显示时使用,使用“开始”中的值进行设置 | 假 |
results.instances.adjustedEnd | 在 UI 中显示时使用,使用 End 中的值进行设置 | 假 |
帧速率
Azure AI 视频索引器支持一个 FPS,用于基本/标准视频级别,4 FPS 用于高级级别。 不支持更高的帧速率。 可以通过以下方法优化索引编制:
- 仅处理特定感兴趣的片段,例如包含检测到的声音、物体或人员的帧或
- 例如,每隔 5 秒采样一次较低的 FPS。
框架选择
可以使用跳过帧和页面大小参数进行时间选择。 公式是跳过帧值乘以 FPS 加上页大小值乘以 FPS 的结果,用于确定时间范围。
URL:https://api.videoindexer.ai/{location}/Accounts/{accountId}/Videos/{videoId}/FramesFilePaths[?urlsLifetimeSeconds][&pageSize][&skip][&accessToken]
参数:
名称 | 描述 | 必需 |
---|---|---|
videoId | 视频的 ID | 是 |
urlsLifetimeSeconds | URL 的生存期(以秒为单位) | 是 |
pageSize | 每次调用返回的帧数上限 | 假 |
跳过 | 要跳过的帧数 | 假 |
accessToken | 应在 URL 查询字符串中作为参数提供,或在 Authorization 标头中作为 Bearer 令牌提供。 访问令牌范围应为“帐户”,权限应为“读取者”。 | 是 |
响应:FrameFilePathsResult
名称 | 描述 | 必需 |
---|---|---|
结果 | FrameUriData 列表 | 假 |
NextPage | 分页数据 (skip,pageSize,isDone) | 假 |
FrameFilePathData
名称 | 描述 |
---|---|
名字 | 帧文件的名称 |
frameIndex | 框架的索引 |
StartTime | 视频中帧的开始时间 |
EndTime | 视频中帧的结束时间 |
filePath | 云环境中帧的 Sas URI 或边缘环境中的文件路径 |
以架构格式从自定义应用程序发送的示例数据
"customInsights": [
{
"Name": "tattoo",
"displayName": "Tattoo’s model",
"displayType": "CapsuleAndTag",
"Results": [
{
"id": 1,
"Type": "Dragon",
"WikiDataId": "57F",
"SubType": "Leg tattoo",
"Metadata": "",
"Instances": [
{
"Confidence": 0.49,
"AdjustedStart": "0:00:32.72",
"AdjustedEnd": "0:00:42.72",
"start": "0:00:32.72",
"end": "0:00:42.72",
}
]
}
]
}...