Как найти кадр из видео?

Всем привет. Мне нужно оптимально решение, чтобы найти картинку в видео.
Есть ряд изображение с предполагаемыми видео, откуда они были взяты. Изображение - кадр из видео.
Кадр может быть худшего качества, с вотермарками и прочими помехами. Сам кадр другого размера.

Я додумался до сл. Пройтись по видео по каждому кадру. Получая его phash или dhash. В свою очередь, также поступить с искомым кадром. И сравнивать в цикле их хэш-суммы.
Беда в том. Что общее кол-во кадров мб 100тыс и больше. Если повезёт искомый кадр будет в начале, а если нет? То беда. Вешать на кучу потоков и ждать около 5 минут.

А чем ждать 5 минут плохо?
У меня в очереди около 5 тыс пар изображение - видео.
Да и компьютер сильно перегружать не хочется
  • Вопрос задан
  • 827 просмотров
Пригласить эксперта
Ответы на вопрос 2
2ord
@2ord
Можно сделать оффлайн-поиск так:
Для каждого извлеченного кадра видео вычислять его хэш (phash или dhash) и записывать его вместе с идентификатором файла видео и номером кадра в таблицу в СУБД SQLite.
Затем выполняешь запрос для поиска кадров-кандидатов с применением расстояния Хэмминга:
SELECT video_id, frame_num
FROM hashes_table
WHERE hamming_distance(image_hash, frame_hash) < N;


Другие способы предложены в opencv-finding-picture-frame-in-video
Ответ написан
Комментировать
Arseny_Info
@Arseny_Info
R&D engineer
Посчитать эмбеддинги всех кадров, положить в базу типа https://github.com/spotify/annoy или https://github.com/facebookresearch/faiss, и по ней делать поиски.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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