首页 > 解决方案 > 如何根据名称将图像数据集划分为子集?

问题描述

我有一个名为“Fingers”的数据集,我正在尝试在其上构建 TensorFlow 模型......

但是,我有点卡住了,因为我想根据图像名称的最后 2 个字符(不包括扩展名)来划分图像。

就像下面的代码一样:

train_dir_list = os.listdir(train_set)

train dir 列表包含一些不同名称的图像,但代表图像的实际标签位于名称的末尾,如下所示:

123949 2L .png 123123 5R .png...

等等...

图像的标签位于索引 [-6:-5] 处,其中 R 代表 RIGHT,L 代表 LEFT。与总手指数。

现在我的问题是将这些图像划分为 1L、2L...5L 和 1R...5R 的子目录,每个子目录都有自己的目录,以便使用 Keras ImageDataGenerator。

请帮助,您可以在 Kaggle 名称 Fingers 上找到数据集。

标签: pythonpython-3.xkerasdatasetdata-processing

解决方案


  1. 将所有图像保存在一个名为'imgs'

  2. 使用 glob 读取所有图像,检查它们的名称。

import glob
import cv2

imgs = []
labels = []

for f in glob.glob('imgs/*.png'):
   imgs.append(cv2.imread(f))
   str_label = f.split('.')[0][-2:] # 5L / 3R

   if str_label[-1] == 'R':
       labels.append([int(str_label[-2]), 1]) # 1 denotes right
   else:
       labels.append([int(str_label[-2]), 0]) # 0 == left hand


推荐阅读