前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Milvus实战| 以图搜视频系统

Milvus实战| 以图搜视频系统

作者头像
Zilliz RDS
发布2020-05-21 16:07:51
2.9K0
发布2020-05-21 16:07:51
举报
文章被收录于专栏:Reinvent Data Science

以图搜视频,顾名思义就是拿一张图片去视频底库里面搜索包含相似镜头的视频。以图搜视频中一个关键的步骤就是视频向量化,视频向量化即在视频中抽取关键帧,对每帧视频进行特征提取,将其转化为结构化的向量。至此,好奇的读者可能会问,这和以图搜图有什么区别呢?是的,对视频所有关键帧图片的搜索本质上就是以图搜图。

| 系统简介

整个以图搜视频系统的工作流程可以用下面这张图来表示:

视频导入时,首先利用 OpenCV 算法库对传入系统中的一个视频进行切帧,接着将这些关键帧图片利用图片特征提取模型 VGG 来提取向量,然后将提取出来的向量导入到 Milvus 中。对于原始视频,采用 Minio 来进行存储,然后利用 Redis 来存储视频和向量的对应关系。

视频搜索时,首先用同样的 VGG 模型将上传的图片转化成一条特征向量,接着拿这条向量到 Milvus 中进行相似向量搜索,查找出最相似的若干条向量,然后利用 Redis 中存储的向量和视频的对应关系到 Minio 中取出视频返回到前端界面上。

| 数据准备

本文以 Tumblr 上面大约 10 万个 gif 动图为例搭建了一个以图搜视频的端到端解决方案。读者可以使用自己的视频文件来进行系统搭建。

| 系统部署

本文搭建以图搜视频的代码已经上传到了GitHub仓库,仓库地址为:https://github.com/JackLCL/search-video-demo

Step1 镜像构建

整个以图搜视频系统需要使用到 Milvus 0.7.1 docker、Redis docker、Minio docker、前端界面 docker 和后台 api docker。前端界面 docker 和后台 api docker 需要读者自己构建,其余三个 docker 可以直接从 docker hub 拉取。

代码语言:javascript
复制
# 获取以图搜视频代码$ git clone -b 0.7.1 https://github.com/JackLCL/search-video-demo.git# 构建前端界面 docker 和 api docker 镜像$ cd search-video-demo & make all

Step2 环境配置

本文使用 docker-compose 来对前面提到的五个容器进行管理。docker-compose.yml 文件的配置可以参考下表:

上表中的 ip 地址 192.168.1.38 为本文搭建以图搜视频系统使用的服务器地址,用户需要根据自己的实际情况对其进行修改。

Milvus、Redis 和 Minio 需用户手动创建存储目录,然后在 docker-compose.yml 中进行对应的路径映射。比如,本文创建的的存储目录分别为 :

代码语言:javascript
复制
/mnt/redis/data /mnt/minio/data /mnt/milvus/db

所以在 docker-compose.yml 的 Milvus、Redis 和 Minio 的配置部分可以按照下图配置:

Step3 系统启动

利用 Step 2 中修改好的 docker-compose.yml 启动以图搜视频系统需要用到的五个 docker 容器:

代码语言:javascript
复制
$ docker-compose up -d

启动完成以后,可以利用 docker-compose ps 命令来查看五个 docker 容器是否启动成功。正常启动后的结果界面如下图所示:

到现在为止,整个以图搜视频系统就已经搭建好了,不过系统的底库里面还没有视频。

Step4 视频导入

在系统代码仓库的 deploy 目录下面,有一个名叫 import_data.py 视频导入脚本。读者只需修改脚本中的视频文件的路径和视频导入时间间隔即可运行脚本进行视频导入。

data_path :需要导入的视频的路径。

time.sleep(0.5) :表示导入视频的时间间隔,本文搭建以图搜视频系统的服务器有 96 个 CPU 内核,导入视频的时间间隔设置为 0.5 秒比较合适。如果 CPU 核数更少,则设置的导入视频的时间间隔应该适当延长,否则会导致 CPU 占用过高而产生僵尸进程。

启动命令如下:

代码语言:javascript
复制
$ cd deploy
$ python3 import_data.py

导入过程如下图所示:

等待视频导入完成以后,整个以图搜视频系统就全部搭建完成了!

| 界面展示

打开浏览器,输入 192.168.1.38:8001 即可看到以图搜视频的界面,如下图所示:

点击右上角的设置图标,可以看到底库里的视频:

点击左边的上传框,可以上传一张你想搜索的图片,然后会在右边界面搜索出包含相似镜头的视频:

接下来就尽情享受以图搜视频的乐趣吧!

| 结语

本文利用 Milvus 搭建起了以图搜视频系统,展示了 Milvus 在非结构化数据处理中的应用。Milvus 向量相似度检索引擎可以兼容各种深度学习平台,搜索十亿向量仅毫秒响应。您可以使用 Milvus 探索更多 AI 用法!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ZILLIZ 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • | 系统简介
  • | 数据准备
  • | 系统部署
  • | 界面展示
  • | 结语
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档