Сохранение большого количества изображений в виде массива - PullRequest
0 голосов
/ 20 октября 2019

У меня большое количество видео, и я хочу извлечь кадры, предварительно обработать их, а затем создать массив для каждого видео. До сих пор я создал массивы, но конечный размер каждого массива слишком велик для всех видео. У меня 224 видео, каждое из которых имеет массив размером 6 ГБ, общий объем которого превышает 1,2 ТБ. Я попытался использовать numpy.save и pickle.dump, но оба создают одинаковый размер в системе. У вас есть рекомендации или альтернативный способ в целом?

1 Ответ

1 голос
/ 20 октября 2019

Выполните следующие действия для каждого из видео:

  1. Загрузите данные в один массив NumPy.
  2. Записывайте на диск, используя np.save() с расширением .npy.
  3. Добавьте файл .npy в сжатый архив .zip с помощью модуля zipfile.

Конечный результат будет таким, как если бы вы загрузили все 224 массива и сохранили их водин раз, используя np.savez_compressed, но он будет использовать только достаточно оперативной памяти для обработки одного видео за раз, вместо того, чтобы сохранять все несжатые данные в памяти сразу.

Наконец, np.load() (или zipfile) можно использовать для загрузки данных с диска, по одному видео за раз, или даже с помощью concurrent.futures.ThreadPoolExecutor для загрузки нескольких файлов одновременно, используя несколько ядер для декомпрессии, чтобы сэкономить время (вы можете получить ускорение почти линейно с числомядра, если ваш диск быстрый).

...