深度学习图像预处理——分类

利用python进行图像预处理——分类



from pexels.com 在计算机视觉的分类任务中,需要给不同类别的数据打上标签。常见的深度学习框架一般可以直接处理**文件夹**,并按照文件夹来给图像打上对应的标签。一般来说文件夹下的结构如下所示:
./train_images
|--class1
    |--001.png
    |--002.png
    |--003.png
    |--xxx.png
|--class2
|--class3
|--classxxx

其中train_images为保存训练数据的根目录。但我们拿到的数据集往往都是下面这个样子的:
这里写图片描述
form flickr.com
随机附带一个标签文件·label.json。我们需要按照标签文件将文件放到不同的文件夹中去。

1.处理标签

如果一个label的格式如下:
[...,
{"image": "7e25ef0a-7cef-2429b82cafd6___YLCV_GCREC 1896.JPG", "disease_class": 4},
{"image": "e1a78324ca1d0c04f514b4372f.jpg", "class": 8},
{"image": "1ecd651560ebf9eaffbff791d3.jpg", "class": 6},...]

我们需要利用json包来进行处理:

import os  #构建目录
import sys
import json  #读取json
import shutil  #复制文件


train_label = './label.json'
train_img_path = './train_images/'
train_data = json.load(open(train_label))  #读入label数据,读入后为字典组成的list数据
print("This dataset totally has %d images"%len(train_data))  #显示数据量


if not os.path.exists('./train'):
    os.mkdir('./train)  #首先建立一个文件夹保存整理好的数据
for i in range(class_num):     #分类数目,为不同类别生产对应的子文件夹
    if not os.path.exists('./train/'+str(i)):
        os.mkdir('./train/'+str(i))

## 按照标签整理数据
count = 0  #计数器,确保所有图片转换完成
for item in train_data:
    count+=1
    class_id = item.get('class')   #读取字典中的分类值,为整数  
    name_id = item.get('image')  #读取字典中的图像文件名
    shutil.copyfile(train_img_path+name_id, './train_dis/'+str(class_id)+'/'+name_id)   #将文件copy到对应的分类文件夹中去
    if count%1000==0:
        print('processed:',count)
print("Totally %d images is prepared"%count)   #这里的输出应该和上面输出的文件数量一致

"""
最后的文件结构如下:
./train
|--1
    |--1.jpg
    |--2.jpg
    |--xxx.jpg
|--2
|--3
|--xxx
"""


from stock.adobe.com

posted @ 2018-09-11 22:46  hitrjj  Views(1267)  Comments(0Edit  收藏  举报