Я пытаюсь загрузить изображения из ZIP-файла объемом 1 ГБ с изображениями в формате JPG.
Мое решение с zipfile.open()
:
from zipfile import ZipFile
import torch
import numpy as np
filepath = "data/file.zip"
list_of_filenames = ["img1.jpg", "img2.jpg"] # In my actual code filenames are recieved by zipfile.namelist()
idx = 0 # In my actual code I iterate over a batch of images.
with ZipFile(filepath, "r") as archive:
with archive.open(list_of_filenames[idx]) as f:
im = Image.open(f)
img = np.array(im)
x = torch.from_numpy(img)
Мое решение с zipfile.read()
:
from zipfile import ZipFile
import torch
import numpy as np
from io import BytesIO
filepath = "data/file.zip"
list_of_filenames = ["img1.jpg", "img2.jpg"] # In my actual code filenames are recieved by zipfile.namelist()
idx = 0 # In my actual code I iterate over a batch of images.
with ZipFile(self.filepath, "r") as archive:
f = archive.read(list_of_filenames[idx])
im_enc = BytesIO(f)
im = Image.open(im_enc)
img = np.array(im)
x = torch.from_numpy(img)
Оба решения работают, проблема в том, что чтение одного изображения [218, 178, 3] занимает более 2 секунд! Я прочитал несколько раз (не могу вспомнить источники), что zipfile.read () позволит избежать извлечения файла и, следовательно, будет быстрее, хотя я не могу прочитать это из docs . Есть ли более быстрый способ, или я должен извлечь весь файл перед повторением изображений?