Эффективный способ очистить 8752 изображения от очень похожих.

Вопрос или проблема

У меня есть 8752 картинки, которые были получены из, более или менее, часового видеозаписи с CCTV с помощью скрипта на Python, снимающего скриншоты. Мой руководитель сказал мне очистить данные от примерно схожих. Сначала я думал сделать программу, которая:

  1. Преобразует каждую картинку в Numpy Array
  2. Вычтет картинку a1 из картинки a2, а затем сравнит процент их схожести
  3. Продолжит с полным набором данных из 8752 картинок.

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

Также, может ли моя “программа для снятия скриншотов” корректно захватывать каждый кадр, не упуская никаких данных из видео?

Вот мой код для получения картинок из видео:

import cv2
vidcap = cv2.VideoCapture("siang.mp4")
net, image = vidcap.read()
count = 0
while net:
    cv2.imwrite("frame" + str(count)+ ".jpg" , image)
    success,image = vidcap.read()
    print("Считан новый кадр: ", success)
    count +=1
    if (count==5139): #оценочные секунды из длительности видео
        break;

Изображение в формате .jpeg и имеет размер 1420 x 1080 после обрезки. Буду рад предоставить больше деталей, если это необходимо.

Ответ или решение

Уважаемый пользователь,

Проблема обработки изображений

Запрос на очистку 8752 изображений, полученных из одного часа видеозаписи с CCTV, представляет собой интересную задачу в области обработки изображений. Ваше первоначальное предложение алгоритма кажется многообещающим, однако его эффективность можно значительно улучшить.

Анализ предложенного метода

Ваш текущий план включает несколько этапов:

  1. Преобразование изображения в массив Numpy.
  2. Вычитание одного изображения из другого и сравнение степени сходства.
  3. Повторение процесса для всего набора данных.

Однако такая стратегия может оказаться неэффективной по нескольким причинам:

  • Высокая вычислительная сложность. Операция вычитания всех 8752 изображений позволит вам сгенерировать большое количество пар (8752 * 8751 / 2 = 38,269,876 пар), что требует значительных вычислительных ресурсов и времени.
  • Дублирование усилий. Выражение „сходства“ через вычитание изображений не всегда является лучшим показателем, и потребуется более совершенный метод оценки.

Рекомендации по улучшению метода

  1. Использование методов компьютерного зрения и машинного обучения:

    • Примените методы, такие как Сравнение гистограмм или Кросс-корреляция, которые позволят более эффективно оценить сходство изображений.
    • Рассмотрите возможность использования алгоритмов, основанных на признаках (например, SIFT, ORB), вместо простого сравнения пикселей.
  2. Использование кластеризации:

    • Кластеризация изображений позволит вам объединить схожие изображения в группы, что упростит процесс фильтрации и выявления дубликатов. Алгоритмы, такие как K-Means или DBSCAN, могут быть полезны для этой задачи.
  3. Параметризация этапа, связанного с толщиной кадров:

    • Вместо того чтобы сравнивать каждую пару изображений, генерируйте уникальные представления, чтобы сравнить их только один раз. Например, можно взять случайные изображения и сравнить их с другими, предварительно отфильтровав изображения, которые отличаются по цветовой палитре или другим критериям.
  4. Оптимизация в плане памяти и хранения:

    • Изучите методы оптимизации памяти, такие как уменьшение разрешения изображений перед анализа.

Оценка кода загрузки изображений

Ваш код для извлечения кадров из видео выполняет основную задачу, однако стоит уточнить несколько моментов:

  • Проверка правильности захвата всех кадров. Вы ограничиваете количество кадров до 5139, что может привести к неполному набору изображений, особенно если видео содержит более 5139 кадров. Убедитесь, что этот лимит соотносится с длительностью видео.
  • Избегайте захвата излишнего дублирования. Возможно, у вас уже есть константа, определяющая частоту захвата кадров. Например, можно извлекать каждый n-ный кадр, чтобы избежать перегруженности.

Заключение

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

С уважением,
[Ваше имя]

Оцените материал
Добавить комментарий

Капча загружается...