自用pytorch之图片、文本导入、标签导出(小土堆)

学习路线 爆肝杰哥 装一系列东西 在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)

自用pytorch之图片、文本导入、标签导出(小土堆)_第1张图片
点此处重置

然后在控制台依次输入
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
自用pytorch之图片、文本导入、标签导出(小土堆)_第2张图片

可以看到root_dir
path等

4、
如果我们要第一个变量可以输入
ants_dataset[0]
在这里插入图片描述

5、
输入:

img,label=ants_dataset[0]
img.show()

由于我们在My_Data类中创建了
自用pytorch之图片、文本导入、标签导出(小土堆)_第3张图片

所以可以返回 img lable

6、然后我们可以添加两行代码,传入密封的数据集
自用pytorch之图片、文本导入、标签导出(小土堆)_第4张图片

控制台输入

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

在这里插入图片描述
自用pytorch之图片、文本导入、标签导出(小土堆)_第5张图片
右侧可以看到被整合到一起了

1、具体查看
自用pytorch之图片、文本导入、标签导出(小土堆)_第6张图片
发现总数据集长度245,其中蚂蚁124.。。我们把第123传给img,lable,发现img是蚂蚁。

加深印象,再进阶
新建一个文件夹
自用pytorch之图片、文本导入、标签导出(小土堆)_第7张图片
自用pytorch之图片、文本导入、标签导出(小土堆)_第8张图片
把之前的ants改成ants——image 同时新建lable文件夹,在lable中,创建txt
自用pytorch之图片、文本导入、标签导出(小土堆)_第9张图片
自用pytorch之图片、文本导入、标签导出(小土堆)_第10张图片

输入代码

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写进去

自用pytorch之图片、文本导入、标签导出(小土堆)_第11张图片

在这里插入图片描述
可见是谁的
自用pytorch之图片、文本导入、标签导出(小土堆)_第12张图片

可见.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)

你可能感兴趣的:(小土堆,pytorch基础,pytorch,人工智能,python)