如何将含1200张64×64图片的文件夹与Excel标签绑定用于神经网络训练
实现图像与标签绑定的步骤
核心前提:Excel中需包含对应图片文件名的列(比如命名为filename),确保能通过文件名建立图片与damage标签的对应关系。
1. 读取并整理标签数据
用pandas读取Excel,构建文件名到标签的映射:
import pandas as pd # 读取Excel文件,替换为你的文件路径 label_df = pd.read_excel("damage_labels.xlsx") # 生成{文件名: damage标签}的字典 label_mapping = dict(zip(label_df["filename"], label_df["damage"]))
2. 加载图片并绑定标签
用PIL/OpenCV读取图片,转换成神经网络可用的数组格式,同时匹配对应标签:
import os import numpy as np from PIL import Image image_folder = "你的图片文件夹路径" image_list = [] label_list = [] # 遍历文件夹内所有图片文件 for filename in os.listdir(image_folder): if filename.lower().endswith((".png", ".jpg", ".jpeg")): # 读取图片("L"表示转灰度,彩色用"RGB") img = Image.open(os.path.join(image_folder, filename)).convert("L") # 转成numpy数组,确保尺寸为64×64 img_array = np.array(img) image_list.append(img_array) # 从映射字典中获取对应标签 label_list.append(label_mapping[filename]) # 转成符合训练要求的numpy数组 images = np.array(image_list) # 形状为(1200, 64, 64)(灰度)或(1200, 64, 64, 3)(彩色) labels = np.array(label_list) # 形状为(1200,)
3. 验证绑定正确性
随机抽取样本确认图像与标签匹配:
import matplotlib.pyplot as plt # 查看前3个样本 for i in range(3): plt.imshow(images[i], cmap="gray") plt.title(f"Damage Category: {labels[i]}") plt.axis("off") plt.show()
4. 适配神经网络训练(可选)
如果用PyTorch/TensorFlow,可封装成数据集类方便批量加载:
PyTorch 示例
from torch.utils.data import Dataset, DataLoader class DamageDataset(Dataset): def __init__(self, img_dir, label_df, transform=None): self.img_dir = img_dir self.label_map = dict(zip(label_df["filename"], label_df["damage"])) self.file_list = [f for f in os.listdir(img_dir) if f.lower().endswith((".png", ".jpg"))] self.transform = transform def __len__(self): return len(self.file_list) def __getitem__(self, idx): filename = self.file_list[idx] img = Image.open(os.path.join(self.img_dir, filename)).convert("L") label = self.label_map[filename] if self.transform: img = self.transform(img) return img, label # 创建数据集与加载器 dataset = DamageDataset(image_folder, label_df) dataloader = DataLoader(dataset, batch_size=32, shuffle=True)
TensorFlow/Keras 示例
import tensorflow as tf # 构建包含图片路径和标签的DataFrame df = pd.read_excel("damage_labels.xlsx") df["img_path"] = df["filename"].apply(lambda x: os.path.join(image_folder, x)) # 构建数据集 def load_img(img_path, label): img = tf.io.read_file(img_path) img = tf.image.decode_png(img, channels=1) # 灰度图用1通道,彩色用3 img = tf.image.resize(img, (64, 64)) / 255.0 # 归一化 return img, label dataset = tf.data.Dataset.from_tensor_slices((df["img_path"].values, df["damage"].values)) dataset = dataset.map(load_img).batch(32).shuffle(1000)
内容的提问来源于stack exchange,提问作者Dude Rar
相关产品推荐
相关产品推荐

