内页banner>

联系方式

当前位置: 首页 > 新闻中心

新闻中心 News

联系我们Contact Us

飞鱼加速器(中国)官方网站|飞鱼加速器

电话:13594780107

联系人:周经理

邮箱:addictive@hotmail.com

网址:https://www.ghcyd.com

地址:泉州市刊舌入口209号

实现无服务器的图像和实时视频的语义搜索,使用亚马逊 Titan 多模态嵌入 机器学习博客

2026-01-27 13:59:14
31次

无服务器图像和实时视频的语义搜索实现

关键要点

视频数据的重要性:各行各业通过装置在仓库、诊所、道路等场所的摄像头,积累了大量视频数据。这些数据可用于分析和监控潜在的事件,提高安全性和效率。语义搜索的优势:通过将视频数据与可搜索的索引相结合,我们可以使用自然语言描述来查找视频中的事件,如“仓库火灾”或“地板上的破碎玻璃”。应用Amazon Titan多模态嵌入模型:此模型能够将视觉和文本数据映射到相同的语义空间,从而支持语义搜索。架构方案:构建一个使用Amazon Kinesis Video Streams、Amazon Titan多模态嵌入模型和Amazon OpenSearch Service的无服务器端到端语义搜索管道。

在今天这个数据驱动的世界,各个行业都通过在仓库、医生诊所、道路、地铁站、商店、工厂甚至私人设施中安装的摄像头积累了大量视频数据。这些视频数据在分析和监控潜在事件方面具有巨大的潜力,例如火灾、设备故障、盗窃或事故。有效分析和理解这些视频数据,可以显著提高企业及个人的安全性、效率和盈利能力。

这类数据与可搜索的索引结合时能够衍生出有价值的见解。然而,传统的视频分析方法往往依赖手动和劳动密集型的流程,这使得高效拓展成为了一个挑战。在本文中,我们将介绍一种语义搜索技术,可以根据自然语言描述找到视频中的事件。例如,你可以搜索“仓库火灾”或“地板上的破碎玻璃”。这正是多模态嵌入发挥作用的地方。我们将介绍Amazon Titan多模态嵌入模型的使用,它能够将视觉及文本数据映射到同一语义空间,允许用户利用文本描述查找包含这些语义含义的图像。这种语义搜索技术能使您更有效地分析和理解视频数据中的帧。

接下来,我们将通过使用Amazon Kinesis Video Streams、Amazon Titan多模态嵌入模型和Amazon OpenSearch Service,逐步构建一个可扩展的无服务器监控视频语义搜索管道。Kinesis Video Streams能安全地将视频从连接的设备流式传输到AWS,以便于分析、机器学习ML、播放和其他处理。它实现了实时视频的摄取、存储、编码和跨设备的流式处理。Amazon Bedrock是一个完全托管的服务,通过单一API提供访问多种来自领先AI公司的高性能基础模型的能力,支持安全、隐私及负责任的AI应用的构建。通过Amazon Bedrock提供的Amazon Titan多模态嵌入模型可以实现更准确及上下文相关的多模态搜索。它能够处理和生成来自文本和图像等不同数据类型的信息,您可以提交文本、图像或两者的组合作为输入,利用模型对多模态内容的理解。OpenSearch Service是一个完全托管的服务,使得部署、扩展和操作OpenSearch变得简单。它允许您在索引中存储向量和其他数据类型,并在搜索数十亿个向量时提供毫秒级查询延迟,并测量语义关系,这正是我们在本文中使用的。

我们还讨论了如何平衡功能、准确性和预算,并提供了一些示例代码片段和GitHub仓库,以便您可以开始构建自己的原型语义搜索解决方案。

解决方案概述

解决方案包含以下三个组件:

提取视频帧:使用Kinesis Video Streams提取实时流的帧您也可以选择使用AWS Lambda函数提取上传视频文件的帧。这些帧可以作为文件存储在Amazon简单存储服务Amazon S3存储桶中,以便后期处理、检索和分析。生成嵌入:使用Amazon Titan多模态嵌入模型生成帧的嵌入。您将实际帧和视频文件的引用S3 URI及帧的向量嵌入存储在OpenSearch Service中。用户文本输入:接收用户的文本输入,以使用相同模型创建嵌入,并利用所提供的API查询OpenSearch Service索引中的图像,使用OpenSearch的智能向量搜索功能查找与您的文本语义相似的图像。

该解决方案利用Kinesis Video Streams处理任何数量的流视频数据,而无需消费者配置或管理任何服务器。Kinesis Video Streams会自动实时提取视频数据中的图像,并将图像传送到指定的S3存储桶。或者,您可以使用无服务器的Lambda函数,通过Python的OpenCV库提取存储的视频文件的帧。

第二个组件通过调用Amazon Bedrock API,使用Amazon Titan多模态嵌入模型将这些提取的帧直接转换为向量嵌入。

嵌入是您数据的向量表示,捕捉语义含义。使用相同模型生成文本和图像的嵌入可以帮助您通过测量向量之间的距离来找到语义相似性。例如,您可以将所有图像元数据和其他文本描述嵌入到同一向量空间中。接近的向量表明图像和文本在语义上是相关的。这允许语义图像搜索基于文本描述,您可以通过检索具有最相似嵌入的图像来找到相关的图像,如以下可视化所示。

自2023年12月起,您可以使用Amazon Titan多模态嵌入模型进行图像搜索应用场景,如通过文本、图像或两者的组合进行搜索。它生成1024维的向量默认,使得高准确性和快速搜索能力成为可能。您还可以配置较小的向量大小,以优化成本与准确性之间的平衡。有关更多信息,请参考Amazon Titan多模态嵌入模型G1。

以下图表展示了图像转换为向量表示的过程。您将视频文件拆分为帧,并将它们保存到S3存储桶中第1步。Amazon Titan多模态嵌入模型将这些帧转换为向量嵌入第2步。您将视频帧的嵌入作为k近邻kNN向量存储在OpenSearch Service索引中,并引用相应的视频剪辑和S3存储桶中的帧第3步。您可以在额外字段中添加其他描述。

下图展示了使用自然语言处理进行语义搜索的流程。第三个组件允许用户以自然语言提交查询第1步,检索与查询在语义上相似的帧引用列表。Amazon Titan多模态嵌入模型第2步将提交的文本查询转换为向量嵌入第3步。您使用此嵌入查找最相似的嵌入第4步。返回结果中的存储引用用于检索帧和视频剪辑以供UI回放第5步。

以下是我们的解决方案架构图。

工作流程步骤如下:

实现无服务器的图像和实时视频的语义搜索,使用亚马逊 Titan 多模态嵌入 机器学习博客将实时视频流式传输到Kinesis Video Streams。或者,将现有视频剪辑上传到S3存储桶。Kinesis Video Streams提取实时视频的帧到S3存储桶。或者,使用Lambda函数提取已上传视频剪辑的帧。另一个Lambda函数收集帧并使用Amazon Bedrock生成嵌入。Lambda函数将图像和视频剪辑的引用连同嵌入一并作为kNN向量插入OpenSearch Service索引。用户向UI提交查询提示。新的Lambda函数使用Amazon Bedrock将查询转换为向量嵌入。Lambda函数在OpenSearch Service图像索引中搜索与查询匹配的帧,并利用余弦相似度返回帧列表。UI通过使用返回结果中保存的引用,从Kinesis Video Streams检索帧和视频剪辑。或者,从S3存储桶中检索视频剪辑。

该解决方案是使用AWS Amplify创建的。Amplify是一个开发框架和托管服务,可以帮助前端Web和移动开发者快速高效地使用AWS工具构建安全且可扩展的应用。

优化功能、准确度和成本

让我们对该提出的解决方案架构进行分析,以确定提升功能、改善准确性和降低成本的机会。

从摄取层开始,您可以参考使用AWS IoT进行智能家居的经济有效的视频监控平台设计考量来了解如何将视频经济有效地导入Kinesis Video Streams。

该解决方案中视频帧的提取配置使用Amazon S3交付和Kinesis Video Streams。需要评估的关键权衡是确定最佳帧率和分辨率,以满足用例需求,同时平衡整个系统的资源利用率。帧提取率可以从每秒五帧到每20秒一帧不等。帧率的选择应由业务用例驱动,这将直接影响在Amazon Bedrock、Lambda、Amazon S3以及搜索向量数据库等下游服务中的嵌入生成和存储。即使是将预录制视频上传到Amazon S3时,选择适当的帧提取率和分辨率仍需认真考虑。调整这些参数将使您能够平衡用例的准确性需求和AWS服务的消耗。

