#数据集的加工
import cv2
import os
import numpy as np
'''def rebuild(dir):
for root,dirs,files in os.walk(dir):
for file in files:
filepath = os.path.join(root,file)
try:
image = cv2.imread(filepath)
dim = (227,227)
resized = cv2.resize(image,dim)
path = "cat_and_dog/cat_and_dog/"+file
cv2.imwrite(path,resized)
except:
print(filepath)
os.remove(filepath)
cv2.waitKey(0)
rebuild("cat_and_dog/train")'''
#在这里导入的是图片集的根目录,os对数据集所在的文件夹进行读取,之后的一个for循环重建了图片数据所在的路径,在图片被重构后重新写入给定的位置
#需要提醒的是:笔者在这个代码段中对数据的读写是在一个try区域中,因为在整个数据集中不可避免地包含和出现坏地图片,这里当程序出现异常时,最简单地办法
#就是跳过出现问题地图片继续执行下去,因此在except模块中使用了os.remove函数对图片进行删除
'''第二步:图片数据集转换为Tensorflow专用格式'''
def get_file(file_dir):
images = []
temp = []
for root,sub_folders,files in os.walk(file_dir):
#image directories 图像目录
for name in files:
images.append(os.path.join(root,name))
#get 10 sub_folders获取10个子文件夹
for name in sub_folders:
temp.append(os.path.join(root,name))
# print(files)
#assign 10 labels based on the folder names
#根据文件夹名称分配10个标签
labels=[]
for one_folder in temp:
n_img = len(os.listdir(one_folder))
letter = one_folder.split('\')[-1]
print(temp)
if letter == 'cat':
labels = np.append(labels, n_img * [0])
else:
labels = np.append(labels, n_img[1])
# shuffle洗牌
temp = np.array([images, labels])
temp = temp.transpose()
np.random.shuffle(temp)
image_list = list(temp[:, 0])
labels_list = list(temp[:, 1])
label_list = [int(float(i)) for i in labels_list]
return image_list, label_list
#上面地代码段中,首先是对数据集文件的位置进行读取,之后根据文件夹名称的不同将处于不同文件夹中的图片标签设置为0或者1,如果由更多分类的话可以根据这个格式
#设置更多的标签类进行保存,而numpy对数组的调整重构了存储有对应文件位置和文件标签的矩阵,并将其返回
get_file("cat_and_dog/cat_and_dog/")
#数据集的加工
import cv2
import os
import numpy as np