7 Dataset类代码实战
用途:可以用于添加数据集做数据增强
一、代码实现流程
-
从Dataset类中输入图片,并获取label

-
下载opencv,读取图片

- 利用IMG读图
from PIL import Image
- 获取图片的路径:

- 获取单张图片
控制台验证:
图片路径:在windows中需要转义字符\\
from PIL import Image
img_path="E:\\python项目\\pytorch_tudui\\dataset\\train\\ants\\0013035.jpg"
img=Image.open(img_path)
img.show()

- 获得所有图片
控制台测试
import os
dir_path="dataset/train/ants"
img_path_list=os.listdir(dir_path)
img_path_list[0]

- 设置路径
import os
root_dir="dataset/train"
label_dir="ants"
path=os.path.join(root_dir,label_dir)

- 获取对应路径的数据集
在控制台先运行类,在执行下面的命令:

- 数据集拼接

获取数据和标签:

- 另外一种:标签单独标记的数据集

二、完整代码及函数分析
实现数据中图片和标签的获取,并且将数据集拼接,并进行对应图片输出。
点击查看代码
from torch.utils.data import Dataset #从工具箱中取数据类
#import cv2 #本项目中先不采用opencv来读图
from PIL import Image #通过IMG获得图片
import os #获取系统地址
class MyData(Dataset):
def __init__(self,root_dir,label_dir):#root_dir:根目录,label_dir:因为子目录是标记目录
self.root_dir=root_dir
self.label_dir=label_dir
self.path=os.path.join(self.root_dir,self.label_dir) #地址拼接
self.img_path=os.listdir(self.path) #获取对应地址的图片
def __getitem__(self, idx):#通过索引获得图片及label
img_name=self.img_path[idx] #图片名称
img_item_path=os.path.join(self.root_dir,self.label_dir,img_name) #图片地址
img=Image.open(img_item_path) #获取图片
label=self.label_dir #获取图片label
return img,label
def __len__(self):
return len(self.img_path)
if __name__ == '__main__':
root_dir="dataset/train"
ants_label_dir="ants"
bees_label_dir = "bees"
ants_dataset=MyData(root_dir,ants_label_dir) #获取ants数据集
bees_dataset = MyData(root_dir, bees_label_dir)
#整个训练集:用于扩充数据集使用
train_dataset=ants_dataset+bees_dataset
#获取图片展示图片
img,label=train_dataset[20]
img.show()

浙公网安备 33010602011771号