From e8bc0b6722779f6023f36a924560731edb1a632d Mon Sep 17 00:00:00 2001 From: Kamila Bobkowska Date: Sun, 10 May 2020 16:27:46 +0000 Subject: [PATCH] touch ups --- checkingTrash.py | 231 ++++++++++++++++++++++++----------------------- 1 file changed, 117 insertions(+), 114 deletions(-) diff --git a/checkingTrash.py b/checkingTrash.py index 2ef5a4e..9aa5087 100644 --- a/checkingTrash.py +++ b/checkingTrash.py @@ -1,114 +1,117 @@ - -import os -import numpy as np -import random -import shutil -from keras.models import Sequential -from keras.layers import Conv2D, Flatten, MaxPooling2D, Dense -from keras.preprocessing import image - -#dataset from https://www.kaggle.com/asdasdasasdas/garbage-classification - -'''#sepperating the file into training and testing data, creation of folders by hand removal of 75 images from papers for a more even distribution -def sepperate(type): - for i in type: - folder = "Garbage classification\\Garbage classification\\" + i - destination = "Garbage classification\\testset\\" + i - howmany = len(os.listdir(folder)) - for j in range(int(howmany*0.2)): - move1 = random.choice(os.listdir(folder)) - source = "Garbage classification\\Garbage classification\\" + i + "\\" + move1 - d = shutil.move(source, destination, copy_function = shutil.copytree) - - -types = ["cardboard", "glass", "metal", "paper", "plastic"] -sepperate(types) -os.rename("Garbage classification\\Garbage classification", "Garbage classification\\trainset") -''' - - -classifier = Sequential() -classifier.add(Conv2D(32, (3, 3), input_shape=(110, 110, 3), activation = "relu")) -classifier.add(MaxPooling2D(pool_size = (2, 2))) -classifier.add(Conv2D(64, (3, 3), activation = "relu")) -classifier.add(MaxPooling2D(pool_size=(2, 2))) -# this layer in ver 4 -classifier.add(Conv2D(32, (3, 3), activation = "relu")) -classifier.add(MaxPooling2D(pool_size=(2, 2))) -# ----------------- -classifier.add(Flatten()) -classifier.add(Dense(activation = "relu", units = 64 )) -classifier.add(Dense(activation = "softmax", units = 5)) -classifier.compile(optimizer = "adam", loss = "binary_crossentropy", metrics = ["accuracy"]) - - -from keras.preprocessing.image import ImageDataGenerator - -train_datagen = ImageDataGenerator( - rescale=1./255, - shear_range=0.1, - zoom_range=0.1, - width_shift_range=0.1, - height_shift_range=0.1, - horizontal_flip=True, - vertical_flip=True, -) - -test_datagen = ImageDataGenerator( - rescale=1./255, - validation_split=0.1 -) - -train_generator = train_datagen.flow_from_directory( - "Garbage classification\\trainset", - target_size=(110, 110), - batch_size=16, - class_mode='categorical', - #seed=0 -) - -test_generator = test_datagen.flow_from_directory( - "Garbage classification\\testset", - target_size=(110, 110), - batch_size=16, - class_mode='categorical', -) - - -#Teaching the classifier -'''classifier.fit_generator( train_generator, steps_per_epoch = 150, epochs = 25, validation_data = test_generator ) -classifier.save_weights('model_ver_4.h5')''' - -import matplotlib.pyplot as plt -labels = (train_generator.class_indices) -labels = dict((value,key) for key,value in labels.items()) - - -classifier.load_weights("model_ver_4.h5") -import random - - -def getTrashPhoto(x, type): - for i in range(x): - kind = random.choice(type) - path = "Garbage classification\\testset\\" + kind - file = random.choice(os.listdir(path)) - path = "Garbage classification\\testset\\" + kind + "\\" + file - gz = image.load_img(path, target_size = (110,110)) - ti = image.img_to_array(gz) - ti=np.array(ti)/255.0 - ti = np.expand_dims(ti, axis = 0) - prediction = classifier.predict(ti) - plt.subplot(1, 3, i+1) - plt.imshow(gz) - plt.title("AI thinks:%s \nReality:\n %s" % (labels[np.argmax(prediction)], file)) - plt.show() - - -types = ["cardboard", "glass", "metal", "paper", "plastic"] -type = ["metal"] - -getTrashPhoto(3, types) - - -plt.show() + +import os +import numpy as np +import random +import shutil +from keras.models import Sequential +from keras.layers import Conv2D, Flatten, MaxPooling2D, Dense +from keras.preprocessing import image +from keras.preprocessing.image import ImageDataGenerator +import matplotlib.pyplot as plt +import random + +#dataset from https://www.kaggle.com/asdasdasasdas/garbage-classification + +'''#sepperating the file into training and testing data, creation of folders by hand removal of 75 images from papers for a more even distribution +def sepperate(type): + for i in type: + folder = "Garbage classification\\Garbage classification\\" + i + destination = "Garbage classification\\testset\\" + i + howmany = len(os.listdir(folder)) + for j in range(int(howmany*0.2)): + move1 = random.choice(os.listdir(folder)) + source = "Garbage classification\\Garbage classification\\" + i + "\\" + move1 + d = shutil.move(source, destination, copy_function = shutil.copytree) + + +types = ["cardboard", "glass", "metal", "paper", "plastic"] +sepperate(types) +os.rename("Garbage classification\\Garbage classification", "Garbage classification\\trainset") +''' + + +classifier = Sequential() +classifier.add(Conv2D(32, (3, 3), input_shape=(110, 110, 3), activation = "relu")) +classifier.add(MaxPooling2D(pool_size = (2, 2))) +classifier.add(Conv2D(64, (3, 3), activation = "relu")) +classifier.add(MaxPooling2D(pool_size=(2, 2))) +# this layer in ver 4 +classifier.add(Conv2D(32, (3, 3), activation = "relu")) +classifier.add(MaxPooling2D(pool_size=(2, 2))) +# ----------------- +classifier.add(Flatten()) +classifier.add(Dense(activation = "relu", units = 64 )) +classifier.add(Dense(activation = "softmax", units = 5)) +classifier.compile(optimizer = "adam", loss = "binary_crossentropy", metrics = ["accuracy"]) + + + + +train_datagen = ImageDataGenerator( + rescale=1./255, + shear_range=0.1, + zoom_range=0.1, + width_shift_range=0.1, + height_shift_range=0.1, + horizontal_flip=True, + vertical_flip=True, +) + +test_datagen = ImageDataGenerator( + rescale=1./255, + validation_split=0.1 +) + +train_generator = train_datagen.flow_from_directory( + "Garbage classification\\trainset", + target_size=(110, 110), + batch_size=16, + class_mode='categorical', + #seed=0 +) + +test_generator = test_datagen.flow_from_directory( + "Garbage classification\\testset", + target_size=(110, 110), + batch_size=16, + class_mode='categorical', +) + + +#Teaching the classifier +'''classifier.fit_generator( train_generator, steps_per_epoch = 165, epochs = 32, validation_data = test_generator ) +classifier.save_weights('model_ver_5.h5')''' + + +labels = (train_generator.class_indices) +labels = dict((value,key) for key,value in labels.items()) + + +classifier.load_weights("model_ver_5.h5") + + + +def getTrashPhoto(x, type): + for i in range(x): + kind = random.choice(type) + path = "Garbage classification\\testset\\" + kind + file = random.choice(os.listdir(path)) + path = "Garbage classification\\testset\\" + kind + "\\" + file + var = image.load_img(path, target_size = (110,110)) + ti = image.img_to_array(var) + ti=np.array(ti)/255.0 + ti = np.expand_dims(ti, axis = 0) + prediction = classifier.predict(ti) + plt.subplot(1, 3, i+1) + plt.imshow(var) + plt.title("AI thinks:%s \nReality:\n %s" % (labels[np.argmax(prediction)], file)) + plt.show() + + +types = ["cardboard", "glass", "metal", "paper", "plastic"] +type = ["metal"] + +getTrashPhoto(3, types) + + +plt.show()