Поиск повторяющихся видеофайлов по базе данных (миллионы), отпечатку пальца? Распознавание образов?

В следующем сценарии:

У меня есть проект, в каталоге которого на данный момент около десяти тысяч видеофайлов, и их количество резко возрастет.

Однако многие из них - дубликаты. С каждым видеофайлом я связал семантическую и описательную информацию, и я хочу объединить дубликаты, чтобы добиться лучших результатов для каждого из них.

Теперь мне нужна какая-то процедура, в которой я индексирую метаданные в базе данных, и всякий раз, когда новое видео попадает в каталог, те же данные вычисляются и сопоставляются в базе данных.

Проблема в том, что видео не являются точными копиями. Они могут иметь разное качество, быть обрезанными, с водяными знаками или иметь продолжение / приквел. Или обрезаются в начале и / или в конце.

К сожалению, чем лучше сравнение, тем больше он потребляет ресурсов процессора и памяти, поэтому я планирую реализовать несколько уровней сравнения, которые начинаются с очень изящного, но быстрого сравнения (длина видео maby с допуском 10%) и заканчиваются окончательным сравнением. это решает, действительно ли это дубликат (это будет голосование сообщества).

Так как у меня есть сообщество, которое проверяет результаты, достаточно делать «хорошие предположения» с низким коэффициентом неудач.

Итак, теперь мой вопрос: какие слои вы можете придумать, ребята, или у вас есть лучший подход?

Меня не волнуют усилия по созданию метаданных, у меня достаточно рабов для этого. Просто сравнение должно быть быстрым. Так что, если это поможет, я могу также преобразовать видео 100 раз ...

Вот мои текущие идеи:

  • длина видео (секунды)

  • анализ изображения первого и последнего кадра

Я бы передискретил изображение к размеру эскиза и получить средние значения rgb, затем сериализовать пиксель за пикселем, если цвет в этом пикселе больше / меньше среднего, представленного 0 или 1. Итак, я получаю двоичную строку, которую могу сохранить в mysql, и выполняю логическое битовая сумма (поддерживается mysql внутри) и подсчитывает оставшиеся неравные биты (также поддерживаются внутренне, это тогда будет расстояние Левенштейна для двоичных строк)

  • развитие битрейта с течением времени с тем же кодеком vbr

Я бы перекодировал видео в видеофайл vbr с точно такими же настройками. тогда я бы посмотрел на битрейт в определенные моменты времени (процент просмотра видео или абсолютные секунды ... тогда мы проанализировали бы только часть видео). то же, что и на картинке. Если битрейт больше среднего, его 1, иначе 0. мы составляем двоичную строку и сохраняем ее в db, а затем вычисляем расстояние Левенштейна

  • анализ звука (изменение битрейта и децибел во времени, как и битрейт видео)

  • анализ ключевых кадров

Сравнение изображений точно так же, как первый и последний кадры, но с позициями ключевых кадров? Мы бы использовали те же исходные файлы, которые использовали для расчета битрейта, потому что ключевые кадры сильно зависят от кодека и настроек.

  • развитие цвета с течением времени

Возможно, давайте возьмем одну или несколько областей / пикселей внутри изображения и посмотрим, как они развиваются с течением времени. Также изменение abov / ниже среднего. Думаю, черного / белого будет достаточно.

  • представить предложения пользователю для окончательного утверждения ...

Или я иду совершенно неверным путем? Я думаю, что не могу быть первым, у кого возникла эта проблема, но мне не удалось найти решения.

21
задан Paolo Forgia 8 November 2017 в 07:44
поделиться

1 ответ

Отличный вопрос! Только тестирование покажет, какие из этих факторов будут лучшими индикаторами. Некоторые идеи:

  • изменение битрейта с течением времени с тем же кодеком vbr: Звучит очень интенсивно, но я полагаю, что это даст отличные результаты. Аудиоанализ, кажется, дал бы аналогичные результаты с меньшими усилиями.
  • Анализ изображения первого и последнего кадра: разве 50% из них не будут черными? Лучшей идеей было бы использовать самую среднюю рамку, но я бы не рассчитывал на то, что этот метод будет надежным.
  • Используйте байесовскую статистику, чтобы записать, какие факторы вносят наибольший вклад в положительное совпадение. Это можно сделать на этапе тестирования, чтобы отсеять бесполезные и дорогостоящие сравнения.
  • Попросите пользователей помочь! Разрешить пользователям группировать найденные дубликаты. Они голосуют за версию с лучшим качеством, и она будет основной/официальной версией в группе.
  • Начните с самых простых сравнений и добавляйте более сложные тесты, когда обнаружите недостатки простых. Длина видео была бы хорошей для начала, а затем, возможно, какой-то элементарный анализ звука, и продолжайте свой путь оттуда.
3
ответ дан 29 November 2019 в 21:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: