在这个信息爆炸的时代,视频内容的搜索变得越来越重要。想象一下,如果有一个搜索引擎能够帮助找到预告片中的所有标题字幕、广播中的所有广告,或者视频中所有在办公室的场景,那将是多么方便的事情。通过Roboflow的Video Inference API,可以实现这样的搜索引擎。
在本指南中,将学习如何使用RoboflowVideo Inference API来计算视频中帧的CLIP向量,并使用这些向量构建一个搜索引擎,该引擎接受文本查询并返回相关帧的时间戳。
将通过以下步骤来构建视频搜索引擎:
- 计算视频中帧的CLIP向量;
- 创建一个系统,允许将每个帧向量与文本查询相关的嵌入进行比较。
首先,需要了解CLIP模型。CLIP是一个多模态模型,可以用来计算嵌入。这些嵌入包含了图像内容的语义信息。可以将视频帧的嵌入与CLIP计算的文本嵌入进行比较。帧与文本嵌入之间的相似度越高,文本与帧的相似度就越大。
为了构建搜索引擎,需要执行以下操作:
- 计算视频中帧的CLIP向量;
- 创建一个系统,允许将每个帧向量与文本查询相关的嵌入进行比较。
将使用Roboflow Video Inference API来计算CLIP向量。这个API允许在视频帧上运行计算机视觉模型,从在Roboflow上训练的微调目标检测模型到基础模型如CLIP,再到凝视检测模型。所有CLIP嵌入计算都在托管基础设施上运行。所需要做的就是上传一个图像,将返回运行推理的帧号和相关的CLIP向量。
首先,下载RoboflowPython包:
pip install inference
接下来,创建一个免费的Roboflow账户。前往Roboflow仪表板,点击“设置”然后“Roboflow API密钥”来检索API密钥。学习如何检索API密钥。
创建一个新的Python文件,并添加以下代码:
import json
from roboflow import CLIPModel
model = CLIPModel(api_key="API_KEY")
job_id, signed_url, expire_time = model.predict_video(
"trailer.mp4",
fps=3,
prediction_type="batch-video",
)
results = model.poll_until_video_results(job_id)
with open("results.json", "w") as f:
json.dump(results, f)
在上面的代码中,将API_KEY替换为RoboflowAPI密钥。需要一个视频来运行推理。在这个指南中,将使用一部电影的预告片;可以使用任何正在处理的媒体。将trailer.mp4替换为想要运行推理的视频的名称。
在上面的代码中,将推理FPS设置为3。这意味着将为视频中的每三帧计算一个CLIP向量。FPS越高,搜索引擎中的时间段就越准确。使用更高的FPS涉及更多的计算,这将增加计算CLIP向量的成本。建议大多数应用使用3-5 FPS。
当运行上述脚本时,视频将被上传到一个签名的URL。可以在未来的请求中使用此URL一段时间,如expire_time变量中所述。然后,将开始一个视频推理作业,该作业有一个相关的作业ID。视频将在这段时间后被删除。视频推理API不支持长期媒体存储。
代码使用poll_until_video_results()函数,该函数轮询Roboflow视频推理API以检查推理结果是否可用。如果结果可用,将它们保存到一个文件中;否则,该函数继续每30秒轮询API一次。
要手动检查API,可以使用:
results = model.poll_for_video_results(job_id)
其中job_id是视频推理作业的ID。
接下来,将设置Roboflow视频搜索模板。Roboflow视频搜索模板包含一个Flask Web服务器,可以使用它来搜索视频推理API返回的CLIP向量。这个Web服务器有一个路由:一个页面,它接受文本查询并计算包含与文本查询最相关的帧的时间戳。
可以使用模板作为视频搜索用例的起点。已经编写了所有需要比较CLIP向量并计算与帧相关的时间戳的代码。可以复制Web服务器示例中的代码,以用于自己的逻辑。
要下载模板,请运行以下命令:
git clone https://github.com/roboflow/templates
接下来,导航到视频搜索示例目录并安装所需的依赖项:
cd templates/video-search
pip install -r requirements.txt
将上一步计算的results.json文件移动到video-search目录:
mv ~/path/to/results.json .
现在可以启动视频搜索引擎了:
python3 app.py
搜索引擎将在http://localhost:5000上可用。让运行一些查询,以展示搜索引擎在行动中:
搜索引擎成功返回了与文本查询相关的帧。当进行搜索查询时,应用程序:
- 计算与文本查询相关的CLIP向量。
- 将文本CLIP向量与Roboflow视频推理API计算的所有CLIP向量进行比较。使用余弦相似度来衡量每个文本向量与视频帧向量的相似度,并设置阈值为0.1。可以通过更改app.py脚本中的THRESHOLD值来自定义此值。
- 计算CLIP向量与文本查询CLIP向量相似的帧的时间戳。
- 在应用程序前端返回时间戳。
结论:Roboflow Video Inference API使能够在视频中的帧上运行计算机视觉模型。可以在自定义FPS下运行推理。在本指南中,展示了如何使用视频推理API在视频中的帧上运行CLIP。还可以运行在Roboflow上训练的自定义模型。然后,使用这些向量与视频搜索模板一起,使能够通过文本查询搜索视频。