Keras os.listdir随机读取图像,使边界框训练变得困难

Keras os.listdir随机读取图像,使边界框训练变得困难,keras,Keras,listdir(path)命令从文件夹中随机读取图像。我已保存了一个csv文件,其中包含文件夹中图像的布丁框信息。我假设os.listdir将按顺序读取图像,以便在培训期间也可以按顺序读取我的csv文件 我尝试过排序(os.listdir),但没有用。我找不到任何其他函数或代码从文件夹中顺序读取图像。我将图像命名为frame1.jpg、frame2.jpg等 PATH = os.getcwd() # Define data path data_path = PATH + '/frames' da

listdir(path)命令从文件夹中随机读取图像。我已保存了一个csv文件,其中包含文件夹中图像的布丁框信息。我假设os.listdir将按顺序读取图像,以便在培训期间也可以按顺序读取我的csv文件

我尝试过排序(os.listdir),但没有用。我找不到任何其他函数或代码从文件夹中顺序读取图像。我将图像命名为frame1.jpg、frame2.jpg等

PATH = os.getcwd()
# Define data path
data_path = PATH + '/frames'
data_dir_list = sorted(os.listdir(data_path))
print(data_dir_list)
img_data_list=[]

for dataset in (data_dir_list):
    img_list=sorted(os.listdir(data_path+'/'+ dataset))
    print ('Loaded the images of dataset-'+'{}\n'.format(dataset))
    for img in sorted(img_list):
        input_img=cv2.imread(data_path + '/'+ dataset + '/'+ img )
        input_img=cv2.cvtColor(input_img, cv2.COLOR_BGR2GRAY)
        input_img1=input_img
        #input_img_resize=cv2.resize(input_img,(512,512))
        img_data_list.append(input_img1)

img_data = np.array(img_data_list)
img_data = img_data.astype('float32')
img_data /= 255

根据Python文档,
os.listdir()
以任意顺序返回文件名。它只是映射到一个底层操作系统调用,该调用将以基于文件系统设计的最有效的顺序返回文件名


它只是一个标准的字符串列表,因此
sorted()
将以您使用它的方式工作。文件名中的序列号是否正确填充,以便处理您可能使用的10多个图像?您从排序(os.listdir(…)中看到的随机顺序是什么?

根据Python文档,
os.listdir()
以任意顺序返回文件名。它只是映射到一个底层操作系统调用,该调用将以基于文件系统设计的最有效的顺序返回文件名


它只是一个标准的字符串列表,因此
sorted()
将以您使用它的方式工作。文件名中的序列号是否正确填充,以便处理您可能使用的10多个图像?您从排序(os.listdir(…))中看到的随机顺序是什么?

我正在处理500张图像,所有的帧都非常相似,我很难找到顺序。我把我的图片命名为frame1,frame2,frame3,…frame500。正如我提到的,“排序”不起作用。还有其他可能的方法吗?是否有任何图像命名约定会有所帮助?@Ethan如果你对frame1、frame2、frame3进行排序。。。。按字母顺序为frame500,然后在frame2之前出现frame100。您需要在文件名中填充序号,使其为frame001、frame002、frame003。。。frame500或告诉排序的
值。按照文件名的原样,您可以从文件名中提取数字,并要求sorted使用它,就像这样
sorted(os.listdir(…),key=lambda fn:int(fn.split('.')[0][len('frame'):])
非常感谢……将框架名称更改为frame001等解决了问题。你能告诉我frame100是如何在frame2之前提取的吗?另外,“sorted(os.listdir(…),key=lambda fn:int(fn.split('.')[0][len('frame'):])”没有对两个字符串进行排序,因此它将查看字符串的每个字符,因此它将首先对数字的第一个字符进行排序,即100中的1总是在2之前。我的代码有什么不起作用?你必须更具体地告诉我,你如何使用它有什么问题,或者在我将框架存储为frames001、frame002等时是否有输入错误。但是我试着使用上面提到的排序函数格式。那是行不通的。我会再次检查并向您更新。非常感谢你的建议,将框架保存为frame001等。这很有帮助,我可以成功运行代码。我正在处理500幅图像,所有的框架都非常相似。我很难找到顺序。我把我的图片命名为frame1,frame2,frame3,…frame500。正如我提到的,“排序”不起作用。还有其他可能的方法吗?是否有任何图像命名约定会有所帮助?@Ethan如果你对frame1、frame2、frame3进行排序。。。。按字母顺序为frame500,然后在frame2之前出现frame100。您需要在文件名中填充序号,使其为frame001、frame002、frame003。。。frame500或告诉排序的
值。按照文件名的原样,您可以从文件名中提取数字,并要求sorted使用它,就像这样
sorted(os.listdir(…),key=lambda fn:int(fn.split('.')[0][len('frame'):])
非常感谢……将框架名称更改为frame001等解决了问题。你能告诉我frame100是如何在frame2之前提取的吗?另外,“sorted(os.listdir(…),key=lambda fn:int(fn.split('.')[0][len('frame'):])”没有对两个字符串进行排序,因此它将查看字符串的每个字符,因此它将首先对数字的第一个字符进行排序,即100中的1总是在2之前。我的代码有什么不起作用?你必须更具体地告诉我,你如何使用它有什么问题,或者在我将框架存储为frames001、frame002等时是否有输入错误。但是我试着使用上面提到的排序函数格式。那是行不通的。我会再次检查并向您更新。非常感谢您提出将框架保存为frame001等建议。这很有帮助,我可以成功运行代码。