系统概述
顾名思义,通过图像搜索视频就是从资源库中检索包含与输入图像相似帧的视频的过程。其中一个关键步骤是将视频转化为 Embeddings,也就是提取关键帧并将其特征转换为向量。现在,一些好奇的读者可能会问,按图像搜索视频和按图像搜索图像有什么区别?事实上,在视频中搜索关键帧就相当于在图像中搜索关键帧。
如果感兴趣,您可以参考我们之前的文章Milvus x VGG:构建基于内容的图像检索系统。
系统概述
下图展示了此类视频搜索系统的典型工作流程。
1-video-search-system-workflow.png
导入视频时,我们使用 OpenCV 库将每个视频切割成帧,使用图像特征提取模型 VGG 提取关键帧的向量,然后将提取的向量(嵌入)插入 Milvus。我们使用 Minio 来存储原始视频,使用 Redis 来存储视频和向量之间的相关性。
搜索视频时,我们使用相同的 VGG 模型将输入图像转换为特征向量,并将其插入 Milvus,以找到相似度最高的向量。然后,系统会根据 Redis 中的相关性从 Minio 的界面上检索相应的视频。
数据准备
在本文中,我们使用 Tumblr 中的约 100,000 个 GIF 文件作为样本数据集,来构建端到端视频搜索解决方案。您也可以使用自己的视频库。
部署
本文中构建视频检索系统的代码在 GitHub 上。
第 1 步:构建 Docker 映像。
视频检索系统需要 Milvus v0.7.1 docker、Redis docker、Minio docker、前端界面 docker 和后端 API docker。前端界面 docker 和后端 API docker 需要自己搭建,其他三个 docker 可以直接从 Docker Hub 拉取。
# Get the video search code
$ git clone -b 0.10.0 https://github.com/JackLCL/search-video-demo.git
# Build front-end interface docker and api docker images
$ cd search-video-demo & make all
第二步:配置环境。
在这里,我们使用 docker-compose.yml 来管理上述五个容器。有关 docker-compose.yml 的配置,请参见下表:
2-configure-docker-compose-yml.png
上表中的 IP 地址 192.168.1.38 是本文中专门用于构建视频检索系统的服务器地址。你需要将其更新为你的服务器地址。
你需要手动为 Milvus、Redis 和 Minio 创建存储目录,然后在 docker-compose.yml 中添加相应的路径。在这个例子中,我们创建了以下目录:
/mnt/redis/data /mnt/minio/data /mnt/milvus/db
你可以在 docker-compose.yml 中按如下方式配置 Milvus、Redis 和 Minio:
3-configure-milvus-redis-minio-docker-compose-yml.png
第 3 步:启动系统。
使用修改后的 docker-compose.yml 启动视频检索系统中使用的五个 docker 容器:
$ docker-compose up -d
然后,你可以运行 docker-compose ps 来检查这五个 docker 容器是否已经正常启动。下面的截图显示了启动成功后的典型界面。
4-sucful-setup.png
现在,你已经成功构建了一个视频搜索系统,尽管数据库中还没有视频。
第 4 步:导入视频。
在系统存储库的部署目录中,输入 import_data.py,这是用于导入视频的脚本。只需更新视频文件的路径和导入间隔即可运行脚本。
5-update-path-video.png
data_path:要导入视频的路径。
time.sleep(0.5):系统导入视频的时间间隔。我们用来构建视频搜索系统的服务器有 96 个 CPU 内核。因此,建议将时间间隔设置为 0.5 秒。如果您的服务器 CPU 内核较少,可将时间间隔设置为更大的值。否则,导入过程会对 CPU 造成负担,并产生僵尸进程。
运行 import_data.py 导入视频。
$ cd deploy
$ python3 import_data.py
导入视频后,您就可以使用自己的视频搜索系统了!
界面显示
打开浏览器,输入 192.168.1.38:8001,即可看到视频搜索系统的界面,如下图所示。
6-video-search-interface.png
切换右上角的齿轮开关,即可查看资源库中的所有视频。
7-view-all-videos-repository.png
点击左上角的上传框,输入目标图像。如下图所示,系统会返回包含最相似帧的视频。
8-enjoy-recommender-system-cats.png
接下来,尽情体验我们的视频搜索系统吧!
创建自己的系统
在本文中,我们使用 Milvus 建立了一个通过图像搜索视频的系统。这体现了 Milvus 在非结构化数据处理中的应用。
Milvus 兼容多种深度学习框架,可以在几毫秒内完成数十亿向量的搜索。欢迎带着 Milvus 进入更多人工智能场景:https://github.com/milvus-io/milvus。
- 数据准备
- 部署
- 第二步:配置环境。
- 第 3 步:启动系统。
- 第 4 步:导入视频。
- 界面显示
- 创建自己的系统
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word