【问题标题】:Extract details in multiple image filenames in Python and add them as labels for a dataset在 Python 中提取多个图像文件名中的细节并将它们添加为数据集的标签
【发布时间】:2018-10-05 03:48:40
【问题描述】:

我有一个包含 1300 个 .JPEG 文件的文件夹,所有这些文件的文件名都按特定顺序排列。

每个文件名的顺序是 category_count_randomString.JPEG。举个例子,下面是文件夹中的一张图片:

13_2_5jdf.JPEG 其中 13 是类别,2 是图像中该类别的计数,后跟随机字符串。

我希望能够:

  1. 从每个文件名中提取两个类别并将它们分配为标签(然后构建 CNN 模型)和
  2. 从每个文件名中提取类别计数,并将它们分配给向量/数组。

目前,我刚刚使用 glob 函数加载了图像(还没有作为数组)。

import glob

data = '/Users/Data'

images = glob.glob(data+'/*.JPEG')

我是编码新手,因此我正在寻找能够提供“防白痴”编码行的人,我可以将其合并到我的笔记本中以完成这项工作。

【问题讨论】:

  • 你想怎么加载图片。一个numpy数组?
  • 你可以在文件名上使用.split('_'),用下划线分割它们——这会给你一个包含三个字符串的数组,其中包含下划线分割的东西。
  • 例如category, count, end = '13_2_5jdf.JPEG'.split('_') 将设置 category = '13'、count = '2' 和 end = '5jdf.JPEG'。您还可以查看 os.path 模块以拆分 JPEG 扩展名(如果需要),还可以拆分路径并从路径字符串中删除前面的文件夹。
  • @adamconkey 是的,作为一个 numpy 数组。这是我在将其拆分为 x_train 和 y_train 之前必须转换的代码: x = np.array([np.array(Image.open(fname)) for fname in images])
  • @AlexanderReynolds 这是一个好的开始。但是我如何在 1300 张图片上循环播放呢?

标签: python extract filenames


【解决方案1】:

您可以使用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])

【讨论】:

  • 感谢您的帮助!所以我粘贴了整个代码并在'for'命令之后的第一行得到一个错误“没有足够的值来解压(预期为 3,得到 1)”。你知道这是怎么回事吗?抱歉,我完全是个菜鸟。
  • 如果您的文件格式如您所说的 CATEGORY_COUNT_RAND.jpeg,那么'.' 上的split 应该给出['CATEGORY_COUNT_RAND', 'jpeg'] 的列表,然后它采用第一个元素并在'_' 上拆分这应该会给你一个包含三个元素的列表:['CATEGORY', 'COUNT', 'RAND']
  • 该目录中的所有文件都具有这种格式吗?如果没有,那么上面的代码将中断。我可以进一步检查该目录中是否至少所有 JPEG 文件都满足这种格式。
  • 就是这样。全部 1300 个。但奇怪的是,我收到了这个错误。你知道这可能是什么原因造成的吗?
  • @halfer 很公平,我同意你的说法,我只知道我可以回答这个问题,因为我一直在做这种事情。
猜你喜欢
  • 2020-09-21
  • 2020-07-28
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 2023-03-05
  • 2015-02-03
  • 1970-01-01
相关资源
最近更新 更多