如何将多张图片保存到一个 pickle 文件中?和 pickle 文件包含图像数据(像素信息)或仅包含图像文件的名称?

How to save multiple images into one pickle file? and pickle file contain image data (pixel info) or just names of image files?

我有一个“bird”文件夹,里面有 11345 张鸟类图片,分别命名为 1.jpg、2.jpg、3.jpg......11344.jpg、11345.jpg。我需要将这些鸟类图像保存为“filenames.pickle”,以便在进一步的机器学习模块中使用它。数据应按以下方式排列:dataset/train/filenames.pickle, dataset/test/filenames.pickle

我需要创建一个 pickle 文件 filenames.pickle 来获取所有 11345 张鸟类图像。我很困惑如何将这些图像添加到 pickle 中,以便我的代码获取 pickle 文件,但它最终到达这些图像以训练机器学习模型。

from PIL import Image  
import pickle

'''
I am just trying to convert one image into pickle to get an idea. 
if is succefully convert into pickle then I will read all the 
images inside the "bird" folder and convert all of them into one 
single pickle file
'''

# converting an image into pickle 
img = Image.open('059.jpg')
with open('059.pickle', 'wb') as f:
   pickle.dump(img, f)


## read the pickle file
with open('059.pickle','rb') as f:
file = pickle.load(f)
   print(file)

# after reading 059.pickle file : 
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=500x375 at 0x2115BE59190>

# I dont want ( <PIL.JpegImagePlugin.JpegImageFile image mode=RGB 
 size=500x375 at 0x2115BE59190>) this result into pickle file. 
# I want pickle file to save result like this: ['59.jpg']. 

 
 ## to convert whole images inside bird folder
 ## input folder = bird\images\all_images_in_jpg_format
  
 image = "bird\images\"
 fout = open("bird\filenames.pickle",'wb')
 pickle.dump(image,fout)
 fout.close()

with open("bird\filenames.pickle",'rb') as f:
file = pickle.load(f)
   print(file)
# output : bird\images\
## the above output is wrong


 '''
 becasue when I am done reading all the images and create one 
  pickle file as "filenames.pickle:, it should save images like 
  this: 
 ['01.jpg','0342.jpg','06762.jpg', '06752.jpg', '05122.jpg', 
  '05144.jpg', '06635.jpg','06638.jpg', 
 '05632.jpg',......'11345.jpg'] 
 and after reading this pickle file, somehow model will 
 automatcally read the images via pickle file.

 '''

我对 pickle 文件及其格式不太熟悉。任何人都可以帮助我或给我一些建议我应该如何解决这个问题并解决它?模型将如何通过 pickle 文件读取图像? pickle 文件包含什么(图像数据和像素信息或仅图像文件的名称)以便模型可以在训练时获取 pickle 文件并学习图像?

修改我原来的答案。现在我腌制文件名 在一个文件中,然后将图像腌制到另一个文件中。

from PIL import Image
import os
import pickle
from glob import glob

## to convert whole images inside bird folder
## input folder = bird\images\all_images_in_jpg_format

PICKLE_FILE = "bird\filenames.pickle"
SOURCE_DIRECTORY = "bird\images\"
PICKLE_IMAGES = "bird\images.pickle"

path_list = glob(os.path.join(SOURCE_DIRECTORY, "*.jpg"))

# pickle images into big pickle file

with open(PICKLE_IMAGES,"wb") as f:
    for file_name in path_list:
        pickle.dump(Image.open(file_name),f)
        
# get short names from the path list 

file_list = list(
    map(
        lambda x: os.path.basename(x), path_list)
)

# pickle short name list

pickle.dump(file_list, open(PICKLE_FILE, 'wb'))

# test that we can reread the list

recovered_list = pickle.load(open(PICKLE_FILE,"rb"))

if file_list == recovered_list:
    print("Lists Match!")
else:
    print("Lists Don't Match!!!")


# read a couple images out of the image file:

display_count = 5


with open(PICKLE_IMAGES,"rb") as f:
    while True:
        try:
            pickle.load(f).show()
            display_count -= 1
            if display_count <= 0:
                break
        except EOFerror as e:
            break
        

可能还是你的trainer想要单独pickle的图片,或者不喜欢PIL使用的图片格式。