Я новичок в Python и TensorFlow. При компиляции кода каким-то образом эта ошибка появляется, я пытался приложить много усилий, но все еще не могу ее исправить
Файл никогда не отображается
import tenorflow как tf из tenorflow import keras import numpy as npслучайный импорт из keras.utils импорт np_utils из PIL импорт изображения импорт cv2 импорт или импорт PIL.ImageOps из keras.preprocessing импорт изображения как image_utils
classes = ["облачно", "солнечно", "дождливо", ""Туманный "]
def binary_to_class (label):" "" Преобразует матрицу двоичного класса в вектор класса (целое число) # Аргументы: label: матрица для преобразования в вектор класса "" "new_lbl = [] для iв диапазоне (len (метка)): new_lbl.append (np.argmax (label [i])) вернуть new_lbl
def get_accuracy_of_class (v_label, y): "" "Возвращает: точность данной метки Args:метка проверки: ожидаемые результаты y: прогнозируемые результаты "" "c = 0 для i в диапазоне (len (y)): если y [i] == v_label [i]: c + = 1, возврат c / len (y)
def Отдельные_данные (v_data, v_label): "" "разделяет валидациюn данные и метка в соответствии с классом no Args: v_data: данные проверки для разделения v_label: метка проверки для разделения Возвращает: массив, который хранит «[val_data, val_label]» в каждом индексе для каждого класса. "" "vd = [[[], []] для _ в диапазоне (5)] для i в диапазоне (len (v_data)): cls = int (v_label [i]) vd [cls] [0] .append(v_data [i]) vd [cls] [1] .append (cls) для i в диапазоне (5): vd [i] [0] = np.array (vd [i] [0]) vd [i][1] = np.array (vd [i] [1]) return vd
def __find_sky_area (path_of_image): read_image = cv2.imread (path_of_image, 50) edge = cv2.Canny (read_image, 150,300)
shape = np.shape(edges)
left = np.sum(edges[0:shape[0] // 2, 0:shape[1] // 2])
right = np.sum(edges[0:shape[0] // 2, shape[1] // 2:])
if right > left:
return 0 # if right side of image includes more building etc. return 0 to define left side(0 side) is sky area
else:
return 1 # if left side of image includes more building etc. return 1 to define right side(1 side) is sky area
def resize_image (base_size, path_of_image, destination, new_image_name): img = Image.open (path_of_image)
if img.size[0] >= img.size[1]:
sky_side = __find_sky_area(path_of_image)
base_height = base_size
wpercent = (base_height / float(img.size[1]))
wsize = int((float(img.size[0]) * float(wpercent)))
img = img.resize((wsize, base_height), Image.ANTIALIAS)
if sky_side == 0: # Left side is sky side, so keep it and crop right side
img = img.crop((0, 0, base_size, img.size[1])) # Keeps sky area in image, crops from other non-sky side
else: # Right side is sky side, so keep it and crop left side
img = img.crop((img.size[0] - base_size, 0, img.size[0],
img.size[1])) # Keeps sky area in image, crops from other non-sky side
img.save(destination + '/' + new_image_name)
else:
base_width = base_size
wpercent = (base_width / float(img.size[0]))
hsize = int((float(img.size[1]) * float(wpercent)))
img = img.resize((base_width, hsize), Image.ANTIALIAS)
img = img.crop((0, 0, img.size[0], base_size)) # Keeps sky area in image, crops from lower part
img.save(destination + '/' + new_image_name)
def prepare_data_set (path, dest, size):# корневой каталог для исходных изображений (которые будут обрезаны) path = 'train'
#root directory as destination to save cropped images(Prepared images will be saved in here)
dest = 'cropped100'
for filename in os.listdir(path):
resize_image(size, # crop size for all images (just change it to define crop size)
path + filename,
dest,
filename)
def image_to_matrix (image_root, dest, size): "" "читает все изображения в заданном каталоге, добавляет его вмассив и маркирует каждое изображение, а затем сохраняет эти модели. "" "
image_root = "cropped100" # Change this root directory of images to create model for them
batch_size_for_models = 5000 # 5000 sized batch models
train_data = []
train_label = []
# list of directory of classes in given path
classes_dir = os.listdir(image_root)
counter = 0 # counter to check size of batch, if 5000 save model and flush lists
fc = 0 # file counter to name models
for cls in classes_dir:
class_list = os.listdir(image_root + cls + "/") # image list in a class directory
for imageName in class_list:
counter += 1
img = image_utils.load_img(image_root + cls + "/" + imageName, target_size=(size, size)) # open an image
img = PIL.ImageOps.invert(img) # inverts it
img = image_utils.img_to_array(img) # converts it to array
train_data.append(img)
train_label.append(int(cls))
if counter == batch_size_for_models:
train_data, train_label = shuffle(train_data, train_label)
np.save(dest+"train_data" + str(fc) + ".npy",
np.array(train_data)) # model root to save image models(image)
np.save(dest+"train_label" + str(fc) + ".npy",
np.array(train_label)) # model root to save image models(label))
train_data = []
train_label = []
fc += 1
counter = 0
# rest of images which stays in list , add their models to model root lastly
if len(train_data) != 0:
train_data, train_label = shuffle(train_data, train_label)
np.save(dest+"train_data.npy", np.array(train_data)) # model root to save image models(image)
np.save(dest+"train_label.npy", np.array(train_label)) # model root to save image models(label)
def shuffle (данные, метка): temp = список (zip (данные, метка)) random.shuffle (temp) вернуть zip (* temp)
defconcatenate (): "" "объединяет первые 1000 изображений, разделенных для каждого класса" "" train_data = np.load ("models100 / train_data8.npy") [: 1000] train_label = np.load ("models100 / train_label8.npy") [: 1000]
temp_data = np.load("models/train_data9.npy")[:1000]
temp_label = np.load("models/train_label9.npy")[:1000]
train_data = np.concatenate((train_data, temp_data), axis=0)
train_label = np.concatenate((train_label, temp_label), axis=0)
temp_data = np.load("models/train_data.npy")
temp_label = np.load("models/train_label.npy")
train_data = np.concatenate((train_data, temp_data), axis=0)
train_label = np.concatenate((train_label, temp_label), axis=0)
train_data, train_label = shuffle(train_data, train_label)
np.save("models/train_data_concat1000.npy", train_data)
np.save("models/train_label_concat1000.npy", train_label)
C: \ Users \ Forge-15 \ PycharmProjects \ Sample2 \ venv \ Scripts \ python.exe C: / Users / Forge-15 / PycharmProjects / Sample2 / Tools. py Использование бэкэнда TensorFlow.
Процесс завершен с кодом выхода 0