refactoring
@ -1,69 +0,0 @@
|
|||||||
import tensorflow as tf
|
|
||||||
from keras import layers
|
|
||||||
|
|
||||||
# Normalizes the pixel values of an image to the range [0, 1].
|
|
||||||
|
|
||||||
|
|
||||||
def normalize(image, label):
|
|
||||||
return image / 255, label
|
|
||||||
|
|
||||||
|
|
||||||
# Set the paths to the folder containing the training data
|
|
||||||
train_data_dir = "Network/Training/"
|
|
||||||
# Set the number of classes and batch size
|
|
||||||
num_classes = 3
|
|
||||||
batch_size = 32
|
|
||||||
# Set the image size and input shape
|
|
||||||
img_width, img_height = 100, 100
|
|
||||||
input_shape = (img_width, img_height, 1)
|
|
||||||
# Load the training and validation data
|
|
||||||
train_ds = tf.keras.utils.image_dataset_from_directory(
|
|
||||||
train_data_dir,
|
|
||||||
validation_split=0.2,
|
|
||||||
subset="training",
|
|
||||||
shuffle=True,
|
|
||||||
seed=123,
|
|
||||||
image_size=(img_height, img_width),
|
|
||||||
batch_size=batch_size)
|
|
||||||
|
|
||||||
val_ds = tf.keras.utils.image_dataset_from_directory(
|
|
||||||
train_data_dir,
|
|
||||||
validation_split=0.2,
|
|
||||||
subset="validation",
|
|
||||||
shuffle=True,
|
|
||||||
seed=123,
|
|
||||||
image_size=(img_height, img_width),
|
|
||||||
batch_size=batch_size)
|
|
||||||
# Get the class names
|
|
||||||
class_names = train_ds.class_names
|
|
||||||
print(class_names)
|
|
||||||
# Normalize the training and validation data
|
|
||||||
train_ds = train_ds.map(normalize)
|
|
||||||
val_ds = val_ds.map(normalize)
|
|
||||||
# Define the model architecture
|
|
||||||
model = tf.keras.Sequential([
|
|
||||||
layers.Conv2D(16, 3, padding='same', activation='relu',
|
|
||||||
input_shape=(img_height, img_width, 1)),
|
|
||||||
layers.MaxPooling2D(),
|
|
||||||
layers.Conv2D(32, 3, padding='same', activation='relu'),
|
|
||||||
layers.MaxPooling2D(),
|
|
||||||
layers.Conv2D(64, 3, padding='same', activation='relu'),
|
|
||||||
layers.MaxPooling2D(),
|
|
||||||
layers.Flatten(),
|
|
||||||
layers.Dense(128, activation='relu'),
|
|
||||||
layers.Dense(num_classes, activation='softmax')
|
|
||||||
])
|
|
||||||
# Compile the model
|
|
||||||
model.compile(optimizer='adam',
|
|
||||||
loss=tf.keras.losses.SparseCategoricalCrossentropy(
|
|
||||||
from_logits=True),
|
|
||||||
metrics=['accuracy'])
|
|
||||||
# Print the model summary
|
|
||||||
model.summary()
|
|
||||||
# Train the model
|
|
||||||
epochs = 10
|
|
||||||
model.fit(train_ds,
|
|
||||||
validation_data=val_ds,
|
|
||||||
epochs=epochs)
|
|
||||||
# Save the trained model
|
|
||||||
model.save('Network/trained_model.h5')
|
|
@ -1,50 +0,0 @@
|
|||||||
import os
|
|
||||||
import random
|
|
||||||
import logging
|
|
||||||
import numpy as np
|
|
||||||
import tensorflow as tf
|
|
||||||
from tensorflow import keras
|
|
||||||
from termcolor import colored
|
|
||||||
|
|
||||||
|
|
||||||
class Predictor:
|
|
||||||
def __init__(self):
|
|
||||||
# Turn off interactive logging
|
|
||||||
tf.get_logger().setLevel(logging.ERROR)
|
|
||||||
|
|
||||||
# Load the trained model
|
|
||||||
self.model = keras.models.load_model('Network/trained_model.h5')
|
|
||||||
|
|
||||||
# Load the class names
|
|
||||||
self.class_names = ['table', 'table', 'order']
|
|
||||||
|
|
||||||
# Path to the folder containing test images
|
|
||||||
self.test_images_folder = 'Network/Testing/'
|
|
||||||
|
|
||||||
def predict(self, image_path):
|
|
||||||
# Load and preprocess the test image
|
|
||||||
test_image = keras.preprocessing.image.load_img(
|
|
||||||
image_path, target_size=(100, 100))
|
|
||||||
test_image = keras.preprocessing.image.img_to_array(test_image)
|
|
||||||
test_image = np.expand_dims(test_image, axis=0)
|
|
||||||
test_image = test_image / 255.0 # Normalize the image
|
|
||||||
|
|
||||||
# Reshape the image array to (1, height, width, channels)
|
|
||||||
test_image = np.reshape(test_image, (1, 100, 100, 3))
|
|
||||||
|
|
||||||
# Make predictions
|
|
||||||
predictions = self.model.predict(test_image, verbose=None)
|
|
||||||
predicted_class_index = np.argmax(predictions[0])
|
|
||||||
predicted_class = self.class_names[predicted_class_index]
|
|
||||||
|
|
||||||
print(colored("Predicted class: ", "yellow")+f"{predicted_class}")
|
|
||||||
return predicted_class
|
|
||||||
|
|
||||||
def random_path_img(self) -> str:
|
|
||||||
folder_name = random.choice(os.listdir(self.test_images_folder))
|
|
||||||
folder_path = os.path.join(self.test_images_folder, folder_name)
|
|
||||||
filename = ""
|
|
||||||
while not (filename.endswith('.jpg') or filename.endswith('.jpeg')):
|
|
||||||
filename = random.choice(os.listdir(folder_path))
|
|
||||||
image_path = os.path.join(folder_path, filename)
|
|
||||||
return image_path
|
|
@ -1,64 +0,0 @@
|
|||||||
import os
|
|
||||||
from pathlib import Path
|
|
||||||
import numpy as np
|
|
||||||
import tensorflow as tf
|
|
||||||
from tensorflow import keras
|
|
||||||
|
|
||||||
# Load the trained model
|
|
||||||
model = keras.models.load_model('Network/trained_model.h5')
|
|
||||||
|
|
||||||
# Load the class names
|
|
||||||
class_names = ['table', 'done', 'order']
|
|
||||||
|
|
||||||
# Path to the folder containing test images
|
|
||||||
test_images_folder = 'Network/Testing/'
|
|
||||||
|
|
||||||
# Iterate over the test images
|
|
||||||
i = 0
|
|
||||||
errorcount = 0
|
|
||||||
for folder_name in os.listdir(test_images_folder):
|
|
||||||
folder_path = os.path.join(test_images_folder, folder_name)
|
|
||||||
if os.path.isdir(folder_path):
|
|
||||||
print('Testing images in folder:', folder_name)
|
|
||||||
|
|
||||||
# True class based on folder name
|
|
||||||
if folder_name == 'Empty':
|
|
||||||
true_class = 'table'
|
|
||||||
elif folder_name == 'Food':
|
|
||||||
true_class = 'done'
|
|
||||||
elif folder_name == 'People':
|
|
||||||
true_class = 'order'
|
|
||||||
|
|
||||||
# Iterate over the files in the subfolder
|
|
||||||
for filename in os.listdir(folder_path):
|
|
||||||
if filename.endswith('.jpg') or filename.endswith('.jpeg'):
|
|
||||||
i += 1
|
|
||||||
# Load and preprocess the test image
|
|
||||||
image_path = os.path.join(folder_path, filename)
|
|
||||||
test_image = keras.preprocessing.image.load_img(
|
|
||||||
image_path, target_size=(100, 100))
|
|
||||||
test_image = keras.preprocessing.image.img_to_array(test_image)
|
|
||||||
test_image = np.expand_dims(test_image, axis=0)
|
|
||||||
test_image = test_image / 255.0 # Normalize the image
|
|
||||||
|
|
||||||
# Reshape the image array to (1, height, width, channels)
|
|
||||||
test_image = np.reshape(test_image, (1, 100, 100, 3))
|
|
||||||
|
|
||||||
# Make predictions
|
|
||||||
predictions = model.predict(test_image)
|
|
||||||
predicted_class_index = np.argmax(predictions[0])
|
|
||||||
predicted_class = class_names[predicted_class_index]
|
|
||||||
|
|
||||||
direct = 'Network/Results/'
|
|
||||||
filename = str(i) + predicted_class + '.jpeg'
|
|
||||||
test_image = np.reshape(test_image, (100, 100, 3))
|
|
||||||
Path(direct).mkdir(parents=True, exist_ok=True)
|
|
||||||
tf.keras.preprocessing.image.save_img(
|
|
||||||
direct+filename, test_image)
|
|
||||||
if predicted_class != true_class:
|
|
||||||
errorcount += 1
|
|
||||||
print('Image:', filename)
|
|
||||||
print('True class:', true_class)
|
|
||||||
print('Predicted class:', predicted_class)
|
|
||||||
print()
|
|
||||||
print('Error count: ', errorcount)
|
|
@ -1,58 +0,0 @@
|
|||||||
from pathlib import Path
|
|
||||||
import numpy as np
|
|
||||||
import tensorflow as tf
|
|
||||||
from tensorflow import keras
|
|
||||||
|
|
||||||
# Load the trained model
|
|
||||||
model = keras.models.load_model('Network/trained_model.h5')
|
|
||||||
|
|
||||||
# Load the class names
|
|
||||||
class_names = ['table', 'done', 'order']
|
|
||||||
|
|
||||||
# Load and preprocess the validation dataset
|
|
||||||
data_dir = "Network/Training/"
|
|
||||||
image_size = (100, 100)
|
|
||||||
batch_size = 32
|
|
||||||
|
|
||||||
val_ds = tf.keras.preprocessing.image_dataset_from_directory(
|
|
||||||
data_dir,
|
|
||||||
validation_split=0.2,
|
|
||||||
subset="validation",
|
|
||||||
seed=123,
|
|
||||||
image_size=image_size,
|
|
||||||
batch_size=batch_size,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Select 20 random images from the validation set
|
|
||||||
val_images = []
|
|
||||||
val_labels = []
|
|
||||||
for images, labels in val_ds.unbatch().shuffle(1000).take(60):
|
|
||||||
val_images.append(images)
|
|
||||||
val_labels.append(labels)
|
|
||||||
|
|
||||||
# Make predictions on the random images
|
|
||||||
errorcount = 0
|
|
||||||
for i in range(60):
|
|
||||||
test_image = val_images[i]
|
|
||||||
test_label = val_labels[i]
|
|
||||||
test_image = np.expand_dims(test_image, axis=0)
|
|
||||||
test_image = test_image / 255.0 # Normalize the image
|
|
||||||
|
|
||||||
# Make predictions
|
|
||||||
predictions = model.predict(test_image)
|
|
||||||
predicted_class_index = np.argmax(predictions[0])
|
|
||||||
predicted_class = class_names[predicted_class_index]
|
|
||||||
|
|
||||||
true_class = class_names[test_label]
|
|
||||||
|
|
||||||
direct = 'Network/Results/'
|
|
||||||
filename = predicted_class + str(i) + '.jpeg'
|
|
||||||
Path(direct).mkdir(parents=True, exist_ok=True)
|
|
||||||
tf.keras.preprocessing.image.save_img(direct+filename, val_images[i])
|
|
||||||
if predicted_class != true_class:
|
|
||||||
errorcount += 1
|
|
||||||
print('Image', i+1)
|
|
||||||
print('True class:', true_class)
|
|
||||||
print('Predicted class:', predicted_class)
|
|
||||||
print()
|
|
||||||
print('Error count: ', errorcount)
|
|
7
agent.py
@ -1,14 +1,9 @@
|
|||||||
import random
|
|
||||||
from termcolor import colored
|
|
||||||
from src.Engine import Engine
|
from src.Engine import Engine
|
||||||
from src.obj.Waiter import Waiter
|
from src.obj.Waiter import Waiter
|
||||||
from src.obj.Kitchen import Kitchen
|
from src.obj.Kitchen import Kitchen
|
||||||
from src.controller.LayoutController import LayoutController
|
from src.controller.LayoutController import LayoutController
|
||||||
|
|
||||||
from src.controller.ImageController import ImageController
|
from src.controller.ImageController import ImageController
|
||||||
|
|
||||||
print(colored("Initialization...", "green"))
|
|
||||||
|
|
||||||
SCREEN_SIZE = [800, 800]
|
SCREEN_SIZE = [800, 800]
|
||||||
SQUARE_SIZE = 80
|
SQUARE_SIZE = 80
|
||||||
SLEEP_DURATION = 0.125
|
SLEEP_DURATION = 0.125
|
||||||
@ -20,6 +15,4 @@ kitchen = Kitchen([0, 0], 0, SQUARE_SIZE, SCREEN_SIZE, store)
|
|||||||
engine = Engine(SCREEN_SIZE, SQUARE_SIZE, kitchen, waiter, SLEEP_DURATION)
|
engine = Engine(SCREEN_SIZE, SQUARE_SIZE, kitchen, waiter, SLEEP_DURATION)
|
||||||
layout = LayoutController(engine, store).create_and_subscribe(COUNT_OF_OBJECTS)
|
layout = LayoutController(engine, store).create_and_subscribe(COUNT_OF_OBJECTS)
|
||||||
|
|
||||||
print(colored("Starting model...", "green"))
|
|
||||||
|
|
||||||
engine.loop()
|
engine.loop()
|
||||||
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |