121 lines
4.8 KiB
Python
121 lines
4.8 KiB
Python
import os
|
|
import shutil
|
|
|
|
from PIL import Image
|
|
from torchvision.transforms.functional import to_pil_image
|
|
from Load_process.file_processing import Process_File
|
|
from utils.Stomach_Config import Image_Enhance, Training_Config, Loading_Config
|
|
from Training_Tools.PreProcess import Training_Precesses
|
|
from Load_process.LoadData import Loding_Data_Root
|
|
from Training_Tools.Tools import Tool
|
|
from merge_class.merge import merge
|
|
from Load_process.LoadData import Load_Data_Prepare
|
|
|
|
def make_label_list(length, content):
|
|
'''製作label的列表'''
|
|
label_list = []
|
|
for i in range(length):
|
|
label_list.append(content)
|
|
return label_list
|
|
|
|
def Read_Image_Root_And_Image_Enhance(Image_Roots, Save_Root):
|
|
'''讀取Image Root'''
|
|
i = 0
|
|
file = Process_File()
|
|
for Image_Root in Image_Roots:
|
|
try:
|
|
Images = Image.open(Image_Root).convert("RGB")
|
|
|
|
Images = Image_Enhance["gamma"](Images, Image_Enhance["Gamma_Value"])
|
|
for j in range(5):
|
|
Images = Image_Enhance["Median"](Images)
|
|
Images = Image_Enhance["Shapen"](Images)
|
|
|
|
file.JudgeRoot_MakeDir(Save_Root)
|
|
# 使用原始檔名而不是索引編號
|
|
original_filename = os.path.basename(Image_Root)
|
|
path = file.Make_Save_Root(original_filename, Save_Root)
|
|
|
|
Images.save(path)
|
|
# Image = cv2.imread(Image_Root, cv2.IMREAD_COLOR) # 讀檔(彩色)
|
|
# Image = cv2.cvtColor(Image, cv2.COLOR_BGR2RGB)
|
|
except Exception as e:
|
|
print(e)
|
|
|
|
i += 1
|
|
print("已處理 " + str(i) + " 張圖片")
|
|
|
|
pass
|
|
|
|
def Image_Enhance_Training_Data(Training_Loader, Save_Root):
|
|
'''讀取Image Root'''
|
|
# 改成只要在Training時進行影像前處理
|
|
Images, Labels, File_Names, File_Classes = [], [], [], []
|
|
Label_Length = len(Loading_Config["Training_Labels"])
|
|
Process = Training_Precesses(ImageSize = Training_Config["Image_Size"])
|
|
file = Process_File()
|
|
Prepare = Load_Data_Prepare()
|
|
tool = Tool()
|
|
Merge = merge()
|
|
|
|
if file.Judge_File_Exist(Save_Root):
|
|
shutil.rmtree(Save_Root)
|
|
print("檔案已存在,刪除檔案")
|
|
|
|
# 取得One-hot encording 的資料
|
|
tool.Set_OneHotEncording(Loading_Config["Training_Labels"])
|
|
Encording_Label = tool.Get_OneHot_Encording_Label()
|
|
|
|
for inputs, labels, File_Name, File_Class in Training_Loader:
|
|
for i in range(inputs.shape[0]):
|
|
Permute_Image = inputs[i].permute(1, 2, 0)
|
|
Permute_Image *= 255
|
|
Permute_Image = Image_Enhance["gamma"](Permute_Image, Image_Enhance["Gamma_Value"])
|
|
for j in range(5):
|
|
Permute_Image = Image_Enhance["Median"](Permute_Image)
|
|
|
|
Images = Image_Enhance["Shapen"](Permute_Image)
|
|
|
|
Save = file.Make_Save_Root(File_Class[i], Save_Root)
|
|
file.JudgeRoot_MakeDir(Save)
|
|
|
|
path = file.Make_Save_Root(File_Name[i], Save)
|
|
Images.save(path)
|
|
|
|
load = Loding_Data_Root(Loading_Config["Training_Labels"], Loading_Config["Train_Data_Root"], Loading_Config["ImageGenerator_Data_Root"])
|
|
Data_Dict_Data = load.process_main(False)
|
|
|
|
Total_Size_List = []
|
|
for label in Loading_Config["Training_Labels"]:
|
|
Total_Size_List.append(len(Data_Dict_Data[label]))
|
|
|
|
# 做出跟資料相同數量的Label
|
|
Classes = []
|
|
i = 0
|
|
for encording in Encording_Label:
|
|
Classes.append(make_label_list(Total_Size_List[i], encording))
|
|
i += 1
|
|
|
|
# 將資料做成Dict的資料型態
|
|
Prepare.Set_Final_Dict_Data(Loading_Config["Training_Labels"], Data_Dict_Data, Classes, Label_Length)
|
|
Final_Dict_Data = Prepare.Get_Final_Data_Dict()
|
|
keys = list(Final_Dict_Data.keys())
|
|
# Mask_Keys = list(Mask_Data_Dict_Data.keys())
|
|
|
|
Data = Merge.merge_all_image_data(Final_Dict_Data[keys[0]], Final_Dict_Data[keys[1]]) # 將訓練資料合併成一個list
|
|
for i in range(2, Label_Length):
|
|
Data = Merge.merge_all_image_data(Data, Final_Dict_Data[keys[i]]) # 將訓練資料合併成一個list
|
|
|
|
Label = Merge.merge_all_image_data(Final_Dict_Data[keys[Label_Length]], Final_Dict_Data[keys[Label_Length + 1]]) #將訓練資料的label合併成一個label的list
|
|
for i in range(Label_Length + 2, 2 * Label_Length):
|
|
Label = Merge.merge_all_image_data(Label, Final_Dict_Data[keys[i]]) # 將訓練資料合併成一個list
|
|
|
|
DataSet = Process.Setting_DataSet(
|
|
Datas = Data,
|
|
Labels = Label,
|
|
Mask_List = None,
|
|
transform = "Transform"
|
|
)
|
|
Dataloader = Process.Dataloader_Sampler(DataSet, Training_Config["Train_Batch_Size"], True)
|
|
return Dataloader
|