写一段代码,图片命名方式为1_0.jpg,其中_前面的1是顺序号,_后的0代表是第几类模式,实现将原本图片名按递增顺序排列的图片数据集,随机划分为训练集和测试集,比例为9:1,然后把训练集按照划分后的顺序重新命名图片这个过程保持_后面的模式类别不变,改变前面的顺序号,写入另外一个文件夹,
时间: 2023-11-26 20:02:59 浏览: 142
给定比例随机划分训练集、验证集和测试集
以下是Python实现代码:
```python
import os
import random
import shutil
# 指定原始数据集文件夹路径和保存训练集的文件夹路径
data_dir = "data/"
train_dir = "train/"
# 获取原始数据集中所有图片的文件名列表
images = os.listdir(data_dir)
# 按照图片顺序号排序
images.sort(key=lambda x: int(x.split("_")[0]))
# 计算划分训练集和测试集的边界索引
split_idx = int(len(images) * 0.9)
# 随机打乱图片列表顺序
random.shuffle(images)
# 将前90%的图片复制到训练集文件夹中
for i, img in enumerate(images[:split_idx]):
# 获取图片类别
label = img.split("_")[1]
# 构造新的图片文件名
new_name = f"{i+1}_{label}.jpg"
# 复制图片到训练集文件夹中,并使用新的文件名
shutil.copyfile(os.path.join(data_dir, img), os.path.join(train_dir, new_name))
# 将训练集中的图片按照顺序号重新命名
train_images = os.listdir(train_dir)
train_images.sort(key=lambda x: int(x.split("_")[0]))
for i, img in enumerate(train_images):
# 获取图片类别
label = img.split("_")[1]
# 构造新的图片文件名
new_name = f"{i+1}_{label}.jpg"
# 重命名图片文件
os.rename(os.path.join(train_dir, img), os.path.join(train_dir, new_name))
```
这段代码将原始数据集中的图片按照递增顺序排列,并随机划分为训练集和测试集,比例为9:1。然后将训练集中的图片按照顺序号重新命名,并写入另一个文件夹中。重命名后的图片文件名保持了原来的模式类别不变,只改变了顺序号。
阅读全文