From c5e0b654454803d73802e54b865526097dfd434e Mon Sep 17 00:00:00 2001 From: Jakub-Prus <68164819+Jakub-Prus@users.noreply.github.com> Date: Thu, 2 Jun 2022 11:11:57 +0200 Subject: [PATCH] model for image classification from file --- ForkliftAgent.py | 2 +- GameModel.py | 8 +++---- data/enum/ItemType.py | 2 +- imageClasification/Classificator.py | 23 ------------------- ...ficatorInside.py => TrainClassificator.py} | 2 +- main.py | 6 ++--- util/PathByEnum.py | 2 +- 7 files changed, 10 insertions(+), 35 deletions(-) rename imageClasification/usedAssets/{ClassificatorInside.py => TrainClassificator.py} (99%) diff --git a/ForkliftAgent.py b/ForkliftAgent.py index 502bdc6..d40448b 100644 --- a/ForkliftAgent.py +++ b/ForkliftAgent.py @@ -103,7 +103,7 @@ class ForkliftAgent(AgentBase): stations = dict(self.graph.packingStations) if i.real_type == ItemType.SHELF: packing_station = stations[PatchType.packingA] - elif i.real_type == ItemType.REFRIGERATOR: + elif i.real_type == ItemType.FRIDGE: packing_station = stations[PatchType.packingB] elif i.real_type == ItemType.DOOR: packing_station = stations[PatchType.packingC] diff --git a/GameModel.py b/GameModel.py index 9823374..a373124 100644 --- a/GameModel.py +++ b/GameModel.py @@ -21,8 +21,6 @@ from decision.ActionType import ActionType from pathfinding.PathfinderOnStates import PathFinderOnStates, PathFinderState from util.PathByEnum import PathByEnum from util.PathDefinitions import GridLocation, GridWithWeights -from imageClasification.Classificator import image_clasification - class Phase(Enum): @@ -190,13 +188,13 @@ class GameModel(Model): def recognise_item(self, item: Item): # TODO IMAGE PROCESSING - val = image_clasification(self.picture_visualization.img, self.classificator) + val = self.classificator.image_clasification(self.picture_visualization.img) print("VAL: {}".format(val)) if val == ItemType.DOOR: item.guessed_type = ItemType.DOOR - elif val == ItemType.REFRIGERATOR: - item.guessed_type = ItemType.REFRIGERATOR + elif val == ItemType.FRIDGE: + item.guessed_type = ItemType.FRIDGE elif val == ItemType.SHELF: item.guessed_type = ItemType.SHELF diff --git a/data/enum/ItemType.py b/data/enum/ItemType.py index af038ed..54fc4c1 100644 --- a/data/enum/ItemType.py +++ b/data/enum/ItemType.py @@ -4,4 +4,4 @@ from enum import Enum class ItemType(Enum): DOOR = "door" SHELF = "shelf" - REFRIGERATOR = "refrigerator" \ No newline at end of file + FRIDGE = "fridge" \ No newline at end of file diff --git a/imageClasification/Classificator.py b/imageClasification/Classificator.py index faf6481..e69de29 100644 --- a/imageClasification/Classificator.py +++ b/imageClasification/Classificator.py @@ -1,23 +0,0 @@ -import numpy as np -import tensorflow as tf - - -def image_clasification(image_path, model): - # loaded_model = keras.models.load_model("my_model") - class_names = ['door', 'refrigerator', 'shelf'] - - img = tf.keras.utils.load_img( - image_path, target_size=(180, 180) - ) - img_array = tf.keras.utils.img_to_array(img) - img_array = tf.expand_dims(img_array, 0) # Create a batch - - predictions = model.predict(img_array) - score = tf.nn.softmax(predictions[0]) - # print( - # "This image most likely belongs to {} with a {:.2f} percent confidence." - # .format(class_names[np.argmax(score)], 100 * np.max(score)) - # ) - return class_names[np.argmax(score)] - - diff --git a/imageClasification/usedAssets/ClassificatorInside.py b/imageClasification/usedAssets/TrainClassificator.py similarity index 99% rename from imageClasification/usedAssets/ClassificatorInside.py rename to imageClasification/usedAssets/TrainClassificator.py index 0cc3b44..4f9d2fd 100644 --- a/imageClasification/usedAssets/ClassificatorInside.py +++ b/imageClasification/usedAssets/TrainClassificator.py @@ -9,7 +9,7 @@ from tensorflow.keras import layers from tensorflow.keras.models import Sequential -class ClassificatorInside(): +class Classificator(): def __init__(self, data_dir: str) -> None: super().__init__() diff --git a/main.py b/main.py index d2511cc..1991f58 100644 --- a/main.py +++ b/main.py @@ -2,7 +2,6 @@ import random from mesa.visualization.ModularVisualization import ModularServer from mesa.visualization.modules import CanvasGrid -from tensorflow import keras from ForkliftAgent import ForkliftAgent from GameModel import GameModel @@ -10,6 +9,7 @@ from PatchAgent import PatchAgent from PatchType import PatchType from PictureVisualizationAgent import PictureVisualizationAgent from data.enum.Direction import Direction +from imageClasification.Classificator import Classificator from util.PathDefinitions import GridWithWeights from visualization.DisplayAttributeElement import DisplayAttributeElement from visualization.DisplayItemListAttribute import DisplayItemListAttributeElement @@ -88,13 +88,13 @@ if __name__ == '__main__': ordersText = DisplayOrderList("orderList") fulfilled_orders = DisplayOrderList("fulfilled_orders") - loaded_model = keras.models.load_model("./imageClasification/my_model") + classificator = Classificator("imageClasification/images") server = ModularServer(GameModel, [grid, readyText, provided_itesm, recognised_items, ordersText, fulfilled_orders], "Automatyczny Wózek Widłowy", - dict(width=gridHeight, height=gridWidth, graph=diagram, items=50, orders=3, classificator=loaded_model)) + dict(width=gridHeight, height=gridWidth, graph=diagram, items=50, orders=3, classificator=classificator)) server.port = 8888 server.launch() diff --git a/util/PathByEnum.py b/util/PathByEnum.py index 63d3b7c..b517494 100644 --- a/util/PathByEnum.py +++ b/util/PathByEnum.py @@ -9,7 +9,7 @@ class PathByEnum: if item == ItemType.DOOR: a = str(random.randint(1, 10)) return "item_images/door/drzwi" + a + ".jpg" - if item == ItemType.REFRIGERATOR: + if item == ItemType.FRIDGE: a = str(random.randint(1, 10)) return "item_images/refrigerator/lodowka" + a + ".jpg" if item == ItemType.SHELF: