Создание системы анализа видео с векторной базой данных Milvus
Когда в прошлые выходные я смотрел Free Guy, у меня было ощущение, что я уже где-то видел актера, который играет Бадди, охранника, но не мог вспомнить ни одну из его работ. Моя голова была забита мыслью: «кто этот парень?» Я был уверен, что видел это лицо, и очень старался вспомнить его имя. Похожий случай был, когда однажды я увидел в видео главного актера с напитком, который раньше мне очень нравился, но в итоге не смог вспомнить название бренда.
Ответ вертелся у меня на языке, но мозг словно полностью заклинило.
Феномен «вертится на кончике языка» (TOT) сводит меня с ума при просмотре фильмов. Если бы только существовала поисковая система обратного поиска по изображению для видео, которая позволяла бы находить видео и анализировать видеоконтент. Раньше я создал поисковую систему обратного поиска по изображению с использованием Milvus. Учитывая, что анализ видеоконтента в некотором смысле похож на анализ изображений, я решил создать систему анализа видеоконтента на основе Milvus.
Обнаружение объектов
Обзор
Перед анализом объекты в видео сначала должны быть обнаружены. Эффективное и точное обнаружение объектов в видео — главная задача этого процесса. Это также важная задача для таких приложений, как автопилот, носимые устройства и IoT.
Пройдя путь от традиционных алгоритмов обработки изображений до глубоких нейронных сетей (DNN), современные основные модели для обнаружения объектов включают R-CNN, FRCNN, SSD и YOLO. Представленная в этой теме система анализа видео на основе глубокого обучения и Milvus может интеллектуально и быстро обнаруживать объекты.
Реализация
Чтобы обнаруживать и распознавать объекты в видео, система должна сначала извлечь кадры из видео и обнаружить объекты на изображениях кадров с помощью обнаружения объектов, затем извлечь векторы признаков из обнаруженных объектов и, наконец, проанализировать объект на основе векторов признаков.
- Извлечение кадров
Анализ видео преобразуется в анализ изображений с помощью извлечения кадров. В настоящее время технология извлечения кадров очень зрелая. Такие программы, как FFmpeg и OpenCV, поддерживают извлечение кадров с заданными интервалами. В этой статье рассказывается, как извлекать кадры из видео каждую секунду с помощью OpenCV.
- Обнаружение объектов
Обнаружение объектов заключается в поиске объектов в извлеченных кадрах и создании скриншотов объектов согласно их положениям. Как показано на следующих рисунках, были обнаружены велосипед, собака и автомобиль. В этой теме рассказывается, как обнаруживать объекты с помощью YOLOv3, который широко используется для обнаружения объектов.
Рисунок 1.
- Извлечение признаков
Извлечение признаков означает преобразование неструктурированных данных, которые машинам трудно распознавать, в векторы признаков. Например, изображения можно преобразовывать в многомерные векторы признаков с помощью моделей глубокого обучения. В настоящее время наиболее популярные AI-модели для распознавания изображений включают VGG, GNN и ResNet. В этой теме рассказывается, как извлекать признаки из обнаруженных объектов с помощью ResNet-50.
Рисунок 2.
- Анализ векторов
Извлеченные векторы признаков сравниваются с векторами библиотеки, и возвращается информация, соответствующая наиболее похожим векторам. Для крупномасштабных наборов данных векторов признаков вычисления представляют собой огромную проблему. В этой теме рассказывается, как анализировать векторы признаков с помощью Milvus.
Ключевые технологии
OpenCV
Open Source Computer Vision Library (OpenCV) — это кроссплатформенная библиотека компьютерного зрения, предоставляющая множество универсальных алгоритмов для обработки изображений и компьютерного зрения. OpenCV широко используется в области компьютерного зрения.
В следующем примере показано, как захватывать видеокадры с заданными интервалами и сохранять их как изображения с помощью OpenCV на Python.
import cv2
cap = cv2.VideoCapture(file_path)
framerate = cap.get(cv2.CAP_PROP_FPS)
allframes = int(cv2.VideoCapture.get(cap, int(cv2.CAP_PROP_FRAME_COUNT)))
success, image = cap.read()
cv2.imwrite(file_name, image)
YOLOv3
You Only Look Once, Version 3 (YOLOv3 [5]) — это одноэтапный алгоритм обнаружения объектов, предложенный в последние годы. По сравнению с традиционными алгоритмами обнаружения объектов при той же точности YOLOv3 работает в два раза быстрее. YOLOv3, упоминаемый в этой теме, — это улучшенная версия от PaddlePaddle [6]. В ней используется несколько методов оптимизации с более высокой скоростью вывода.
ResNet-50
ResNet [7] является победителем ILSVRC 2015 в классификации изображений благодаря своей простоте и практичности. Будучи основой многих методов анализа изображений, ResNet зарекомендовала себя как популярная модель, специализированная для обнаружения, сегментации и распознавания изображений.
Milvus
Milvus — это облачная, открытая векторная база данных, созданная для управления векторами эмбеддингов, генерируемыми моделями машинного обучения и нейронными сетями. Она широко используется в таких сценариях, как компьютерное зрение, обработка естественного языка, вычислительная химия, персонализированные рекомендательные системы и многое другое.
Следующие процедуры описывают, как работает Milvus.
- Неструктурированные данные преобразуются в векторы признаков с помощью моделей глубокого обучения и импортируются в Milvus.
- Milvus хранит и индексирует векторы признаков.
- Milvus возвращает векторы, наиболее похожие на вектор, запрошенный пользователями.
Рисунок 3.
Развертывание
Теперь у вас есть некоторое понимание систем видеоаналитики на базе Milvus. Система в основном состоит из двух частей, как показано на следующем рисунке.
Красные стрелки обозначают процесс импорта данных. Используйте ResNet-50 для извлечения векторов признаков из набора изображений и импортируйте векторы признаков в Milvus.
Черные стрелки обозначают процесс анализа видео. Сначала извлеките кадры из видео и сохраните кадры как изображения. Затем обнаружьте и извлеките объекты на изображениях с помощью YOLOv3. После этого используйте ResNet-50 для извлечения векторов признаков из изображений. Наконец, Milvus выполняет поиск и возвращает информацию об объектах с соответствующими векторами признаков.
Рисунок 4.
Для получения дополнительной информации см. Milvus Bootcamp: Video Object Detection System.
Импорт данных
Процесс импорта данных прост. Преобразуйте данные в 2 048-мерные векторы и импортируйте векторы в Milvus.
vector = image_encoder.execute(filename)
entities = [vector]
collection.insert(data=entities)
Анализ видео
Как было представлено выше, процесс анализа видео включает захват видеокадров, обнаружение объектов в каждом кадре, извлечение векторов из объектов, вычисление сходства векторов с использованием метрики евклидова расстояния (L2) и поиск результатов с помощью Milvus.
images = extract_frame(filename, 1, prefix)
detector = Detector()
run(detector, DATA_PATH)
vectors = get_object_vector(image_encoder, DATA_PATH)
search_params = {"metric_type": "L2", "params": {"nprobe": 10}}
results = collection.search(vectors, param=search_params, limit=10)
Заключение
В настоящее время более 80% данных являются неструктурированными. С быстрым развитием ИИ все больше моделей глубокого обучения разрабатывается для анализа неструктурированных данных. Такие технологии, как обнаружение объектов и обработка изображений, достигли больших прорывов как в академической среде, так и в промышленности. Благодаря этим технологиям все больше AI-платформ удовлетворяют практическим требованиям.
Система видеоаналитики, обсуждаемая в этой теме, построена на Milvus, что позволяет быстро анализировать видеоконтент.
Будучи векторной базой данных с открытым исходным кодом, Milvus поддерживает векторы признаков, извлеченные с помощью различных моделей глубокого обучения. Интегрированный с такими библиотеками, как Faiss, NMSLIB и Annoy, Milvus предоставляет набор интуитивно понятных API, поддерживая переключение типов индексов в зависимости от сценариев. Кроме того, Milvus поддерживает скалярную фильтрацию, что повышает показатель полноты и гибкость поиска. Milvus применяется во многих областях, таких как обработка изображений, компьютерное зрение, обработка естественного языка, распознавание речи, рекомендательные системы и открытие новых лекарственных препаратов.
References
[1] A. D. Bagdanov, L. Ballan, M. Bertini, A. Del Bimbo. “Сопоставление и поиск товарных знаков в базах данных спортивного видео.” Proceedings of the international workshop on Workshop on multimedia information retrieval, ACM, 2007. https://www.researchgate.net/publication/210113141_Trademark_matching_and_retrieval_in_sports_video_databases
[2] J. Kleban, X. Xie, W.-Y. Ma. “Пространственно-пирамидальный майнинг для обнаружения логотипов в естественных сценах.” IEEE International Conference, 2008. https://ieeexplore.ieee.org/document/4607625
[3] R. Boia, C. Florea, L. Florea, R. Dogaru. “Локализация и распознавание логотипов на естественных изображениях с использованием гомографических графов классов.” Machine Vision and Applications 27 (2), 2016. https://link.springer.com/article/10.1007/s00138-015-0741-7
[4] R. Boia, C. Florea, L. Florea. “Эллиптическая агломерация asift в прототипе класса для обнаружения логотипов.” BMVC, 2015. http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=5C87F52DE38AB0C90F8340DFEBB841F7?doi=10.1.1.707.9371&rep=rep1&type=pdf
[5] https://arxiv.org/abs/1804.02767
[6] https://paddlepaddle.org.cn/modelbasedetail/yolov3
[7] https://arxiv.org/abs/1512.03385
Читать далее

Zilliz Cloud On-Demand Compute: Pay Only for What You Use
The customer case behind Zilliz Cloud On-Demand: how a $10K vector search bill came down to under $500, and the engineering changes that made it possible.

Why Teams Are Migrating from Weaviate to Zilliz Cloud — and How to Do It Seamlessly
Explore how Milvus scales for large datasets and complex queries with advanced features, and discover how to migrate from Weaviate to Zilliz Cloud.

The Great AI Agent Protocol Race: Function Calling vs. MCP vs. A2A
Compare Function Calling, MCP, and A2A protocols for AI agents. Learn which standard best fits your development needs and future-proof your applications.



