🚀 Попробуйте Zilliz Cloud, полностью управляемый Milvus, бесплатно — ощутите 10-кратное увеличение производительности! Попробовать сейчас>

milvus-logo
LFAI

Обзор системы

  • Scenarios
August 29, 2020
milvus

Как следует из названия, поиск видео по изображению - это процесс извлечения из хранилища видео, содержащего кадры, схожие с входным изображением. Одним из ключевых шагов является превращение видео в эмбеддинги, то есть извлечение ключевых кадров и преобразование их характеристик в векторы. Теперь некоторые любопытные читатели могут задаться вопросом, в чем разница между поиском видео по изображению и поиском изображения по изображению? На самом деле, поиск ключевых кадров в видео эквивалентен поиску изображения по картинке.

Если вам интересно, вы можете обратиться к нашей предыдущей статье Milvus x VGG: Building a Content-based Image Retrieval System.

Обзор системы

На следующей схеме показан типичный рабочий процесс такой системы поиска видео.

1-video-search-system-workflow.png 1-video-search-system-workflow.png

При импорте видео мы используем библиотеку OpenCV, чтобы разрезать каждое видео на кадры, извлечь векторы ключевых кадров с помощью модели извлечения признаков изображения VGG, а затем вставить извлеченные векторы (эмбеддинги) в Milvus. Для хранения исходных видео мы используем Minio, а для хранения корреляций между видео и векторами - Redis.

При поиске видео мы используем ту же модель VGG для преобразования входного изображения в вектор признаков и вставляем его в Milvus, чтобы найти векторы с наибольшим сходством. Затем система извлекает соответствующие видео из Minio на своем интерфейсе в соответствии с корреляциями в Redis.

Подготовка данных

В этой статье мы используем около 100 000 GIF-файлов из Tumblr в качестве примера набора данных для создания комплексного решения для поиска видео. Вы можете использовать свои собственные хранилища видео.

Развертывание

Код для построения системы поиска видео в этой статье находится на GitHub.

Шаг 1: Сборка образов Docker.

Для работы системы видеопоиска необходимы докер Milvus v0.7.1, докер Redis, докер Minio, докер внешнего интерфейса и докер внутреннего API. Докер внешнего интерфейса и докер API внутреннего интерфейса вы должны собрать самостоятельно, а остальные три докера вы можете взять непосредственно из 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

Шаг 2: Настройте окружение.

Здесь мы используем 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

Вы можете настроить Milvus, Redis и Minio в docker-compose.yml следующим образом:

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, чтобы проверить, правильно ли запустились пять докер-контейнеров. На следующем скриншоте показан типичный интерфейс после успешного запуска.

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

Итак, вы успешно создали систему поиска видео, хотя в базе данных нет ни одного видео.

Шаг 4: Импорт видео.

В каталоге deploy репозитория системы лежит import_data.py, скрипт для импорта видео. Для запуска скрипта достаточно обновить путь к видеофайлам и интервал импорта.

5-update-path-video.png 5-update-path-video.png

data_path: Путь к видеофайлам для импорта.

time.sleep(0.5): Интервал, через который система импортирует видео. Сервер, на котором мы построили систему поиска видео, имеет 96 ядер процессора. Поэтому рекомендуется установить интервал в 0,5 секунды. Если ваш сервер имеет меньшее количество процессорных ядер, установите большее значение интервала. В противном случае процесс импорта будет создавать нагрузку на ЦП и порождать "зомби-процессы".

Запустите файл 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!👇🏻

Like the article? Spread the word

Продолжить чтение