Как исправить эту ошибку: (-4: недостаточно памяти) Не удалось выделить 6220800 байт в функции?

#python #python-3.x #function

#python #python-3.x #функция

Вопрос:

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

код:

 def load_images_from_folder_2(folder):
    images = []
    for filename in glob.glob(folder):
        a= cv2.imread(filename)
        #print(a)
        images.append(a)
    return images
  

Возвращает ошибку:

 ---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-15-99a421951aee> in <module>
    168         #videos=f'F:/deepfake_data/train_sample_videos_2/{i}'
    169     root_dir='F:/deepfake_data/train_sample_videos_2/'
--> 170     save_diffs(pairs,root_dir)
    171 

<ipython-input-15-99a421951aee> in save_diffs(pair, root_dir)
    140     frame_2=[]
    141     for n in range(0, len(onlyfiles)):
--> 142         img[n] = cv2.imread( join(mypath,onlyfiles[n]) )
    143         frame_2.append(img[n])
    144 

error: OpenCV(4.4.0) C:UsersappveyorAppDataLocalTemp1pip-req-build-2b5g8ysbopencvmodulescoresrcalloc.cpp:73: error: (-4:Insufficient memory) Failed to allocate 6220800 bytes in function 'cv::OutOfMemoryError'
  

Чтение изображений из папки:

     mypath="F:/deepfake_data/fake_id.jpg/*.*"
    frame_2=load_images_from_folder_2(mypath)
    print(frame_2)
  

Комментарии:

1. Вероятно, вам потребуется загрузить 6,22 МБ дополнительной оперативной памяти.

Ответ №1:

Ошибка просто указывает, что у вас закончилась оперативная память, заполнив ее изображениями. Другими словами, у вас слишком много изображений в папке ‘deepfake_data’, чтобы поместиться во временной памяти вашего компьютера.

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

  1. Запустите свою программу на подмножествах изображений одновременно (загрузите N изображений, обработайте, удалите, повторите).
  2. Используя ту же идею для N = 1: обрабатывайте изображение по мере его загрузки, т.е. в памяти всегда хранится только одно изображение
  3. Уменьшите количество изображений перед добавлением в список и т. Д. Каждое из них занимает меньше памяти
  4. Рассмотрите возможность работы с облачными сервисами, у которых больше оперативной памяти, чем у вас, например, Google Colab.

Дополнительная информация значительно сузит диапазон ответов.

Ответ №2:

На самом деле проблема не в оперативной памяти, проблема в адресном пространстве. Независимо от того, сколько оперативной памяти у вас в системе, 32-разрядная версия Python по умолчанию может получить доступ только к 2 ГБ оперативной памяти.

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