import os import cv2 import numpy as np import tkinter as tk from tkinter import filedialog from read_data import * from PIL import Image class ModelObj: # 网络对象 def __init__(self, ObjID, ObjType, ObjLable, ParaString, ObjX, ObjY): self.ObjID = ObjID # 图元号 self.ObjType = ObjType # 图元类别 self.ObjLable = ObjLable # 对象标签 self.ParaString = ParaString # 参数字符串 self.ObjX = ObjX # 对象位置x坐标 self.ObjY = ObjY # 对象位置y坐标 def image_to_array(path, height, width): img = Image.open(path).convert("L") # 转换为灰度模式 img = img.resize((height, width)) # 将图片缩放为height*width的固定大小 data = np.array(img) # 将图片转换为数组格式 data = data / 255.0 # 将数组中的数值归一化,除以255 return data class Data_Class(ModelObj): # 数据集网络对象 def __init__(self, ObjID, ObjType, ObjLable, ParaString, ObjX, ObjY): super().__init__(ObjID, ObjType, ObjLable, ParaString, ObjX, ObjY) self.LoadData = self.load_data # 基本操作函数 self.SetDataPara = self.SetLoadData # 参数设置函数 def load_data(self, DataPara): # 定义加载数据集load_data() global SubFolders listimages = [] # 存储图片的列表 list_path = [] # read_folders方法读取文件夹中子文件夹中数据集 SubFolders, train = read_folders(DataPara["train_imgPath"]) list_path.append(train) _, path_list = read_folders(DataPara["test_imgPath"]) list_path.append(path_list) for data_path in list_path: images = [] # 存储图片的列表 for path in data_path: img = image_to_array(path, DataPara["img_width"], DataPara["img_height"]) # 读取图片数据 img = img.T # 转置,图像的行和列将互换位置。 images.append(img) # 将图片数组添加到训练集图片列表中 listimages.append(np.array(images)) # 返回转换后的数组 return listimages[0], listimages[1] def SetLoadData(self):# 定义加载数据集的参数SetLoadData() # 设置数据集路径信息 # 训练集文件夹的位置 train_imgPath = input("请输入训练集文件夹的位置:") # 'data_classification/train/' # 测试集文件夹的位置 test_imgPath = input("请输入测试集文件夹的位置:") # 'data_classification/test/' img_width = int(input("请输入图片宽度:")) # 48 img_height = int(input("请输入图片高度:")) # 48 # 设置每批次读入图片的数量 batch_size = int(input("请输入每批次读入图片的数量:")) # 批次大小 32 # 返回DataPara参数,这里用一个字典来存储 DataPara = {"train_imgPath": train_imgPath, "test_imgPath": test_imgPath, "img_width": img_width, "img_height": img_height, "batch_size": batch_size} return DataPara if __name__ == '__main__': DataSet = Data_Class("DataSet1", 1, "数据集1", [], 120, 330) # setload_data()函数,获取加载数据集的参数 DataPara = DataSet.SetDataPara() train_images, test_images = DataSet.LoadData(DataPara)