podprojekt-kuba
This commit is contained in:
parent
fa7f01244f
commit
8b7aac315e
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
## Spis treści
|
## Spis treści
|
||||||
* [Uruchomienie](#uruchomienie)
|
* [Uruchomienie](#uruchomienie)
|
||||||
|
* [Wykrywanie roślin](#wykrywanie-roślin)
|
||||||
* [Raport 1](#raport-1)
|
* [Raport 1](#raport-1)
|
||||||
* [Notatki](#notatki)
|
* [Notatki](#notatki)
|
||||||
|
|
||||||
@ -14,6 +15,11 @@ Wymagania:
|
|||||||
|
|
||||||
Wpisanie komendy w glownym folderze: <br> `python3 main.py`
|
Wpisanie komendy w glownym folderze: <br> `python3 main.py`
|
||||||
|
|
||||||
|
|
||||||
|
## Wykrywanie roślin
|
||||||
|
Podprojekt na osobnym branchu - kuba. Raport - adamski_raport.md
|
||||||
|
|
||||||
|
|
||||||
## Raport 1
|
## Raport 1
|
||||||
|
|
||||||
### Środowisko agenta
|
### Środowisko agenta
|
||||||
|
42
adamski_raport.md
Normal file
42
adamski_raport.md
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
## Podprojekt Jakub Adamski
|
||||||
|
Wykrywanie rodzaju rośliny w danym polu, na którym znajduje się traktor.
|
||||||
|
|
||||||
|
## Spis treści
|
||||||
|
* [Wykorzystana technologia](#wykorzystana-technologia)
|
||||||
|
* [Dane](#dane)
|
||||||
|
* [Kod](#kod)
|
||||||
|
* [Działanie](#działanie)
|
||||||
|
* [Uruchomienie](#uruchomienie)
|
||||||
|
* [Notatki](#notatki)
|
||||||
|
|
||||||
|
## Wykorzystana technologia
|
||||||
|
W projekcie wykorzystuję sieć neuronową. Jest to klasyfikator obiektów, oparty na modelu MobileNetV2. MobileNet to wysoce zoptymalizowana struktura pozwalająca na rozpoznawanie obiektów. <br>
|
||||||
|
Składa się z warstw: CNN - convolutional neural network do wyodrębnienia cech charakterystycznych z obrazka oraz jednej warstwy dense, złozonej z duzej ilosci neuronow, które produkują finalny wynik na podstawie wyniku z CNN.
|
||||||
|
|
||||||
|
## Dane
|
||||||
|
Trenowanie klasyfikatorów od zera jest bardzo czasochłonne. Zazwyczaj zajmuje nawet kilka dni, nie wspominając o zgromadzeniu bardzo duzej ilosci zdjęć - najlepiej klika milionów. <br>
|
||||||
|
Z tego powodu wykorzystuję, gotową, wytrenowaną sieć na zbiorze danych imagenet. Do uruchomienia urzywam pakietu keras dostępnego w bibliotece tensorflow. Tensorflow to rozbudowany zestaw narzędzi do machine learningu, keraz to nakładka ułatwijąca uzywanie tego frameworku.
|
||||||
|
|
||||||
|
## Kod
|
||||||
|
Klasyfikator działa w głównej pętli while w pliku main.py. Uruchamia się gdy traktor (niebieski kwadrat) zmieni swoją lokalizację. Zdjęcia przypisane do danej kratki są dobierane losowo. W finalnej wersji zdjęć będzie więcej - folder imgs/. <br>
|
||||||
|
Gdy klasyfikator zakończy swoje działanie, w konsoli pojawia się najbardziej prawdopodobny obiekt znajdujący się na zdjęciu. Zdjęcie pojawia się w osobnym oknie. Po zamknięciu okna mozemy kontynuować sterowanie traktorem za pomocą strzałek.
|
||||||
|
|
||||||
|
## Działanie
|
||||||
|
W finalnej wersji łączącej wszytkie podprojekty mozna dodatkowo dołączyć walidację otrzymanego wyniku na podstawie nazwy zdjęcia. <br>
|
||||||
|
![ss]("./ss/adamski1.png")
|
||||||
|
|
||||||
|
|
||||||
|
## Uruchomienie
|
||||||
|
Instalacja tensorflow <br>
|
||||||
|
Byl error z jakas biblioteka, trzeba zainstalować nomkl lub rozwiazanie ad hoc to komenda która pokazuje się przy błędzie. <code>os.environ['KMP_DUPLICATE_LIB_OK']='True'</code>
|
||||||
|
https://docs.anaconda.com/mkl-optimizations/
|
||||||
|
|
||||||
|
|
||||||
|
## Notatki
|
||||||
|
Lista obiektów:
|
||||||
|
- pumpkin/dynia ok - spaghetti_squash
|
||||||
|
- cabbage/kapusta ok - head_cabbage
|
||||||
|
- mushchroom/grzyb ok - mushroom
|
||||||
|
- cauliflower/kalafior ok - cauliflower
|
||||||
|
- ziemniak NIE ROZPOZNAL
|
||||||
|
- marchewka NIE ROZPOZNAL
|
BIN
imgs/cabbage.jpg
Normal file
BIN
imgs/cabbage.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
BIN
imgs/cauliflower.jpg
Normal file
BIN
imgs/cauliflower.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 MiB |
BIN
imgs/mushroom.jpg
Normal file
BIN
imgs/mushroom.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 44 KiB |
BIN
imgs/pumpkin.jpg
Normal file
BIN
imgs/pumpkin.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
45
main.py
45
main.py
@ -2,11 +2,19 @@ import pygame, sys
|
|||||||
from traktor import Traktor
|
from traktor import Traktor
|
||||||
import dijkstra as di
|
import dijkstra as di
|
||||||
|
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
from tensorflow.keras.preprocessing import image
|
||||||
|
from tensorflow.keras.applications import MobileNetV2
|
||||||
|
from tensorflow.keras.applications.mobilenet import preprocess_input, decode_predictions
|
||||||
|
import numpy as np
|
||||||
|
import os, random
|
||||||
|
#u mnie blad z biblioteka
|
||||||
|
os.environ['KMP_DUPLICATE_LIB_OK']='True'
|
||||||
|
|
||||||
class Game(object):
|
class Game(object):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
|
||||||
#to da sie chyba zrobic lepiej
|
|
||||||
#lokalizacje odpowiednich punktow na planszy
|
#lokalizacje odpowiednich punktow na planszy
|
||||||
lokalizacje = [[0,0],
|
lokalizacje = [[0,0],
|
||||||
[100, 0],
|
[100, 0],
|
||||||
@ -34,6 +42,15 @@ class Game(object):
|
|||||||
[300, 400],
|
[300, 400],
|
||||||
[400, 400]]
|
[400, 400]]
|
||||||
|
|
||||||
|
#ładowanie tablicy ze zdjeciami
|
||||||
|
imgs = []
|
||||||
|
img_dir = './imgs'
|
||||||
|
for _ in lokalizacje:
|
||||||
|
imgs.append(img_dir + '/' + random.choice(os.listdir(img_dir)))
|
||||||
|
|
||||||
|
#model do rozpoznawania
|
||||||
|
model = MobileNetV2(input_shape=None, alpha=1.0, include_top=True, weights="imagenet", input_tensor=None, pooling=None, classes=1000)
|
||||||
|
|
||||||
#inicjalizacja
|
#inicjalizacja
|
||||||
pygame.init()
|
pygame.init()
|
||||||
self.pole = pygame.display.set_mode((501,501))
|
self.pole = pygame.display.set_mode((501,501))
|
||||||
@ -46,8 +63,9 @@ class Game(object):
|
|||||||
else:
|
else:
|
||||||
sterowanie = False
|
sterowanie = False
|
||||||
|
|
||||||
#iohiu;i;gou;ihpiu
|
|
||||||
while True:
|
while True:
|
||||||
|
run_classifier = False
|
||||||
|
|
||||||
#obsługa zdarzń
|
#obsługa zdarzń
|
||||||
for event in pygame.event.get():
|
for event in pygame.event.get():
|
||||||
if event.type == pygame.QUIT:
|
if event.type == pygame.QUIT:
|
||||||
@ -72,6 +90,12 @@ class Game(object):
|
|||||||
self.player.x -= 100
|
self.player.x -= 100
|
||||||
if self.player.x < 0:
|
if self.player.x < 0:
|
||||||
self.player.x = 0
|
self.player.x = 0
|
||||||
|
|
||||||
|
#okreslanie w ktorym punkcie jesteśmy
|
||||||
|
wsp = [self.player.x, self.player.y]
|
||||||
|
self.player.punkt = lokalizacje.index(wsp)
|
||||||
|
run_classifier = True
|
||||||
|
|
||||||
else:
|
else:
|
||||||
#po spacji wpisujemy punkty
|
#po spacji wpisujemy punkty
|
||||||
if event.type == pygame.KEYDOWN :
|
if event.type == pygame.KEYDOWN :
|
||||||
@ -91,6 +115,7 @@ class Game(object):
|
|||||||
self.player.x = lokalizacje[pt][0]
|
self.player.x = lokalizacje[pt][0]
|
||||||
self.player.y = lokalizacje[pt][1]
|
self.player.y = lokalizacje[pt][1]
|
||||||
self.player.punkt = pt
|
self.player.punkt = pt
|
||||||
|
run_classifier = True
|
||||||
|
|
||||||
|
|
||||||
pygame.display.update()
|
pygame.display.update()
|
||||||
@ -101,6 +126,22 @@ class Game(object):
|
|||||||
self.rysowanie()
|
self.rysowanie()
|
||||||
pygame.display.flip()
|
pygame.display.flip()
|
||||||
|
|
||||||
|
if run_classifier:
|
||||||
|
#wybieranie zdjecia
|
||||||
|
pt = self.player.punkt
|
||||||
|
img_path = imgs[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)
|
||||||
|
|
||||||
|
#detektor roslin, 5 rezultatow
|
||||||
|
plt.imshow(img)
|
||||||
|
preds = model.predict(x)
|
||||||
|
decoded = decode_predictions(preds, top=1)
|
||||||
|
print(decoded)
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
def krata(self):
|
def krata(self):
|
||||||
#wymiary
|
#wymiary
|
||||||
|
BIN
ss/adamski1.png
Normal file
BIN
ss/adamski1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 976 KiB |
Loading…
Reference in New Issue
Block a user