🚀 免費嘗試 Zilliz Cloud,完全托管的 Milvus,體驗速度提升 10 倍!立即嘗試

milvus-logo
LFAI

系統概觀

  • Scenarios
August 29, 2020
milvus

顧名思義,透過影像搜尋視訊就是從儲存庫中擷取包含與輸入影像相似畫格的視訊。其中一個關鍵步驟是將視訊轉換為嵌入,也就是擷取關鍵畫面並將其特徵轉換為向量。現在,有些好奇的讀者可能會問,以影像搜尋視訊與以影像搜尋影像有何不同?事實上,搜尋視訊中的關鍵畫面等同於以影像搜尋影像。

如果您有興趣,可以參考我們之前的文章Milvus x VGG:建立一個以內容為基礎的圖像檢索系統

系統概觀

下圖說明了這種視訊搜尋系統的典型工作流程。

1-video-search-system-workflow.png 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 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-configure-milvus-redis-minio-docker-compose-yml.png

步驟 3:啟動系統。

使用修改過的 docker-compose.yml,啟動視訊擷取系統所使用的五個 docker 容器:

$ docker-compose up -d

然後,您可以執行 docker-compose ps 來檢查五個 docker 容器是否已經正常啟動。下面的截圖顯示了成功啟動後的典型介面。

4-sucessful-setup.png 4-sucessful-setup.png

現在,您已經成功地建立了一個影片搜尋系統,雖然資料庫裡沒有影片。

步驟 4:匯入影片。

在系統資源庫的部署目錄中,鋪上 import_data.py,用來匯入影片的腳本。您只需要更新視訊檔案的路徑和匯入時間間隔,就可以執行腳本。

5-update-path-video.png 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 6-video-search-interface.png

切換右上方的齒輪開關,即可檢視資源庫中的所有影片。

7-view-all-videos-repository.png 7-view-all-videos-repository.png

按一下左上方的上傳框,輸入目標影像。如下圖所示,系統會傳回包含最相似畫格的影片。

8-enjoy-recommender-system-cats.png 8-enjoy-recommender-system-cats.png

接下來,享受我們的影片搜尋系統的樂趣!

建立您自己的系統

在這篇文章中,我們使用 Milvus 建立了一個以影像搜尋影片的系統。這體現了 Milvus 在非結構化資料處理上的應用。

Milvus 與多種深度學習框架相容,可在幾毫秒內搜尋數以十億計的向量。歡迎帶著 Milvus 進入更多 AI 應用場景:https://github.com/milvus-io/milvus。

不要覺得陌生,請關注我們的Twitter或加入我們的Slack!👇🏻。

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

繼續閱讀