Amazon Titan多模态嵌入模型默认输出的数据嵌入长度为1024维。该表示承载了输入的语义含义,最适合与其他向量进行比较,以获得最佳相似度。为了获得最佳性能,建议使用默认的嵌入长度,但这会直接影响性能和存储成本。为了提高生产环境中的性能并降低成本,可以探索256和384等替代嵌入长度。减少嵌入长度将失去一些语义上下文,进而直接影响准确性,但能提高整体速度并优化存储成本。

OpenSearch Service提供按需、预留和无服务器定价选项,配有通用或存储优化的机器类型,以适应不同工作负载。为优化成本,您应该选择覆盖生产工作负载基础的预留实例,并利用按需、无服务器和可转换预留应对突发和非生产负载。对于较低需求的生产工作负载,使用pgvector与Amazon Aurora PostgreSQL Serverless相比,可提供较低的基本消耗单位,降低成本。

确定kNN算法中K值的最佳值对于平衡准确性、性能和成本至关重要。较大的K值通常通过考虑更多的邻近向量来提高准确性,但会增加计算复杂性和成本。相反,较小的K值则导致较快的搜索时间和较低的成本,但可能降低结果质量。在OpenSearch Service中使用kNN算法时,至关重要的是根据应用的优先级仔细评估K参数从K=5或10等较小值开始,在需要更高准确性时逐步增加K。

作为解决方案的一部分,我们推荐使用Lambda作为处理帧的无服务器计算选项。通过Lambda,您可以运行几乎任何类型的应用程序或后端服务,无需任何管理。Lambda负责运行和扩展代码所需的一切,同时保持高可用性。

面对大量视频数据时,您应该考虑批处理帧处理任务并运行批量计算作业,以访问大量计算资源。结合使用AWS Batch和Amazon Elastic Container ServiceAmazon ECS,可以有效地响应提交的作业以便迅速配置资源,消除容量限制、降低计算成本并快速交付结果。

您在自己的账户中部署GitHub仓库时会产生费用。当您完成示例测试时,请遵循本文后面的清理部分中的步骤,以删除基础设施并停止产生费用。

请参阅仓库中的README文件,详细了解解决方案的构建模块。

先决条件

在本次演练中,您需要满足以下先决条件:

拥有足够的AWS身份及访问管理IAM权限的AWS账户启用模型访问权限,以使用Amazon Bedrock Titan多模态嵌入G1安装AWS命令行界面AWS CLI设置AWS Amplify CLI

部署Amplify应用

完成以下步骤以部署Amplify应用:

使用以下命令将仓库克隆到本地硬盘: bash git clone https//githubcom/awssamples/ServerlessSemanticVideoSearchVectorDatabaseandaMultiModalGenerativeAlEmbeddingsModel

进入克隆的仓库目录。

初始化Amplify应用: bash amplify init

清理并安装Web应用的依赖: bash npm ci

在您的AWS账户中创建基础设施: bash amplify push

飞鱼加速npv官网

在您的本地环境中运行Web应用: bash npm run dev

创建应用账户

完成以下步骤以在应用中创建账户:

在终端中打开Web应用,使用相应的URL。输入用户名、密码和电子邮件地址。使用发送到该电子邮件的代码确认您的电子邮件地址。

从计算机上传文件

完成以下步骤以上传存储在本地的图像和视频文件:

在导航栏中选择文件上传。点击选择文件。从本地驱动器中选择图像或视频。点击上传文件。

从网络摄像头上传文件

完成以下步骤以从网络摄像头上传图像和视频:

在导航栏中选择网络摄像头上传。当请求访问您的网络摄像头权限时,选择允许。选择上传单个捕获的图像或捕获的视频:选择捕获图像和上传图像,以从您的网络摄像头上传单个图像。选择开始视频捕获、停止视频捕获,然后 上传视频以从您的网络摄像头上传视频。

搜索视频

完成以下步骤以搜索您上传的文件和视频:

1

飞鱼加速器(中国)官方网站|飞鱼加速器

电话:13594780107

联系人:周经理

邮箱:addictive@hotmail.com

网址:https://www.ghcyd.com

地址:泉州市刊舌入口209号

在线留言

  • 体验移动端

    体验移动端

  • 联系客服

    联系客服