利用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