From bbd0baa01aa536b5b3ae6e115fd0b144f4314899 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Weronika=20Gor=C4=85cy?= Date: Fri, 8 May 2020 13:47:19 +0000 Subject: [PATCH 01/20] Dodaj 'WGoracy.md' --- WGoracy.md | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 WGoracy.md diff --git a/WGoracy.md b/WGoracy.md new file mode 100644 index 0000000..da00e4d --- /dev/null +++ b/WGoracy.md @@ -0,0 +1,111 @@ +### Podprojekt indywidualny - Weronika Gorący + +## Wykorzystane metody uczenia + +Do realizacji podprojektu wykorzystano drzewa decyzyjne do decydowania, na które regały należy umieścić paczkę na podstawie jej cech. Do implementacji drzew decyzyjnych w Pythonie wykorzystane zostały biblioteki sklearn i pandas. + +## Omówienie kodu + +Kod podprojektu znajduje się w klasie whereDecision w pliku whereDecision.py. Wywołanie metody recognize odbywa się w klasie program w pliku program.py. + +``` +whatIsIt = self.neurons.whatIsIt(easygui.fileopenbox("Wybierz zdjęcie paczki", "Wybierz zdjęcie paczki", filetypes = [["*.jpg", "*.jpeg", "*.png", "Pliki graficzne"]])) +where = self.whereDecision.recognize(whatIsIt, self.regalsik()) +``` + +Do zmiennej whatIsIt zostaje zapisany typ otrzymanej paczki, który został rozpoznany dzięki innemu podprojektowi, następnie wywoływana jest metoda recognize z parametrami whatIsIt i self.regalsik(). + +Do tablicy regals zapisywane są dane wszystkich regałów wygenerowanych na planszy. + +``` +self.regals.append((i, j, (self.map[i][j]-3)//4)) +``` + +regalsik() sprawdza czy regał z tablicy regals jest pusty i umieszcza go w tablicy wyjściowej, która ostatecznie jest tablicą krotek zawierajacych informacje o wszystkich pustych regałach na planszy. Każda krotka zawiera informacje o współrzędnej Y i X regału oraz typ paczki jaki może być na niej przechowywany. + +``` + def regalsik(self): + tmp = [] + for regal in self.regals: + if self.map[regal[0]][regal[1]].isOccupied()==False: + tmp.append(regal) + return tmp +``` + +## Uczenie modelu + +Metoda recognize rozpoczyna od utworzenia zbioru uczącego na podstawie tabeli zawierającej informacje o pustych półkach na planszy. Dla każdego regału sprawdzany jest typ paczki, który może być na niej przechowywany, a następnie jest on dodawany do odpowiedniej kolumny. Tablica lokacja zawiera położenia wszystkich regałów na planszy. + +``` + def recognize(self, recognize, regals): + zwykle = [] + kruche = [] + latwopalne = [] + radioaktywne = [] + niebezpieczne = [] + lokacja = [] + for regal in regals: + if (regal[2] == 1): + zwykle.append(0) + kruche.append(1) + latwopalne.append(0) + radioaktywne.append(0) + niebezpieczne.append(0) + lokacja.append(str("("+str(regal[0])+", "+str(regal[1])+")")) + elif (regal[2] == 2): + zwykle.append(0) + kruche.append(0) + latwopalne.append(1) + radioaktywne.append(0) + niebezpieczne.append(0) + lokacja.append(str("("+str(regal[0])+", "+str(regal[1])+")")) + elif (regal[2] == 3): + zwykle.append(0) + kruche.append(0) + latwopalne.append(0) + radioaktywne.append(1) + niebezpieczne.append(0) + lokacja.append(str("("+str(regal[0])+", "+str(regal[1])+")")) + elif (regal[2] == 4): + zwykle.append(0) + kruche.append(0) + latwopalne.append(0) + radioaktywne.append(0) + niebezpieczne.append(1) + lokacja.append(str("("+str(regal[0])+", "+str(regal[1])+")")) + else: + zwykle.append(1) + kruche.append(0) + latwopalne.append(0) + radioaktywne.append(0) + niebezpieczne.append(0) + lokacja.append(str("("+str(regal[0])+", "+str(regal[1])+")")) +``` + +Jeżeli wszystkie półki są zajęte, wózek zatrzyma się w swojej wyjściowej pozycji. + +``` + if len(zwykle) == 0: + return [1, 2] +``` + +Do zmiennej z zapisywany jest nasz zbiór uczący, zaś do zmiennej y zapisujemy tabelę prenumeratorzy typu DataFrame z biblioteki pandas, która zawiera dane lokalizacji. + +``` + z = list(zip(zwykle, kruche, latwopalne, radioaktywne, niebezpieczne)) + prenumeratorzy = pd.DataFrame({"lokacja": lokacja}) + prenumeratorzy["lokacja"], lokacja_kody = pd.factorize(prenumeratorzy["lokacja"]) + y = prenumeratorzy["lokacja"] +``` + +## Implementacja + +Do zmiennej drzewko zapisujemy drzewo decyzyjne z biblioteki sklearn utworzone za pomocą metody DecisionTreeClassifier z parametrem criterion ustawionym na "entropy", które pozwala na uzyskiwanie informacji. Na drzewie wywołujemy metodę fit, która dopasowuje do drzewa zbiór uczący zadany w tablicach z i y.Po dopasowaniu danych możemy przewidzieć przynależność nowych przykładów, co robimy wywołując na drzewie metodę predict z parametrem uzyskanym na samym początku, który zawiera informację o rodzaju otrzymanej paczki. W ostateczności zwracamy kod lokalizacji na której zostanie umieszczona paczka. + +``` + drzewko = DecisionTreeClassifier(criterion="entropy") + drzewko.fit(X=z, y=y) + return list(make_tuple(lokacja_kody[drzewko.predict(recognize)][0])) +``` + +Lokalizacja, którą zwróciła metoda recognize zapisywana jest do zmiennej where (klasa program) i na tej podstawie wózek z pomocą algorytmu AStar wybiera odpowiednią ścieżkę do umieszczenia paczki. \ No newline at end of file From b20710e7c9d3f736a6d189f0fde697908b35dafd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Weronika=20Gor=C4=85cy?= Date: Fri, 8 May 2020 13:54:08 +0000 Subject: [PATCH 02/20] Zaktualizuj 'WGoracy.md' --- WGoracy.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/WGoracy.md b/WGoracy.md index da00e4d..6042d53 100644 --- a/WGoracy.md +++ b/WGoracy.md @@ -1,27 +1,27 @@ -### Podprojekt indywidualny - Weronika Gorący +# Podprojekt indywidualny - Weronika Gorący ## Wykorzystane metody uczenia -Do realizacji podprojektu wykorzystano drzewa decyzyjne do decydowania, na które regały należy umieścić paczkę na podstawie jej cech. Do implementacji drzew decyzyjnych w Pythonie wykorzystane zostały biblioteki sklearn i pandas. +Do realizacji podprojektu wykorzystano drzewa decyzyjne do decydowania, na które regały należy umieścić paczkę na podstawie jej cech. Do implementacji drzew decyzyjnych w Pythonie wykorzystane zostały biblioteki *sklearn* i *pandas*. ## Omówienie kodu -Kod podprojektu znajduje się w klasie whereDecision w pliku whereDecision.py. Wywołanie metody recognize odbywa się w klasie program w pliku program.py. +Kod podprojektu znajduje się w klasie **whereDecision** w pliku [whereDecision.py](https://git.wmi.amu.edu.pl/s444399/AI/src/master/whereDecision.py). Wywołanie metody **recognize** odbywa się w klasie **program** w pliku [program.py](https://git.wmi.amu.edu.pl/s444399/AI/src/master/program.py). ``` whatIsIt = self.neurons.whatIsIt(easygui.fileopenbox("Wybierz zdjęcie paczki", "Wybierz zdjęcie paczki", filetypes = [["*.jpg", "*.jpeg", "*.png", "Pliki graficzne"]])) where = self.whereDecision.recognize(whatIsIt, self.regalsik()) ``` -Do zmiennej whatIsIt zostaje zapisany typ otrzymanej paczki, który został rozpoznany dzięki innemu podprojektowi, następnie wywoływana jest metoda recognize z parametrami whatIsIt i self.regalsik(). +Do zmiennej **whatIsIt** zostaje zapisany typ otrzymanej paczki, który został rozpoznany dzięki innemu podprojektowi, następnie wywoływana jest metoda **recognize** z parametrami **whatIsIt** i **self.regalsik()**. -Do tablicy regals zapisywane są dane wszystkich regałów wygenerowanych na planszy. +Do tablicy **regals** zapisywane są dane wszystkich regałów wygenerowanych na planszy. ``` self.regals.append((i, j, (self.map[i][j]-3)//4)) ``` -regalsik() sprawdza czy regał z tablicy regals jest pusty i umieszcza go w tablicy wyjściowej, która ostatecznie jest tablicą krotek zawierajacych informacje o wszystkich pustych regałach na planszy. Każda krotka zawiera informacje o współrzędnej Y i X regału oraz typ paczki jaki może być na niej przechowywany. +Metoda **regalsik()** sprawdza czy regał z tablicy **regals** jest pusty i jeżeli tak, to umieszcza go w tablicy wyjściowej, która ostatecznie jest tablicą krotek zawierajacych informacje o wszystkich pustych regałach na planszy. Każda krotka zawiera informacje o współrzędnej Y i X regału oraz typ paczki jaki może być na niej przechowywany. ``` def regalsik(self): @@ -34,7 +34,7 @@ regalsik() sprawdza czy regał z tablicy regals jest pusty i umieszcza go w tabl ## Uczenie modelu -Metoda recognize rozpoczyna od utworzenia zbioru uczącego na podstawie tabeli zawierającej informacje o pustych półkach na planszy. Dla każdego regału sprawdzany jest typ paczki, który może być na niej przechowywany, a następnie jest on dodawany do odpowiedniej kolumny. Tablica lokacja zawiera położenia wszystkich regałów na planszy. +Metoda **recognize** rozpoczyna od utworzenia zbioru uczącego na podstawie tabeli zawierającej informacje o pustych półkach na planszy. Dla każdego regału sprawdzany jest typ paczki, który może być na niej przechowywany, a następnie jest on dodawany do odpowiedniej kolumny. Tablica **lokacja** zawiera położenia wszystkich regałów na planszy. ``` def recognize(self, recognize, regals): @@ -89,7 +89,7 @@ Jeżeli wszystkie półki są zajęte, wózek zatrzyma się w swojej wyjściowej return [1, 2] ``` -Do zmiennej z zapisywany jest nasz zbiór uczący, zaś do zmiennej y zapisujemy tabelę prenumeratorzy typu DataFrame z biblioteki pandas, która zawiera dane lokalizacji. +Do zmiennej **z** zapisywany jest nasz zbiór uczący, zaś do zmiennej **y** zapisujemy tabelę prenumeratorzy typu DataFrame z biblioteki *pandas*, która zawiera dane lokalizacji. ``` z = list(zip(zwykle, kruche, latwopalne, radioaktywne, niebezpieczne)) @@ -100,7 +100,7 @@ Do zmiennej z zapisywany jest nasz zbiór uczący, zaś do zmiennej y zapisujemy ## Implementacja -Do zmiennej drzewko zapisujemy drzewo decyzyjne z biblioteki sklearn utworzone za pomocą metody DecisionTreeClassifier z parametrem criterion ustawionym na "entropy", które pozwala na uzyskiwanie informacji. Na drzewie wywołujemy metodę fit, która dopasowuje do drzewa zbiór uczący zadany w tablicach z i y.Po dopasowaniu danych możemy przewidzieć przynależność nowych przykładów, co robimy wywołując na drzewie metodę predict z parametrem uzyskanym na samym początku, który zawiera informację o rodzaju otrzymanej paczki. W ostateczności zwracamy kod lokalizacji na której zostanie umieszczona paczka. +Do zmiennej drzewko zapisujemy drzewo decyzyjne z biblioteki *sklearn* utworzone za pomocą metody **DecisionTreeClassifier** z parametrem **criterion** ustawionym na **"entropy"**, który pozwala na uzyskiwanie informacji. Na drzewie wywołujemy metodę **fit**, która dopasowuje do drzewa zbiór uczący zadany w tablicach **z** i **y**.Po dopasowaniu danych możemy przewidzieć przynależność nowych przykładów, co robimy wywołując na drzewie metodę **predict** z parametrem uzyskanym na samym początku, który zawiera informację o rodzaju otrzymanej paczki. W ostateczności zwracamy kod lokalizacji na której zostanie umieszczona paczka. ``` drzewko = DecisionTreeClassifier(criterion="entropy") @@ -108,4 +108,4 @@ Do zmiennej drzewko zapisujemy drzewo decyzyjne z biblioteki sklearn utworzone z return list(make_tuple(lokacja_kody[drzewko.predict(recognize)][0])) ``` -Lokalizacja, którą zwróciła metoda recognize zapisywana jest do zmiennej where (klasa program) i na tej podstawie wózek z pomocą algorytmu AStar wybiera odpowiednią ścieżkę do umieszczenia paczki. \ No newline at end of file +Lokalizacja, którą zwróciła metoda **recognize** zapisywana jest do zmiennej **where** (klasa **program**) i na tej podstawie wózek z pomocą algorytmu AStar wybiera odpowiednią ścieżkę do umieszczenia paczki. \ No newline at end of file From 0ee8f37dc6b514a3d1dcbf5abcd13db1acdca288 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Weronika=20Gor=C4=85cy?= Date: Fri, 8 May 2020 13:55:27 +0000 Subject: [PATCH 03/20] Zaktualizuj 'WGoracy.md' --- WGoracy.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/WGoracy.md b/WGoracy.md index 6042d53..0b00d6d 100644 --- a/WGoracy.md +++ b/WGoracy.md @@ -1,12 +1,12 @@ -# Podprojekt indywidualny - Weronika Gorący +## Podprojekt indywidualny - Weronika Gorący -## Wykorzystane metody uczenia +### Wykorzystane metody uczenia Do realizacji podprojektu wykorzystano drzewa decyzyjne do decydowania, na które regały należy umieścić paczkę na podstawie jej cech. Do implementacji drzew decyzyjnych w Pythonie wykorzystane zostały biblioteki *sklearn* i *pandas*. -## Omówienie kodu +### Omówienie kodu -Kod podprojektu znajduje się w klasie **whereDecision** w pliku [whereDecision.py](https://git.wmi.amu.edu.pl/s444399/AI/src/master/whereDecision.py). Wywołanie metody **recognize** odbywa się w klasie **program** w pliku [program.py](https://git.wmi.amu.edu.pl/s444399/AI/src/master/program.py). +Kod podprojektu znajduje się w klasie **whereDecision** w pliku [whereDecision.py](https://git.wmi.amu.edu.pl/s444399/AI/src/master/whereDecision.py). Wywołanie metody **recognize** odbywa się w klasie **program** w pliku [program.py](https://git.wmi.amu.edu.pl/s444399/AI/src/master/program.py) (linia 79). ``` whatIsIt = self.neurons.whatIsIt(easygui.fileopenbox("Wybierz zdjęcie paczki", "Wybierz zdjęcie paczki", filetypes = [["*.jpg", "*.jpeg", "*.png", "Pliki graficzne"]])) @@ -32,7 +32,7 @@ Metoda **regalsik()** sprawdza czy regał z tablicy **regals** jest pusty i jeż return tmp ``` -## Uczenie modelu +### Uczenie modelu Metoda **recognize** rozpoczyna od utworzenia zbioru uczącego na podstawie tabeli zawierającej informacje o pustych półkach na planszy. Dla każdego regału sprawdzany jest typ paczki, który może być na niej przechowywany, a następnie jest on dodawany do odpowiedniej kolumny. Tablica **lokacja** zawiera położenia wszystkich regałów na planszy. @@ -98,7 +98,7 @@ Do zmiennej **z** zapisywany jest nasz zbiór uczący, zaś do zmiennej **y** za y = prenumeratorzy["lokacja"] ``` -## Implementacja +### Implementacja Do zmiennej drzewko zapisujemy drzewo decyzyjne z biblioteki *sklearn* utworzone za pomocą metody **DecisionTreeClassifier** z parametrem **criterion** ustawionym na **"entropy"**, który pozwala na uzyskiwanie informacji. Na drzewie wywołujemy metodę **fit**, która dopasowuje do drzewa zbiór uczący zadany w tablicach **z** i **y**.Po dopasowaniu danych możemy przewidzieć przynależność nowych przykładów, co robimy wywołując na drzewie metodę **predict** z parametrem uzyskanym na samym początku, który zawiera informację o rodzaju otrzymanej paczki. W ostateczności zwracamy kod lokalizacji na której zostanie umieszczona paczka. @@ -108,4 +108,4 @@ Do zmiennej drzewko zapisujemy drzewo decyzyjne z biblioteki *sklearn* utworzone return list(make_tuple(lokacja_kody[drzewko.predict(recognize)][0])) ``` -Lokalizacja, którą zwróciła metoda **recognize** zapisywana jest do zmiennej **where** (klasa **program**) i na tej podstawie wózek z pomocą algorytmu AStar wybiera odpowiednią ścieżkę do umieszczenia paczki. \ No newline at end of file +Ostatecznie lokalizacja, którą zwróciła metoda **recognize** zapisywana jest do zmiennej **where** (klasa **program** linia 79) i na tej podstawie wózek z pomocą algorytmu AStar wybiera odpowiednią ścieżkę do umieszczenia paczki. \ No newline at end of file From 9029e8d1923e4ca47b892dbb16e3aec621f41134 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Weronika=20Gor=C4=85cy?= Date: Fri, 8 May 2020 19:58:39 +0000 Subject: [PATCH 04/20] Zaktualizuj 'WGoracy.md' --- WGoracy.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/WGoracy.md b/WGoracy.md index 0b00d6d..48c12ff 100644 --- a/WGoracy.md +++ b/WGoracy.md @@ -6,14 +6,14 @@ Do realizacji podprojektu wykorzystano drzewa decyzyjne do decydowania, na któr ### Omówienie kodu -Kod podprojektu znajduje się w klasie **whereDecision** w pliku [whereDecision.py](https://git.wmi.amu.edu.pl/s444399/AI/src/master/whereDecision.py). Wywołanie metody **recognize** odbywa się w klasie **program** w pliku [program.py](https://git.wmi.amu.edu.pl/s444399/AI/src/master/program.py) (linia 79). +Kod podprojektu znajduje się w klasie **whereDecision** w pliku [whereDecision.py](https://git.wmi.amu.edu.pl/s444399/AI/src/master/whereDecision.py). Wywołanie metody **recognize** odbywa się w klasie **program** w pliku [program.py](https://git.wmi.amu.edu.pl/s444399/AI/src/master/program.py). ``` whatIsIt = self.neurons.whatIsIt(easygui.fileopenbox("Wybierz zdjęcie paczki", "Wybierz zdjęcie paczki", filetypes = [["*.jpg", "*.jpeg", "*.png", "Pliki graficzne"]])) where = self.whereDecision.recognize(whatIsIt, self.regalsik()) ``` -Do zmiennej **whatIsIt** zostaje zapisany typ otrzymanej paczki, który został rozpoznany dzięki innemu podprojektowi, następnie wywoływana jest metoda **recognize** z parametrami **whatIsIt** i **self.regalsik()**. +Do zmiennej **whatIsIt** zostaje zapisany typ otrzymanej paczki w formie tablicy binarnej, który został rozpoznany dzięki innemu podprojektowi, następnie wywoływana jest metoda **recognize** z parametrami **whatIsIt** i **self.regalsik()**. Do tablicy **regals** zapisywane są dane wszystkich regałów wygenerowanych na planszy. @@ -34,7 +34,7 @@ Metoda **regalsik()** sprawdza czy regał z tablicy **regals** jest pusty i jeż ### Uczenie modelu -Metoda **recognize** rozpoczyna od utworzenia zbioru uczącego na podstawie tabeli zawierającej informacje o pustych półkach na planszy. Dla każdego regału sprawdzany jest typ paczki, który może być na niej przechowywany, a następnie jest on dodawany do odpowiedniej kolumny. Tablica **lokacja** zawiera położenia wszystkich regałów na planszy. +Metoda **recognize** rozpoczyna od utworzenia zbioru uczącego na podstawie tabeli zawierającej informacje o pustych półkach na planszy. Dla każdego regału sprawdzany jest typ paczki, który może być na niej przechowywany, a następnie jest on dodawany do odpowiedniej tablicy. Tablica **lokacja** zawiera położenia wszystkich regałów na planszy. ``` def recognize(self, recognize, regals): @@ -89,7 +89,7 @@ Jeżeli wszystkie półki są zajęte, wózek zatrzyma się w swojej wyjściowej return [1, 2] ``` -Do zmiennej **z** zapisywany jest nasz zbiór uczący, zaś do zmiennej **y** zapisujemy tabelę prenumeratorzy typu DataFrame z biblioteki *pandas*, która zawiera dane lokalizacji. +Do zmiennej **z** zapisujemy połączone tablice wszystkich typów regałów, zaś do zmiennej **y** zapisujemy tabelę prenumeratorzy typu DataFrame z biblioteki *pandas*, która zawiera dane lokalizacji konkretnych regałów. ``` z = list(zip(zwykle, kruche, latwopalne, radioaktywne, niebezpieczne)) @@ -98,9 +98,11 @@ Do zmiennej **z** zapisywany jest nasz zbiór uczący, zaś do zmiennej **y** za y = prenumeratorzy["lokacja"] ``` +Zmienne **z** i **y** są naszym zbiorem uczącym. + ### Implementacja -Do zmiennej drzewko zapisujemy drzewo decyzyjne z biblioteki *sklearn* utworzone za pomocą metody **DecisionTreeClassifier** z parametrem **criterion** ustawionym na **"entropy"**, który pozwala na uzyskiwanie informacji. Na drzewie wywołujemy metodę **fit**, która dopasowuje do drzewa zbiór uczący zadany w tablicach **z** i **y**.Po dopasowaniu danych możemy przewidzieć przynależność nowych przykładów, co robimy wywołując na drzewie metodę **predict** z parametrem uzyskanym na samym początku, który zawiera informację o rodzaju otrzymanej paczki. W ostateczności zwracamy kod lokalizacji na której zostanie umieszczona paczka. +Do zmiennej **drzewko** zapisujemy drzewo decyzyjne z biblioteki *sklearn* utworzone za pomocą obiektu klasy **DecisionTreeClassifier** z parametrem konstruktora **criterion** ustawionym na **"entropy"**. Na drzewie wywołujemy metodę **fit**, która tworzy model danych w oparciu o nasz zbiór uczący. Po utworzeniu modelu danych możemy przewidzieć przynależność nowych przykładów, co robimy wywołując na drzewie metodę **predict** z parametrem uzyskanym na samym początku, który zawiera informację o rodzaju otrzymanej paczki. W ostateczności zwracamy krotkę zawierającą lokalizację, na której zostanie umieszczona paczka. ``` drzewko = DecisionTreeClassifier(criterion="entropy") @@ -108,4 +110,4 @@ Do zmiennej drzewko zapisujemy drzewo decyzyjne z biblioteki *sklearn* utworzone return list(make_tuple(lokacja_kody[drzewko.predict(recognize)][0])) ``` -Ostatecznie lokalizacja, którą zwróciła metoda **recognize** zapisywana jest do zmiennej **where** (klasa **program** linia 79) i na tej podstawie wózek z pomocą algorytmu AStar wybiera odpowiednią ścieżkę do umieszczenia paczki. \ No newline at end of file +Ostatecznie lokalizacja, którą zwróciła metoda **recognize** zapisywana jest do zmiennej **where** (klasa **program**) i na tej podstawie wózek z pomocą algorytmu AStar wybiera odpowiednią ścieżkę do umieszczenia paczki. \ No newline at end of file From 67b1aac12548612719d830d69fb1e41b59fe4ca2 Mon Sep 17 00:00:00 2001 From: Michal Kijowski Date: Fri, 8 May 2020 20:35:15 +0000 Subject: [PATCH 05/20] Upload files to '' --- program.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/program.py b/program.py index 0cbf702..852ae65 100644 --- a/program.py +++ b/program.py @@ -14,6 +14,7 @@ import easygui from neurons import Neurons from whereDecision import WhereDecision from Evencik import Evencik +import pathlib class MainWindow: def __init__(self, szerokosc, wysokosc, kruche, latwopalne, radioaktywne, niebezpieczne): @@ -75,7 +76,14 @@ class MainWindow: self.wheel.move(event, self.map) elif(event.type==pygame.MOUSEBUTTONDOWN): if (type(self.map[0][2]) == Floor): - whatIsIt = self.neurons.whatIsIt(easygui.fileopenbox("Wybierz zdjęcie paczki", "Wybierz zdjęcie paczki", filetypes = [["*.jpg", "*.jpeg", "*.png", "Pliki graficzne"]])) + meh = easygui.fileopenbox("Wybierz zdjęcie paczki", "Wybierz zdjęcie paczki", filetypes = [["*.jpg", "*.jpeg", "*.png", "Pliki graficzne"]]) + if meh is None: + return + while pathlib.Path(meh).suffix!=".jpg" and pathlib.Path(meh).suffix!=".jpeg" and pathlib.Path(meh).suffix!=".png": + meh = easygui.fileopenbox("Wybierz zdjęcie paczki", "Wybierz zdjęcie paczki", filetypes = [["*.jpg", "*.jpeg", "*.png", "Pliki graficzne"]]) + if meh is None: + return + whatIsIt = self.neurons.whatIsIt(meh) where = self.whereDecision.recognize(whatIsIt, self.regalsik()) self.map[0][2] = BoxOnTheFloor(self.screen, self.cell, 0, 2, Box()) star = AStar() @@ -143,4 +151,4 @@ class MainWindow: for regal in self.regals: if self.map[regal[0]][regal[1]].isOccupied()==False: tmp.append(regal) - return tmp \ No newline at end of file + return tmp From 39ff697ec75f2b5faf3152ed0ef723fdceb6ec9f Mon Sep 17 00:00:00 2001 From: Michal Kijowski Date: Fri, 8 May 2020 20:36:01 +0000 Subject: [PATCH 06/20] Upload files to '' --- neurons.py | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/neurons.py b/neurons.py index af6f80f..e7fbf9a 100644 --- a/neurons.py +++ b/neurons.py @@ -11,13 +11,13 @@ class Neurons: output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()] return output_layers def whatIsIt(self, path): - """image = cv2.imread(path) + image = cv2.imread(path) scale = 0.00392 classes = None with open("yolov3.txt", 'r') as f: classes = [line.strip() for line in f.readlines()] net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg") - blob = cv2.dnn.blobFromImage(image, scale, (416, 416), (0, 0, 0), True, crop=False) + blob = cv2.dnn.blobFromImage(image, scale, (608, 608), (0, 0, 0), True, crop=False) net.setInput(blob) outs = net.forward(self.get_output_layers(net)) class_ids = [] @@ -26,19 +26,30 @@ class Neurons: scores = detection[5:] class_id = np.argmax(scores) confidence = scores[class_id] - if confidence > 0.5: + if confidence > 0.2: class_ids.append(class_id) - print([classes[ids] for ids in class_ids])""" - x = [1, 0, 0, 0, 0] - numpy.random.shuffle(x) + y = [classes[ids] for ids in class_ids] + print(y) + x = [0, 0, 0, 0, 0] + if "kruche" in y: + x[1]=1 + elif "niebezpieczne" in y: + x[4]=1 + elif "biohazard" in y: + x[4]=1 + elif "radioaktywne" in y: + x[3]=1 + elif "latwopalne" in y: + x[2]=1 + print(x) if x[0]==1: print("Zwykła") - elif x[1]==1: + if x[1]==1: print("Kruchy") - elif x[2]==1: + if x[2]==1: print("Łatwopalny") - elif x[3]==1: + if x[3]==1: print("Radioaktywny") - elif x[4]==1: + if x[4]==1: print("Niebezpieczny") - return [list(x)] \ No newline at end of file + return [list(x)] From 6ddea8a4ff6929fe96a5a22d04112c16f1b9d8bb Mon Sep 17 00:00:00 2001 From: Michal Kijowski Date: Fri, 8 May 2020 20:36:46 +0000 Subject: [PATCH 07/20] Upload files to '' --- yolov3.cfg | 789 +++++++++++++++++++++++++++++++++++++++++++++++++++++ yolov3.txt | 5 + 2 files changed, 794 insertions(+) create mode 100644 yolov3.cfg create mode 100644 yolov3.txt diff --git a/yolov3.cfg b/yolov3.cfg new file mode 100644 index 0000000..a4b7ac3 --- /dev/null +++ b/yolov3.cfg @@ -0,0 +1,789 @@ +[net] +# Testing +# batch=1 +# subdivisions=1 +# Training +batch=16 +subdivisions=16 +width=608 +height=608 +channels=3 +momentum=0.9 +decay=0.0005 +angle=0 +saturation = 1.5 +exposure = 1.5 +hue=.1 + +learning_rate=0.001 +burn_in=1000 +max_batches = 100000 +policy=steps +steps=80000,90000 +scales=.1,.1 + +[convolutional] +batch_normalize=1 +filters=30 +size=3 +stride=1 +pad=1 +activation=leaky + +# Downsample + +[convolutional] +batch_normalize=1 +filters=64 +size=3 +stride=2 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=32 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=64 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + +# Downsample + +[convolutional] +batch_normalize=1 +filters=128 +size=3 +stride=2 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=64 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=128 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + +[convolutional] +batch_normalize=1 +filters=64 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=128 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + +# Downsample + +[convolutional] +batch_normalize=1 +filters=256 +size=3 +stride=2 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=128 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=256 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + +[convolutional] +batch_normalize=1 +filters=128 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=256 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + +[convolutional] +batch_normalize=1 +filters=128 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=256 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + +[convolutional] +batch_normalize=1 +filters=128 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=256 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + + +[convolutional] +batch_normalize=1 +filters=128 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=256 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + +[convolutional] +batch_normalize=1 +filters=128 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=256 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + +[convolutional] +batch_normalize=1 +filters=128 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=256 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + +[convolutional] +batch_normalize=1 +filters=128 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=256 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + +# Downsample + +[convolutional] +batch_normalize=1 +filters=512 +size=3 +stride=2 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=256 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=512 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + + +[convolutional] +batch_normalize=1 +filters=256 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=512 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + + +[convolutional] +batch_normalize=1 +filters=256 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=512 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + + +[convolutional] +batch_normalize=1 +filters=256 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=512 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + +[convolutional] +batch_normalize=1 +filters=256 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=512 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + + +[convolutional] +batch_normalize=1 +filters=256 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=512 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + + +[convolutional] +batch_normalize=1 +filters=256 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=512 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + +[convolutional] +batch_normalize=1 +filters=256 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=512 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + +# Downsample + +[convolutional] +batch_normalize=1 +filters=1024 +size=3 +stride=2 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=512 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=1024 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + +[convolutional] +batch_normalize=1 +filters=512 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=1024 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + +[convolutional] +batch_normalize=1 +filters=512 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=1024 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + +[convolutional] +batch_normalize=1 +filters=512 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=1024 +size=3 +stride=1 +pad=1 +activation=leaky + +[shortcut] +from=-3 +activation=linear + +###################### + +[convolutional] +batch_normalize=1 +filters=512 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +size=3 +stride=1 +pad=1 +filters=1024 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=512 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +size=3 +stride=1 +pad=1 +filters=1024 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=512 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +size=3 +stride=1 +pad=1 +filters=1024 +activation=leaky + +[convolutional] +size=1 +stride=1 +pad=1 +filters=255 +activation=linear + + +[yolo] +mask = 6,7,8 +anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 +classes=80 +num=9 +jitter=.3 +ignore_thresh = .7 +truth_thresh = 1 +random=1 + + +[route] +layers = -4 + +[convolutional] +batch_normalize=1 +filters=256 +size=1 +stride=1 +pad=1 +activation=leaky + +[upsample] +stride=2 + +[route] +layers = -1, 61 + + + +[convolutional] +batch_normalize=1 +filters=256 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +size=3 +stride=1 +pad=1 +filters=512 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=256 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +size=3 +stride=1 +pad=1 +filters=512 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=256 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +size=3 +stride=1 +pad=1 +filters=512 +activation=leaky + +[convolutional] +size=1 +stride=1 +pad=1 +filters=255 +activation=linear + + +[yolo] +mask = 3,4,5 +anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 +classes=80 +num=9 +jitter=.3 +ignore_thresh = .7 +truth_thresh = 1 +random=1 + + + +[route] +layers = -4 + +[convolutional] +batch_normalize=1 +filters=128 +size=1 +stride=1 +pad=1 +activation=leaky + +[upsample] +stride=2 + +[route] +layers = -1, 36 + + + +[convolutional] +batch_normalize=1 +filters=128 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +size=3 +stride=1 +pad=1 +filters=256 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=128 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +size=3 +stride=1 +pad=1 +filters=256 +activation=leaky + +[convolutional] +batch_normalize=1 +filters=128 +size=1 +stride=1 +pad=1 +activation=leaky + +[convolutional] +batch_normalize=1 +size=3 +stride=1 +pad=1 +filters=256 +activation=leaky + +[convolutional] +size=1 +stride=1 +pad=1 +filters=255 +activation=linear + + +[yolo] +mask = 0,1,2 +anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 +classes=80 +num=9 +jitter=.3 +ignore_thresh = .7 +truth_thresh = 1 +random=1 + diff --git a/yolov3.txt b/yolov3.txt new file mode 100644 index 0000000..e64b530 --- /dev/null +++ b/yolov3.txt @@ -0,0 +1,5 @@ +kruche +radioaktywne +niebezpieczne +biohazard +latwopalne From b0a7183d7b3eaf3f4ab412c703f6b24e7ca6bf59 Mon Sep 17 00:00:00 2001 From: Michal Kijowski Date: Fri, 8 May 2020 20:45:53 +0000 Subject: [PATCH 08/20] Update 'README.md' --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 9654e69..d178bcc 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ Repostitory for artificial intelligence project. +This project requires file with weights, which is located in michal.kronmar.eu/yolov3.weights. This file must be located in main directory of this project. + # Authors: * Michał Kijowski From c016b2448260e9a52e38210b930919583f7b9b93 Mon Sep 17 00:00:00 2001 From: Michal Kijowski Date: Sat, 9 May 2020 05:28:55 +0000 Subject: [PATCH 09/20] Update 'neurons.py' --- neurons.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/neurons.py b/neurons.py index e7fbf9a..bbee91e 100644 --- a/neurons.py +++ b/neurons.py @@ -41,6 +41,8 @@ class Neurons: x[3]=1 elif "latwopalne" in y: x[2]=1 + else: + x[0]=1 print(x) if x[0]==1: print("Zwykła") From 5c205247f6f94218dbc561b57d95ef4980d0887e Mon Sep 17 00:00:00 2001 From: Michal Kijowski Date: Sun, 10 May 2020 20:15:47 +0000 Subject: [PATCH 10/20] Upload files to 'demo' --- demo/biohazard.png | Bin 0 -> 18946 bytes demo/electrical.png | Bin 0 -> 8728 bytes demo/flammable.png | Bin 0 -> 9700 bytes demo/kruche.png | Bin 0 -> 4604 bytes demo/radioactive.png | Bin 0 -> 18626 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 demo/biohazard.png create mode 100644 demo/electrical.png create mode 100644 demo/flammable.png create mode 100644 demo/kruche.png create mode 100644 demo/radioactive.png diff --git a/demo/biohazard.png b/demo/biohazard.png new file mode 100644 index 0000000000000000000000000000000000000000..b8c6f9fbfd58c80dd276be6fa7a0524a5c58f848 GIT binary patch literal 18946 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 literal 0 HcmV?d00001 diff --git a/demo/electrical.png b/demo/electrical.png new file mode 100644 index 0000000000000000000000000000000000000000..b4bdb98875b0c44989c912459f69ad8edae70996 GIT binary patch literal 8728 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 CkwzE* literal 0 HcmV?d00001 diff --git a/demo/radioactive.png b/demo/radioactive.png new file mode 100644 index 0000000000000000000000000000000000000000..f32955530fbbcbb678ded6033af0a33fff0c3a6d GIT binary patch literal 18626 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 ZyC3S3{nsR_CinmV002ovPDHLkV1nVjk2(MV literal 0 HcmV?d00001 From 78ad3aa7cf85e7abcad24697f7d529c5f661a15d Mon Sep 17 00:00:00 2001 From: Michal Kijowski Date: Sun, 10 May 2020 20:19:44 +0000 Subject: [PATCH 11/20] Add 'KijowskiM.md' --- KijowskiM.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 KijowskiM.md diff --git a/KijowskiM.md b/KijowskiM.md new file mode 100644 index 0000000..bb559db --- /dev/null +++ b/KijowskiM.md @@ -0,0 +1,27 @@ +## Raport z wykonania części indywidualnej projektu +## Kijowski Michał + +### Omówienie projektu + +Projekt polega na dodaniu automatycznej identyfikacji paczek przychodzących do magazynu, na podstawie ich zdjęcia. Do wykonania projektu wykorzystałem uczenie sieci neuronowych (yolov3). Po otrzymaniu pliku graficznego przedstawiającego paczkę, program szuka na niej piktogramów aby zidentyfikować tę paczkę. + +Wyróżniamy: + +| Identyfikacja | Wyszukiwane piktogramy | +| -------- | -------- | +| Kruche | ![](https://git.wmi.amu.edu.pl/s444399/AI/raw/master/demo/fragile.png) | +| -------- | -------- | +| Niebezpieczne | ![](https://git.wmi.amu.edu.pl/s444399/AI/raw/master/demo/electrical.png) ![](https://git.wmi.amu.edu.pl/s444399/AI/raw/master/demo/biohazard.png) | +| -------- | -------- | +| Radioaktywne | ![](https://git.wmi.amu.edu.pl/s444399/AI/raw/master/demo/radioactive.png) | +| -------- | -------- | +| Łatwopalne | ![](https://git.wmi.amu.edu.pl/s444399/AI/raw/master/demo/flammable.png) | + +Jeśli nie znajdziemy żadnego z piktogramów, paczka jest klasyfikowana jako zwykła. + +### Uczenie modelu + +### Integracja projektu + +### Implementacja projektu + From 2475fe887475f251cde9b5473f9c636a6d35293e Mon Sep 17 00:00:00 2001 From: Michal Kijowski Date: Sun, 10 May 2020 20:20:46 +0000 Subject: [PATCH 12/20] Update 'KijowskiM.md' --- KijowskiM.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/KijowskiM.md b/KijowskiM.md index bb559db..a32225d 100644 --- a/KijowskiM.md +++ b/KijowskiM.md @@ -9,12 +9,9 @@ Wyróżniamy: | Identyfikacja | Wyszukiwane piktogramy | | -------- | -------- | -| Kruche | ![](https://git.wmi.amu.edu.pl/s444399/AI/raw/master/demo/fragile.png) | -| -------- | -------- | +| Kruche | ![](https://git.wmi.amu.edu.pl/s444399/AI/raw/master/demo/kruche.png) | | Niebezpieczne | ![](https://git.wmi.amu.edu.pl/s444399/AI/raw/master/demo/electrical.png) ![](https://git.wmi.amu.edu.pl/s444399/AI/raw/master/demo/biohazard.png) | -| -------- | -------- | | Radioaktywne | ![](https://git.wmi.amu.edu.pl/s444399/AI/raw/master/demo/radioactive.png) | -| -------- | -------- | | Łatwopalne | ![](https://git.wmi.amu.edu.pl/s444399/AI/raw/master/demo/flammable.png) | Jeśli nie znajdziemy żadnego z piktogramów, paczka jest klasyfikowana jako zwykła. From 667ee3e37f2fe3695a903d2e34b80901d0272188 Mon Sep 17 00:00:00 2001 From: Michal Kijowski Date: Sun, 10 May 2020 20:57:24 +0000 Subject: [PATCH 13/20] Update 'KijowskiM.md' --- KijowskiM.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/KijowskiM.md b/KijowskiM.md index a32225d..6f58369 100644 --- a/KijowskiM.md +++ b/KijowskiM.md @@ -18,6 +18,41 @@ Jeśli nie znajdziemy żadnego z piktogramów, paczka jest klasyfikowana jako zw ### Uczenie modelu +Program ten dysponuje pięcioma klasami, są to: +* kruche +* radioaktywne +* zagrożenia elektryczne +* biohazard +* latwopalne + +Dla każdej klasy został przygotowany zbiór przedstawiający piktogramy reprezentowane przez te klasy: +* kruche - 137 zdjęć +* radioaktywne - 136 zdjęć +* zagrożenia elektryczne - 141 zdjęć +* biohazard - 144 zdjęć +* latwopalne - 120 zdjęć + +Dla każdego pliku przygotowałem plik tekstowy o takiej samej nazwie (różniącej się tylko rozszerzeniem), w którym zawarte są współrzędne obiektów które chcemy wyszukiwać. I tak w każdej lini dla każdego obiektu na danym zdjęciu, zgodnie ze schematem: + + + +Z tak przygotowanego zbioru wybrałem losowo niewielką część jako zbiór testowy. + +Nasz zbiór uczący używamy w programie [darknet](https://github.com/pjreddie/darknet) do wygenerowania wag dla sieci. Wykorzystałem do tego pretrenowany model i dostosowałem go do potrzeb tego projektu z wykorzystaniem właśnie tego zbioru. + +Współczynnik recall (część wspólna obiektu i detekcji przez rozmiar obiektu) dla poszczególnych etapów uczenia na podstawie zbioru testowego: + +| Liczba iteracji | Współczynnik recall | +| -------- | -------- | +| 100 | % | +| 200 | % | +| 500 | % | +| 1000 | % | +| 5000 | % | +| 15000 | % | +| 30000 | % | +| 40000 | % | + ### Integracja projektu ### Implementacja projektu From 733efeb983cf35b18376c127832a33b397562917 Mon Sep 17 00:00:00 2001 From: Michal Kijowski Date: Sun, 10 May 2020 21:03:30 +0000 Subject: [PATCH 14/20] Upload files to 'demo' --- demo/a.png | Bin 0 -> 91423 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demo/a.png diff --git a/demo/a.png b/demo/a.png new file mode 100644 index 0000000000000000000000000000000000000000..23bb048f73fe33092c6ffacbf4d90459e64668f6 GIT binary patch literal 91423 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 Date: Sun, 10 May 2020 21:06:32 +0000 Subject: [PATCH 15/20] Update 'KijowskiM.md' --- KijowskiM.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/KijowskiM.md b/KijowskiM.md index 6f58369..bb69cf5 100644 --- a/KijowskiM.md +++ b/KijowskiM.md @@ -55,5 +55,29 @@ Współczynnik recall (część wspólna obiektu i detekcji przez rozmiar obiekt ### Integracja projektu +Integracja wykonana jest w pliku program.py + +Mój podprojekt wywoływany jest po wciśnięciu lewego przycisku myszy. + +` + elif(event.type==pygame.MOUSEBUTTONDOWN): + if (type(self.map[0][2]) == Floor): + meh = easygui.fileopenbox("Wybierz zdjęcie paczki", "Wybierz zdjęcie paczki", filetypes = [["*.jpg", "*.jpeg", "*.png", "Pliki graficzne"]]) + if meh is None: + return + while pathlib.Path(meh).suffix!=".jpg" and pathlib.Path(meh).suffix!=".jpeg" and pathlib.Path(meh).suffix!=".png": + meh = easygui.fileopenbox("Wybierz zdjęcie paczki", "Wybierz zdjęcie paczki", filetypes = [["*.jpg", "*.jpeg", "*.png", "Pliki graficzne"]]) + if meh is None: + return + whatIsIt = self.neurons.whatIsIt(meh) +` +Sprawdzamy oczywiście czy lobby na paczki jest puste a jeśli tak to wywołujemy metodę fileopenbox z klasy easygui pozwalającą na wybranie pliku w ładny graficzny sposób. + +![](https://git.wmi.amu.edu.pl/s444399/AI/raw/master/demo/a.png) + +Następnie sprawdzamy czy jest to plik graficzny jeśli nie, powtarzamy to do skutku, lub zamknięcia okna. + +Jeśli mamy już plik graficzny to ścieżka do niego jest przekazywana do klasy podprojektu której obiektem jest neurons a metodą którą wykonujemy jest whatIsIt. + ### Implementacja projektu From 3bb37ad37605833be5b0289ee7d9b379cd996f56 Mon Sep 17 00:00:00 2001 From: Michal Kijowski Date: Sun, 10 May 2020 21:07:11 +0000 Subject: [PATCH 16/20] Update 'KijowskiM.md' --- KijowskiM.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/KijowskiM.md b/KijowskiM.md index bb69cf5..fb4cef5 100644 --- a/KijowskiM.md +++ b/KijowskiM.md @@ -59,8 +59,7 @@ Integracja wykonana jest w pliku program.py Mój podprojekt wywoływany jest po wciśnięciu lewego przycisku myszy. -` - elif(event.type==pygame.MOUSEBUTTONDOWN): +` elif(event.type==pygame.MOUSEBUTTONDOWN): if (type(self.map[0][2]) == Floor): meh = easygui.fileopenbox("Wybierz zdjęcie paczki", "Wybierz zdjęcie paczki", filetypes = [["*.jpg", "*.jpeg", "*.png", "Pliki graficzne"]]) if meh is None: @@ -69,8 +68,7 @@ Mój podprojekt wywoływany jest po wciśnięciu lewego przycisku myszy. meh = easygui.fileopenbox("Wybierz zdjęcie paczki", "Wybierz zdjęcie paczki", filetypes = [["*.jpg", "*.jpeg", "*.png", "Pliki graficzne"]]) if meh is None: return - whatIsIt = self.neurons.whatIsIt(meh) -` + whatIsIt = self.neurons.whatIsIt(meh)` Sprawdzamy oczywiście czy lobby na paczki jest puste a jeśli tak to wywołujemy metodę fileopenbox z klasy easygui pozwalającą na wybranie pliku w ładny graficzny sposób. ![](https://git.wmi.amu.edu.pl/s444399/AI/raw/master/demo/a.png) From f3808a146a69e41f23e41fb776255b90ce3a7e10 Mon Sep 17 00:00:00 2001 From: Michal Kijowski Date: Sun, 10 May 2020 21:07:37 +0000 Subject: [PATCH 17/20] Update 'KijowskiM.md' --- KijowskiM.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/KijowskiM.md b/KijowskiM.md index fb4cef5..27893e0 100644 --- a/KijowskiM.md +++ b/KijowskiM.md @@ -59,7 +59,7 @@ Integracja wykonana jest w pliku program.py Mój podprojekt wywoływany jest po wciśnięciu lewego przycisku myszy. -` elif(event.type==pygame.MOUSEBUTTONDOWN): + elif(event.type==pygame.MOUSEBUTTONDOWN): if (type(self.map[0][2]) == Floor): meh = easygui.fileopenbox("Wybierz zdjęcie paczki", "Wybierz zdjęcie paczki", filetypes = [["*.jpg", "*.jpeg", "*.png", "Pliki graficzne"]]) if meh is None: @@ -68,7 +68,7 @@ Mój podprojekt wywoływany jest po wciśnięciu lewego przycisku myszy. meh = easygui.fileopenbox("Wybierz zdjęcie paczki", "Wybierz zdjęcie paczki", filetypes = [["*.jpg", "*.jpeg", "*.png", "Pliki graficzne"]]) if meh is None: return - whatIsIt = self.neurons.whatIsIt(meh)` + whatIsIt = self.neurons.whatIsIt(meh) Sprawdzamy oczywiście czy lobby na paczki jest puste a jeśli tak to wywołujemy metodę fileopenbox z klasy easygui pozwalającą na wybranie pliku w ładny graficzny sposób. ![](https://git.wmi.amu.edu.pl/s444399/AI/raw/master/demo/a.png) From 13ebaf71a4c39562bf564bde2bc2188a732c279e Mon Sep 17 00:00:00 2001 From: Michal Kijowski Date: Sun, 10 May 2020 21:23:27 +0000 Subject: [PATCH 18/20] Update 'KijowskiM.md' --- KijowskiM.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/KijowskiM.md b/KijowskiM.md index 27893e0..cad456a 100644 --- a/KijowskiM.md +++ b/KijowskiM.md @@ -79,3 +79,51 @@ Jeśli mamy już plik graficzny to ścieżka do niego jest przekazywana do klasy ### Implementacja projektu +Implementacja projektu znajduje się w klasie Neurons z pliku neurons.py. + +class Neurons: + def __init__(self): + pass + def get_output_layers(self, net): + layer_names = net.getLayerNames() + output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()] + return output_layers + def whatIsIt(self, path): + image = cv2.imread(path) + scale = 0.00392 + classes = None + with open("yolov3.txt", 'r') as f: + classes = [line.strip() for line in f.readlines()] + net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg") + blob = cv2.dnn.blobFromImage(image, scale, (608, 608), (0, 0, 0), True, crop=False) + net.setInput(blob) + outs = net.forward(self.get_output_layers(net)) + class_ids = [] + +W pierwszej części pliku wczytujemy wszystko zgodnie z zasadami detekcji dla tej metody. Wczytujemy naszą grafikę (ścieżka ze zmiennej path), model (yolov3.weights), nazwy klas (yolov3.txt), oraz konfigurację (yolov3.cfg). Następnie tworzymy sieć z modułu dnn (Deep Neural Networks) pakietu opencv (cv2) oraz tworzymy pustą listę na nasze przyszłe detekcje. Do listy outs pobieramy detekcje. + + for out in outs: + for detection in out: + scores = detection[5:] + class_id = np.argmax(scores) + confidence = scores[class_id] + if confidence > 0.2: + class_ids.append(class_id) + y = [classes[ids] for ids in class_ids] + +Gdy już mamy detekcje w liście outs, sprawdzamy które z nich mają prawdopodobieństwo większe niż 20% i dodajemy je do listy class_ids. Następnie zapisujemy nazwy tych klas do listy y za pomocą listy składanej. + + x = [0, 0, 0, 0, 0] + if "kruche" in y: + x[1]=1 + elif "niebezpieczne" in y: + x[4]=1 + elif "biohazard" in y: + x[4]=1 + elif "radioaktywne" in y: + x[3]=1 + elif "latwopalne" in y: + x[2]=1 + return [list(x)] + +następnie sprawdzamy detekcję i generujemy listę z jedynką na pozycji odpowiadającej odpowiedniej detekcji, którą następnie zwracamy. \ No newline at end of file From 6fc278a2cf82243e2135cff4e9a46536b032a287 Mon Sep 17 00:00:00 2001 From: Michal Kijowski Date: Sun, 10 May 2020 21:40:18 +0000 Subject: [PATCH 19/20] Update 'KijowskiM.md' --- KijowskiM.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/KijowskiM.md b/KijowskiM.md index cad456a..cd094a1 100644 --- a/KijowskiM.md +++ b/KijowskiM.md @@ -44,14 +44,14 @@ Współczynnik recall (część wspólna obiektu i detekcji przez rozmiar obiekt | Liczba iteracji | Współczynnik recall | | -------- | -------- | -| 100 | % | -| 200 | % | -| 500 | % | -| 1000 | % | -| 5000 | % | -| 15000 | % | -| 30000 | % | -| 40000 | % | +| 100 | 34.62 % | +| 200 | 35.14 % | +| 500 | 39.47 % | +| 1000 | 53.49 % | +| 5000 | 75.56 % | +| 15000 | 73.33 % | +| 30000 | 77.42 % | +| 40000 | 84.78 % | ### Integracja projektu From e5344e714b84a5ae061ac7dcfe8e24ea2bc21676 Mon Sep 17 00:00:00 2001 From: Tomasz Lech Date: Tue, 19 May 2020 11:54:00 +0000 Subject: [PATCH 20/20] Zaktualizuj 'environment.md' --- environment.md | 1 + 1 file changed, 1 insertion(+) diff --git a/environment.md b/environment.md index 7ce5c11..bda36e4 100644 --- a/environment.md +++ b/environment.md @@ -9,6 +9,7 @@ Projekt ma przedstawiać działanie niektórych aspektów sztucznej inteligencji * Rozpoznawanie cech paczki na podstawie zdjęcia (uczenie sieci neuronowych). W dowolnym momencie działania programu będzie można dodać zdjęcie paczki, która zostanie przeanalizowana pod kątem jego cech. Następnie zostanie przekazane do rozłożenia na magazynie za pomocą kolejnego podprojektu, lub ręcznie, w zależności od wyboru użytkownika. Wykorzystane zostaną do tego biblioteki YOLOv3 oraz OpenCV. * Wykorzystanie uczenia drzew decyzyjnych do decydowania na które regały rozmieścić paczkę, na podstawie jej cech. Zbiór uczący byłby wyznaczany za pomocą algorytmu na początku działania każdego programu, ponieważ musiałby się on dostosować do konktretnych warunków podanych przez użytkownika. Następnie po wciśnięciu konkretnego przycisku, drzewo decyzyjne decydowałoby w którą konkretną lokalizację umieścić przesyłkę. Wykorzystana zostanie biblioteka sklearn. +* Wykorzystanie algorytmów genetycznych do znalezienia najoptymalniejszej drogi pomiędzy zajętymi regałami a miejscami oddania paczek w celu oddania paczki przy najmniejszym koszcie. ### Wykonanie