Задача
Разработать приложение наподобие Shazam, но для видео. Научить приложение определять название фильма и выдавать список товаров из видео.
Например, по телевизору идет фильм «Мистер и миссис Смит». Пользователь открывает приложение и наводит камеру на экран. Система отображает название фильма и список товаров: одежду главных героев, аксессуары, марки автомобилей и многое другое, - все, что было загружено в базу данных правообладателем.
Например, по телевизору идет фильм «Мистер и миссис Смит». Пользователь открывает приложение и наводит камеру на экран. Система отображает название фильма и список товаров: одежду главных героев, аксессуары, марки автомобилей и многое другое, - все, что было загружено в базу данных правообладателем.
ЭТАПЫ РАЗРАБОТКИ
Распознавание монитора
Первый шаг — научить приложение определять, что перед ним находится монитор. Для этого мы собрали и разметили изображения, на которых видны включенные мониторы.
Превращение кадра в числовый вектор — эмбеддинг
Обучили эмбеддер, который преобразует информацию с кадра в числовой вектор. Векторное пространство организовано так, что похожие кадры находятся близко друг к другу, а разные — далеко.
Работа с базой данных
Чтобы найти тот самый фильм, который снимает пользователь, нам нужна база фильмов. Мы взяли 150 видео, разбили их на кадры и оцифровали каждый кадр с помощью эмбедера. Полученные векторы загрузили в Milvus — базу данных, обеспечивающую быстрый поиск похожих векторов.
Создание списка товаров
Создали и заполнили облачную базу данных, содержащая всю информацию о каждом видео, его сегментах и товарах, которые встречаются в кадрах.
«Этот проект уникален с точки зрения машинного обучения. Здесь было важно сделать не только решение с высоким качеством распознавания, но и оптимизировать его для исполнения в реальном временина мобильном устройстве. Вместе с командой Amiga мы портатировали пайплайн распознавания на Dart и получили решение, которое отлично работает реальном времени на широком спектре мобильных устройств и на iOS, и на Android.»
– Андрей Татаринов, генеральный директор Epoch8.
КАК УСТРОЕНО РАСПОЗНАВАНИЕ ВИДЕО
Приложение сравнивает кадры, снятые пользователем, с кадрами из базы Milvus. Эту базу предварительно заполнили раскадровками 150 фильмов, преобразовав каждый кадр в числовой вектор.
Числовые векторы-кадры из видео пользователя сопоставляются с векторами-кадрами из базы Milvus. Посредством голосования большинством определяется наиболее похожее видео из базы и конкретный сегмент этого видео.
Числовые векторы-кадры из видео пользователя сопоставляются с векторами-кадрами из базы Milvus. Посредством голосования большинством определяется наиболее похожее видео из базы и конкретный сегмент этого видео.
АВТОМАТИЧЕСКОЕ ОБНОВЛЕНИЕ БАЗЫ ВИДЕО
Для добавления нового видео в базу необходимо обновление данных в Milvus. Этот процесс автоматизирует наш собственный сервис — Datapipe. Мы разработали его в Epoch8 для автоматизации подготовки данных и обучения ML-моделей.
Datapipe уже успешно применялся в двух проектах: для оптического распознавания символов на кэшбэк-платформе и для создания ML-модели в приложении Brickit, которое помогает собирать новые конструкции из старых деталей.
«Сервис отслеживает изменения в облачной базе данных. Если в базе появляется новое видео — название и ссылка на файл, то сервис автоматически скачивает его, кадрирует, присваивает числовые векторы и загружает векторы в Milvus. После этого пользователь сможет найти это видео с помощью приложения.»
– Анна Закутняя, ML-инженер.
КАК СОЗДАЮТСЯ СПИСКИ ТОВАРОВ
Когда нужный сегмент видео найден в базе Milvus, мы извлекаем всю связанную с ним информацию — описание фильма и товары — из таблиц, размещенных в облачном сервисе. Этот сервис позволяет создавать таблицы, а затем искать в них информацию через API.
Получается такая схема:
- Приложение определяет сегмент фильма.
- Приложение предоставляет пользователю:
- информацию о фильме;
- список товаров, представленных в данном сегменте.
Списки товаров формируют и обновляют правообладатели, которые самостоятельно добавляют описания и фотографии.
Технологии
- YOLOv5 - детектор.
- MobileNet - эмбедер - обученный на картинах с использованием слоя ArcFace.
- Milvus - база векторов.
- Grist - таблицы c информацией по видео и товарам.
- Datapipe - ML-сервис, использованный для обновления базы Milvus.
- Flutter - фреймворк для мобильного приложения.
РЕЗУЛЬТАТЫ
- Мы разработали ML-модель, способную распознавать 150 фильмов и товары в кадре. База фильмов автоматически пополняется.
- Видео пользователя обрабатывается с частотой 1 кадр каждые 200 мс в режиме реального времени.
- Точность распознавания видео - 96%.
- Определение фильма и товаров занимает всего 2,4 секунды в режиме реального времени.
Команда
- Андрей Татаринов, основатель Epoch8.
- Анна Закутняя, ML-инженер.
- Александр Козлом, ML-тимлид.