学习路线 爆肝杰哥 装一系列东西 在G盘
小土堆
首先插入 dataset: from torch.utils.data import Dataset
继承dateset类:
获取照片路径:
from PIL import Image
img path=‘’D//。。。。。。。。‘’ img_path是一个字符串变量,添加地址时注意 两个斜杠
img=Image.open(img_path) 变量img获取的是图片, 用的是Image.open的方法
获取一组照片:
导入路径:dir_path=“D:\PyCharm\Py_Projects\XiaoTuDui\dataset\train\ants” dir_path是一个字符串变量
import os os有方法
img_path_list=os.listdir(dir_path) 通过os的方法,导入文件夹路径从而创建列表
实战讲解
目录如下:
实战
→
up用的相对路径 root_dir=“dataset/train”
lable_dir=“ants”
两个路径 拼接功能: path=os.path.join(root_dir,lable_dir)
然后我来:root_dir复制的根路径
整合后 path=‘XiaoTuDui\datase\train\ants’
构建全局变量,相当于全局函数
检查时报错了。于是我换成了绝对地址
此时img_path成为图片的列表。
构建类(相当于一个新函数,idx是自变量)
定义img_name是地址中图片的名称(字符串类型) (通过列表img_path传输)
比如我让idx=0试了下
在这里插入代码片
```*斜体样式*
import os
from PIL import Image *PIL库可以插Image*
root_dir="D:\\PyCharm\\Py_Projects\\XiaoTuDui\\dataset\\train" *这里最好导入绝对地址*
lable_dir="ants" *ants是train的下级文件,既是地址,也是标签*
path=os.path.join(root_dir,lable_dir) *os.path,join起到粘连左右,把地址输出,以字符串类型输出*
img_path=os.listdir(path) *通过os.listdir把照片排序,生成列表给 img_path*
img_name=img_path[idx] *把列表的第【idx】项传递给img_name* 效果如下
![在这里插入图片描述](https://img-blog.csdnimg.cn/671460f49e2e4219b4d55527da7782e3.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/0343a2edcee3486ba896bc7c9a3ddd51.png)
```python **
构造一个类。相当于构建一个获取项目的函数
def __getitem__(self, idx):
img_name=self.img_path[idx] //把全局变量中的照片名字传递给 img_name//
img_item_path=os.path.join(self.root_dir,self.lable_dir,img_name) //定位照片具体位置(最精确位置)//
img=Image.open(img_item_path) //把地址中的图片打开传递给img//
lable=self.lable_dir //把本次ants文件夹的标签传递给lable//
return img,lable //结果返回为照片,标签
def __len__(self):
return len(self.img_path)
计算长度。
完整体的dataset类如下(相当于一个完整的函数)
class MyData(Dataset):
def __init__(self,root_dir,lable_dir):
self.root_dir=root_dir
self.lable_dir=lable_dir
self.path=os.path.join(root_dir,lable_dir)
self.img_path=os.listdir(self.path)
def __getitem__(self, idx):
img_name=self.img_path[idx]
img_item_path=os.path.join(self.root_dir,self.lable_dir,img_name)
img=Image.open(img_item_path)
lable=self.lable_dir
return img,lable
def __len__(self):
return len(self.img_path)
按时间顺序向下,
root_dir="D:\\PyCharm\\Py_Projects\\XiaoTuDui\\dataset\\train"
ants_lable_dir="ants"
ants_dataset=MyData(root_dir,ants_lable_dir)
然后在控制台依次输入
1、
from torch.utils.data import Dataset
from PIL import Image
import os
class MyData(Dataset):
def __init__(self,root_dir,lable_dir):
self.root_dir=root_dir
self.lable_dir=lable_dir
self.path=os.path.join(root_dir,lable_dir)
self.img_path=os.listdir(self.path)
def __getitem__(self, idx):
img_name=self.img_path[idx]
img_item_path=os.path.join(self.root_dir,self.lable_dir,img_name)
img=Image.open(img_item_path)
lable=self.lable_dir
return img,lable
def __len__(self):
return len(self.img_path)
2、
root_dir="D:\\PyCharm\\Py_Projects\\XiaoTuDui\\dataset\\train"
ants_lable_dir="ants"
3、
ants_dataset=MyData(root_dir,ants_lable_dir)
右侧结果如图似乎所有照片都以列表形式传入ants_dataset
可以看到root_dir
path等
4、
如果我们要第一个变量可以输入
ants_dataset[0]
5、
输入:
img,label=ants_dataset[0]
img.show()
所以可以返回 img lable
控制台输入
root_dir="D:\\PyCharm\\Py_Projects\\XiaoTuDui\\dataset\\train"
ants_lable_dir="ants"
bees_lable_dir="bees"
ants_dataset=MyData(root_dir,ants_lable_dir)
bees_dataset=MyData(root_dir,bees_lable_dir)
img,lable=bees_dataset[1]
img,show()
则出现蜜蜂了
train_dataset=ants_dataset+bees_dataset
1、具体查看
发现总数据集长度245,其中蚂蚁124.。。我们把第123传给img,lable,发现img是蚂蚁。
加深印象,再进阶
新建一个文件夹
把之前的ants改成ants——image 同时新建lable文件夹,在lable中,创建txt
输入代码
import os
root_dir ="D:\\PyCharm\\Py_Projects\\XiaoTuDui\\datasets_jinjieP7\\train" //设置根目录//
target_dir = "ants_image" //定位存放照片的文件名//
img_path = os.listdir(os.path.join(root_dir, target_dir)) //括号内先把照片路径整合为字符串,然后通过listdir把照片名称们变为列表赋给img_path//
label = target_dir.split('_')[0] // .split的用法是把字符串分割,从_出分割,形成两个新列表,列表的第一项,也就是“ants”赋给lable//
out_dir = 'ants_lable' /把''ants——lable“字符串给out_dir。方便一会把标签输出同一个文件夹下的新文件夹//
for i in img_path: //遍历img_path,把每一个照片名称以后缀名分割,【0】为照片编号//
file_name = i.split('.jpg')[0] //先看opon的括号内。。连接根目录、输出目录、文件名、加上tix后缀。这是with open的一个用法// //with open(file_path, mode) as file_variable:////其中,file_path是文件的路径,可以是相对路径或绝对路径;mode是打开文件的模式,例如"r"表示只读模式,"w"表示写入模式,"a"表示追加模式等。//
# 在这里执行对文件的操作
with open(os.path.join(root_dir,out_dir,"{}.txt".format(file_name)),'w+') as f:
f.write(label) //对每一个文件把他们的lable写进去
可见.split从_处把 ants_images分割成立两个列表,【0】是ants 【1】是img
import os
root_dir ="D:\\PyCharm\\Py_Projects\\XiaoTuDui\\datasets_jinjieP7\\train"
target_dir = "ants_image"
img_path = os.listdir(os.path.join(root_dir, target_dir))
label = target_dir.split('_')[0]
out_dir = 'ants_lable'
for i in img_path:
file_name = i.split('.jpg')[0]
with open(os.path.join(root_dir,out_dir,"{}.txt".format(file_name)),'w+') as f:
f.write(label)