Читайте изображения из zipfile быстро в python3 - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь загрузить изображения из 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 . Есть ли более быстрый способ, или я должен извлечь весь файл перед повторением изображений?

...