# Sztuczna inteligencja - projekt zespołowy - Autonomiczny Traktor autorzy: Aleksandra Werda, Natalia Wiśniewska, Kinga Jagodzińska, Aleksandra Jonas ## Podprojekt: rozpoznawanie warzyw przy użyciu sieci neuronowych Korzystamy z dodatkowych modułów: ***tensorflow - keras***, ***numpy*** oraz ***matplotlib***. ### Zbiór uczący Zbiór uczący składa się z 30 zdjęć dla każdego warzywa, które zgromadziłam przy pomocy wyszukiwarki. [Zdjęcia/obrazy](https://drive.google.com/drive/folders/1K1kQuW9v7DpPivggSR5uHwH5jEVEjmmZ?usp=sharing) ## Przebieg *** Uczenie modelu przebiega w pliku **net_trainign.py**. Korzystam z architektury MobileNetV2. Wpierw tworzę bazę modelu - importuję model MobileNet2 i "odrzuam" ostatnie warstwy. Dzięki temu pierwsze warstwy wytrenowane zostaną na zb. danych **imagenet**, a pozostałe uczę sama. ``` podstawa_modelu = MobileNetV2(include_top=False, weights="imagenet", pooling='avg') x = podstawa_modelu.output preds = Dense(4, activation='softmax')(x) model = Model(inputs=podstawa_modelu.input, outputs=preds) ``` Ostatnią warstwę zdefiniowałam z parametrem *activation=softmax* dla 4 klas - odpowiadają one wybranym przeze mnie warzywom. Funkcja **softmax** zapewnia, że wszystkie wartości w tej warstwie sumują się do 1. ``` preds = Dense(4, activation='softmax')(x) ``` Następnie uczę pozostałe warstwy. ``` model.compile(optimizer='Adam', loss='categorical_crossentropy', metrics=['accuracy']) step_size_train = train_generator.n // train_generator.batch_size model.fit_generator(generator=train_generator, steps_per_epoch=step_size_train, epochs=20) ``` Wyuczony model zapisuję w pliku **neural_model.h5**. Wykorzystuję go w pliku **main.py** w momencie wciśnięcia spacji na dowolnym polu. Czytam położenie agenta oraz przypisaną do tego pola etykietę, aby następnie ją rozpoznać. Na końcu wyświetlam największą wartość - przewidywane warzywo dla danego pola. ``` if event.key == pygame.K_SPACE: obecne_polozenie_agenta = [self.player.x, self.player.y] self.player.obecne_pole = punkty_pola.index(obecne_polozenie_agenta) pt = self.player.obecne_pole img_path = warzywa_etykiety[pt] img = image.load_img(img_path, target_size=(224, 224)) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) x = preprocess_input(x) preds = model.predict(x) preds = np.asarray(preds) szacunek = preds[preds < 1.0].max() ind = np.where(preds == szacunek) print(preds) print(szacunek) print(ind) plt.show() ``` ### Wykorzystanie rozpoznawania warzyw do zbierania plonów Na etapie integracji projektu względem podprojektów pozostałych członków zespołu, wykorzystamy nasze sieci neuronowe do zbierania dojrzałych warzyw. Każde warzywo ma określony czas dojrzewania. Agent po zbadaniu jakie warzywo znajduje się na danym polu, będzie mógł sprawdzić ile czasu mu potrzeba, aby po tym czasie zebrać plony.