From 43c13acdee71b0d2a7ece1d847316681b42c8622 Mon Sep 17 00:00:00 2001 From: Pawel Felcyn Date: Mon, 29 May 2023 09:57:52 +0200 Subject: [PATCH] recognizing garbage --- garbage.py | 5 +- garbageTruck.py | 12 ++--- machine_learning/decisionTree.py | 89 ++++++++++++++++++++++++++----- machine_learning/model.pkl | Bin 19433 -> 26921 bytes model.pkl | Bin 19433 -> 0 bytes movement.py | 89 ++++++++++++++++++++++++++++++- 6 files changed, 172 insertions(+), 23 deletions(-) delete mode 100644 model.pkl diff --git a/garbage.py b/garbage.py index 205e00c..fe25723 100644 --- a/garbage.py +++ b/garbage.py @@ -32,9 +32,10 @@ class Garbage: self.does_din = does_din -class RecognizedGarbage(Garbage): +class RecognizedGarbage: garbage_type: GarbageType + src: Garbage def __init__(self, src: Garbage, garbage_type: GarbageType) -> None: - super().__init__(src.img) self.garbage_type = garbage_type + self.src = src diff --git a/garbageTruck.py b/garbageTruck.py index 5584adc..94f9cd9 100644 --- a/garbageTruck.py +++ b/garbageTruck.py @@ -1,6 +1,6 @@ from typing import List, Tuple from agentOrientation import AgentOrientation -from garbage import RecognizedGarbage +from garbage import GarbageType, RecognizedGarbage from gameContext import GameContext class GarbageTruck: @@ -22,19 +22,19 @@ class GarbageTruck: def sort_garbage(self, RecognizedGarbage) -> None: - if RecognizedGarbage.garbage_type == 0: + if RecognizedGarbage.garbage_type == GarbageType.PAPER: self.paper.append(RecognizedGarbage) - elif RecognizedGarbage.garbage_type == 1: + elif RecognizedGarbage.garbage_type == GarbageType.PLASTIC_AND_METAL: self.plastic_and_metal.append(RecognizedGarbage) - elif RecognizedGarbage.garbage_type == 3: + elif RecognizedGarbage.garbage_type == GarbageType.GLASS: self.glass.append(RecognizedGarbage) - elif RecognizedGarbage.garbage_type == 4: + elif RecognizedGarbage.garbage_type == GarbageType.BIO: self.bio.append(RecognizedGarbage) - elif RecognizedGarbage.garbage_type == 5: + elif RecognizedGarbage.garbage_type == GarbageType.MIXED: self.mixed.append(RecognizedGarbage) def render(self, game_context: GameContext) -> None: diff --git a/machine_learning/decisionTree.py b/machine_learning/decisionTree.py index 68a3950..40d9965 100644 --- a/machine_learning/decisionTree.py +++ b/machine_learning/decisionTree.py @@ -21,29 +21,90 @@ def _read_training_data() -> TrainingData: classes.append(line_class) return TrainingData(attributes, classes) +def attributes_to_floats(attributes: list[str]) -> list[float]: + output: list[float] = [] + if attributes[0] == 'Longitiudonal': + output.append(0) + elif attributes[0] == 'Round': + output.append(1) + elif attributes[0] == 'Flat': + output.append(2) + elif attributes[0] == 'Irregular': + output.append(3) + + if attributes[1] == 'Low': + output.append(0) + elif attributes[1] == 'Medium': + output.append(1) + elif attributes[1] == 'High': + output.append(2) + + + if attributes[2] == "Yes": + output.append(0) + else: + output.append(1) + + if attributes[3] == 'Low': + output.append(0) + elif attributes[3] == 'Medium': + output.append(1) + elif attributes[3] == 'High': + output.append(2) + + if attributes[4] == 'Low': + output.append(0) + elif attributes[4] == 'Medium': + output.append(1) + elif attributes[4] == 'High': + output.append(2) + + if attributes[5] == 'Transparent': + output.append(0) + elif attributes[5] == 'Light': + output.append(1) + elif attributes[5] == 'Dark': + output.append(2) + elif attributes[5] == "Colorful": + output.append(3) + + if attributes[6] == 'Low': + output.append(0) + elif attributes[6] == 'Medium': + output.append(1) + elif attributes[6] == 'High': + output.append(2) + + if attributes[7] == "Yes": + output.append(0) + else: + output.append(1) + return output + + trainning_data = _read_training_data() X = trainning_data.attributes Y = trainning_data.classes -le_shape = LabelEncoder() -le_flexibility = LabelEncoder() -le_color = LabelEncoder() +# le_shape = LabelEncoder() +# le_flexibility = LabelEncoder() +# le_color = LabelEncoder() -le_shape.fit([x[0] for x in X]) -le_flexibility.fit([x[3] for x in X]) -le_color.fit([x[4] for x in X]) +# le_shape.fit([x[0] for x in X]) +# le_flexibility.fit([x[3] for x in X]) +# le_color.fit([x[4] for x in X]) -X_encoded = np.array([ - [le_shape.transform([x[0]])[0], x[1], x[2], le_flexibility.transform([x[3]])[0], le_color.transform([x[4]])[0]] - for x in X -]) +# X_encoded = np.array([ +# [le_shape.transform([x[0]])[0], x[1], x[2], le_flexibility.transform([x[3]])[0], le_color.transform([x[4]])[0]] +# for x in X +# ]) -encoder = OneHotEncoder(categories='auto', sparse=False) -X_encoded = encoder.fit_transform(X_encoded) +# encoder = OneHotEncoder(categories='auto', sparse=False) +# X_encoded = encoder.fit_transform(X_encoded) model = tree.DecisionTreeClassifier() -model.fit(X_encoded, Y) - +encoded = [_attributes_to_floats(x) for x in X] +dtc = model.fit(encoded, Y) joblib.dump(model, 'model.pkl') \ No newline at end of file diff --git a/machine_learning/model.pkl b/machine_learning/model.pkl index f79ca17ddaccc6a55ed247b299c9299f8f1d88fe..96a720670c84751d261d35286396b88775746e6e 100644 GIT binary patch literal 26921 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 P=`8G6)Un7L?&|m-&l>__ literal 19433 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 M!J)w+zdADbfB&a;*#H0l diff --git a/model.pkl b/model.pkl deleted file mode 100644 index 062ea22da9342aa6f615f67e7341b76744e6da00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19433 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 None: move_dust_car(path, game_context) next_position = calculate_next_position(game_context.dust_car) game_context.grid[next_position] = GridCellType.VISITED_GARBAGE_CAN - game_context.city.cans_dict[next_position].is_visited = True + can = game_context.city.cans_dict[next_position] + can.is_visited = True + _recognize_garbage(game_context.dust_car, can) pass +def _recognize_garbage(dust_car: GarbageTruck, can: GarbageCan) -> None: + loaded_model = joblib.load('machine_learning/model.pkl') + for garbage in can.garbage: + attributes = [garbage.shape, garbage.flexibility, garbage.does_smell, garbage.weight, garbage.size, garbage.color, garbage.softness, garbage.does_din] + encoded = attributes_to_floats(attributes) + predicted_class = loaded_model.predict([encoded])[0] + garbage_type: GarbageType = None + if predicted_class == 'PAPER': + garbage_type = GarbageType.PAPER + elif predicted_class == 'PLASTIC_AND_METAL': + garbage_type = GarbageType.PLASTIC_AND_METAL + elif garbage_type == 'GLASS': + garbage_type = GarbageType.GLASS + elif predicted_class == 'BIO' : + garbage_type = GarbageType.BIO + elif predicted_class == 'MIXED': + garbage_type = GarbageType.MIXED + print(predicted_class) + recognized_garbage = RecognizedGarbage(garbage, garbage_type) + dust_car.sort_garbage(recognized_garbage) + +def attributes_to_floats(attributes: list[str]) -> list[float]: + output: list[float] = [] + if attributes[0] == 'Longitiudonal': + output.append(0) + elif attributes[0] == 'Round': + output.append(1) + elif attributes[0] == 'Flat': + output.append(2) + elif attributes[0] == 'Irregular': + output.append(3) + + if attributes[1] == 'Low': + output.append(0) + elif attributes[1] == 'Medium': + output.append(1) + elif attributes[1] == 'High': + output.append(2) + + + if attributes[2] == "Yes": + output.append(0) + else: + output.append(1) + + if attributes[3] == 'Low': + output.append(0) + elif attributes[3] == 'Medium': + output.append(1) + elif attributes[3] == 'High': + output.append(2) + + if attributes[4] == 'Low': + output.append(0) + elif attributes[4] == 'Medium': + output.append(1) + elif attributes[4] == 'High': + output.append(2) + + if attributes[5] == 'Transparent': + output.append(0) + elif attributes[5] == 'Light': + output.append(1) + elif attributes[5] == 'Dark': + output.append(2) + elif attributes[5] == "Colorful": + output.append(3) + + if attributes[6] == 'Low': + output.append(0) + elif attributes[6] == 'Medium': + output.append(1) + elif attributes[6] == 'High': + output.append(2) + + if attributes[7] == "Yes": + output.append(0) + else: + output.append(1) + return output + def move_dust_car(actions: list[AgentActionType], game_context: GameContext) -> None: for action in actions: