在Python中提取多个图像文件名中的详细信息,并将其添加为数据集的标签
我有一个包含1300个.JPEG文件的文件夹,所有文件都有特定顺序的文件名 每个文件名的顺序为category\u count\u randomString.JPEG。举个例子,下面是文件夹中的一个图像:在Python中提取多个图像文件名中的详细信息,并将其添加为数据集的标签,python,extract,filenames,Python,Extract,Filenames,我有一个包含1300个.JPEG文件的文件夹,所有文件都有特定顺序的文件名 每个文件名的顺序为category\u count\u randomString.JPEG。举个例子,下面是文件夹中的一个图像: 13_2_5jdf.JPEG其中13是类别,2是图像中该类别的计数,后跟随机字符串 我希望能够: 从每个文件名中提取类别并将其指定为标签(然后构建CNN模型),然后 从每个文件名中提取类别的计数,并将其分配给向量/数组 现在,我刚刚使用glob函数加载了图像(还没有作为数组) import g
13_2_5jdf.JPEG
其中13是类别,2是图像中该类别的计数,后跟随机字符串
我希望能够:
import glob
data = '/Users/Data'
images = glob.glob(data+'/*.JPEG')
我是编码新手,因此我正在寻找能够提供“防白痴”编码行的人,我可以将这些代码行合并到我的笔记本中以使其正常工作。您可以使用
os
获取数据目录中所有文件的列表,并使用split
命令获取文件名中的信息:
import os
data_path = "/Users/Data"
categories = []
counts = []
rand_strs = []
for img_filename in os.listdir(data_path):
if img_filename.endswith(".JPEG"):
category, count, rand_str = img_filename.split('.')[0].split('_')
categories.append(category)
counts.append(int(count))
rand_strs.append(rand_str)
每个列表的索引都是相同的,因此,例如,如果您想知道13类的计数,您可以这样做
category_idx = categories.index('13')
print "Category %s has %d elements" % (categories[category_idx], counts[category_idx])
您希望如何在最后加载图像。numpy数组?您可以在文件名上使用
.split(“”“)
按下划线分割它们---这将为您提供一个包含三个字符串的数组,其中包含下划线分割的内容<代码>类别,计数,结束='13_2_5jdf.JPEG'。拆分('uu')将设置类别='13'
,计数='2'
,和结束='5jdf.JPEG'
。您还可以查看os.path
模块以分离JPEG扩展名(如果需要),也可以分离路径并从路径字符串中删除前面的文件夹。@adamconkey yes,作为numpy数组。在将其拆分为x_train&y_train:x=np.array([np.array(Image.open(fname))表示图像中的fname])@AlexanderReynolds这是一个好的开始。但是我如何在1300张图片上循环呢?感谢你的帮助!因此,我粘贴了整个代码,并在'for'命令后面的第一行出现错误“没有足够的值来解包(预期为3,得到1)”。你知道这是怎么回事吗?对不起,我完全不知道。如果你的文件格式是你说的CATEGORY\u COUNT\u RAND.jpeg,那么上的拆分。
应该给出一个['CATEGORY\u COUNT\u RAND','jpeg']
列表,然后它接受第一个元素并在'
上拆分,这应该给你一个包含三个元素的列表:['CATEGORY'、'COUNT'、'RAND']
该目录中的所有文件都有这种格式吗?如果没有,那么上面的代码就会中断。我可以进一步检查该目录中是否至少所有JPEG文件都符合这种格式。完全一样。所有1300个文件都是这样。但奇怪的是,我得到了这个错误。你知道是什么原因吗?@halfer fair,我同意你说的,我只知道我能回答这个问题,因为我一直都在做这种事情。