Обзор системы
Как следует из названия, поиск видео по изображению - это процесс извлечения из хранилища видео, содержащего кадры, схожие с входным изображением. Одним из ключевых шагов является превращение видео в эмбеддинги, то есть извлечение ключевых кадров и преобразование их характеристик в векторы. Теперь некоторые любопытные читатели могут задаться вопросом, в чем разница между поиском видео по изображению и поиском изображения по изображению? На самом деле, поиск ключевых кадров в видео эквивалентен поиску изображения по картинке.
Если вам интересно, вы можете обратиться к нашей предыдущей статье Milvus x VGG: Building a Content-based Image Retrieval System.
Обзор системы
На следующей схеме показан типичный рабочий процесс такой системы поиска видео.
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
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: Запустите систему.
Используйте модифицированный docker-compose.yml для запуска пяти контейнеров docker, которые будут использоваться в системе поиска видео:
$ docker-compose up -d
Затем можно запустить docker-compose ps, чтобы проверить, правильно ли запустились пять докер-контейнеров. На следующем скриншоте показан типичный интерфейс после успешного запуска.
4-sucessful-setup.png
Итак, вы успешно создали систему поиска видео, хотя в базе данных нет ни одного видео.
Шаг 4: Импорт видео.
В каталоге deploy репозитория системы лежит import_data.py, скрипт для импорта видео. Для запуска скрипта достаточно обновить путь к видеофайлам и интервал импорта.
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
Переключите переключатель в правом верхнем углу, чтобы просмотреть все видео в хранилище.
7-view-all-videos-repository.png
Нажмите на поле загрузки в левом верхнем углу, чтобы ввести целевое изображение. Как показано ниже, система возвращает видео, содержащие наиболее похожие кадры.
8-enjoy-recommender-system-cats.png
Далее, развлекайтесь с нашей системой поиска видео!
Создайте свою собственную
В этой статье мы использовали Milvus для создания системы поиска видео по изображениям. Это пример применения Milvus для обработки неструктурированных данных.
Milvus совместим с множеством фреймворков глубокого обучения и позволяет осуществлять поиск за миллисекунды для векторов масштабом в миллиарды. Не стесняйтесь брать Milvus с собой в другие AI-сценарии: https://github.com/milvus-io/milvus.
Не будьте чужими, следите за нами в Twitter или присоединяйтесь к нам в Slack!👇🏻
- Подготовка данных
- Развертывание
- Шаг 2: Настройте окружение.
- Шаг 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