4 шага к созданию системы поиска видео
Как следует из названия, поиск видео по изображению — это процесс извлечения из репозитория видео, содержащих кадры, похожие на входное изображение. Один из ключевых шагов — преобразовать видео в эмбеддинги, то есть извлечь ключевые кадры и преобразовать их признаки в векторы. Теперь у некоторых любознательных читателей может возникнуть вопрос: в чем разница между поиском видео по изображению и поиском изображения по изображению? Фактически поиск ключевых кадров в видео эквивалентен поиску изображения по изображению.
Если вам интересно, вы можете обратиться к нашей предыдущей статье Milvus x VGG: Building a Content-based Image Retrieval System.
Обзор системы2
Следующая диаграмма иллюстрирует типичный рабочий процесс такой системы поиска видео.
Рабочий процесс системы поиска видео.
При импорте видео мы используем библиотеку OpenCV, чтобы разбить каждое видео на кадры, извлечь векторы ключевых кадров с помощью модели извлечения признаков изображений VGG, а затем вставить извлеченные векторы (эмбеддинги) в Milvus. Мы используем Minio для хранения исходных видео и Redis для хранения связей между видео и векторами.
При поиске видео мы используем ту же модель VGG, чтобы преобразовать входное изображение в вектор признаков и вставить его в Milvus для поиска наиболее похожих векторов. Затем система извлекает соответствующие видео из Minio в своем интерфейсе согласно связям в Redis.
Подготовка данных
В этой статье мы используем около 100 000 GIF-файлов из Tumblr в качестве примерного набора данных для построения комплексного решения для поиска видео. Вы можете использовать собственные репозитории видео.
Развертывание
Код для создания системы поиска видео в этой статье находится на GitHub.
Шаг 1: Соберите Docker-образы.
Системе поиска видео требуются docker Milvus v0.7.1, docker Redis, docker Minio, docker фронтенд-интерфейса и docker бэкенд-API. Вам нужно самостоятельно собрать docker фронтенд-интерфейса и docker бэкенд-API, тогда как остальные три 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
Шаг 2: Настройте окружение.
Здесь мы используем docker-compose.yml для управления пятью вышеупомянутыми контейнерами. Конфигурацию docker-compose.yml см. в следующей таблице:
Настройка docker compose.
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 следующим образом:
Настройка Milvus, Redis, MinIO, Docker-compose.
Шаг 3: Запустите систему.
Используйте измененный docker-compose.yml, чтобы запустить пять docker-контейнеров, которые будут использоваться в системе поиска видео:
$ docker-compose up -d
Затем вы можете выполнить docker-compose ps, чтобы проверить, правильно ли запустились пять docker-контейнеров. Следующий скриншот показывает типичный интерфейс после успешного запуска.
Успешная настройка.
Теперь вы успешно создали систему поиска видео, хотя в базе данных еще нет видео.
Шаг 4: Импортируйте видео.
В директории deploy системного репозитория находится import_data.py, скрипт для импорта видео. Чтобы запустить скрипт, вам нужно только обновить путь к видеофайлам и интервал импорта.
Обновите путь к видео.
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, чтобы увидеть интерфейс системы поиска видео, как показано ниже.
Интерфейс поиска видео.
Переключите переключатель с шестерёнкой в правом верхнем углу, чтобы просмотреть все видео в репозитории.
Просмотр всех видео.
Нажмите на поле загрузки в левом верхнем углу, чтобы ввести целевое изображение. Как показано ниже, система возвращает видео, содержащие наиболее похожие кадры.
Наслаждайтесь рекомендательной системой с котами.
Далее — получайте удовольствие от нашей системы поиска видео!
Создайте собственную
В этой статье мы использовали Milvus для создания системы поиска видео по изображениям. Это иллюстрирует применение Milvus в обработке неструктурированных данных.
Milvus совместим с несколькими фреймворками глубокого обучения и обеспечивает поиск за миллисекунды по векторам в масштабе миллиардов. Смело используйте Milvus в других сценариях AI: https://github.com/milvus-io/milvus.
Не пропадайте, подписывайтесь на нас в Twitter или присоединяйтесь к нам в Slack!👇🏻
Читать далее

Build Multimodal Search for 3D Assets with Tripo and Zilliz Cloud
Generate 3D assets with Tripo, then search them by text, image, and metadata with multimodal embeddings and Zilliz Cloud.

Smarter Autoscaling in Zilliz Cloud: Always Optimized for Every Workload
With the latest upgrade, Zilliz Cloud introduces smarter autoscaling—a fully automated, more streamlined, elastic resource management system.

What is the K-Nearest Neighbors (KNN) Algorithm in Machine Learning?
KNN is a supervised machine learning technique and algorithm for classification and regression. This post is the ultimate guide to KNN.



