podprojekt indywidualny

This commit is contained in:
Adam Osiowy 2020-05-12 19:26:08 +02:00
parent fa6c551783
commit 015b60a006
57 changed files with 164 additions and 28 deletions

Binary file not shown.

42
game.py
View File

@ -6,11 +6,14 @@ import os
import shutil
import astar
import uczenie_kacper as kacper
import uczenie_adamO as adamO
smieci_path = ''
smieci_w_kontenerach = "resources\\smieci w kontenerach"
# PODAJ OSOBE PRZED URUCHOMIENIEM (kacper/adamB/adamO)
osoba = 'kacper'
osoba = 'adamO'
rfc = None
if osoba == 'kacper':
smieci_path = 'resources/smieci'
@ -18,6 +21,7 @@ elif osoba == 'adamB':
smieci_path = 'resources/smieci_stare'
else:
smieci_path = 'resources/smieci_stare'
rfc = adamO.rozpocznijUczenie()
pygame.init()
@ -101,7 +105,7 @@ def game():
elif osoba == 'adamB':
pass
else:
pass
rodzaj = adamO.przewidz(smiec, rfc)
if rodzaj == "paper":
obiekty["smieciarka"].dodajPapier(smiec)
@ -138,8 +142,8 @@ def game():
obiekty["kontener_plastik"].dodajSmiec(smiec)
clock.tick(7)
pygame.quit()
return rfc
def rysowaniePlanszy(obiekty):
@ -195,15 +199,19 @@ def utworzObiekty():
pygame.display.set_caption("Inteligentna śmieciarka")
# kontenery
if os.path.exists('resources/smieci w kontenerach'):
shutil.rmtree("resources/smieci w kontenerach")
os.makedirs('resources/smieci w kontenerach')
if not os.path.exists(smieci_w_kontenerach):
os.makedirs(smieci_w_kontenerach)
else:
for dir in os.listdir(os.getcwd() + "\\" + smieci_w_kontenerach):
files = os.listdir(os.getcwd() + "\\" + smieci_w_kontenerach + "\\" + dir)
for file in files:
os.remove(os.getcwd() + "\\" + smieci_w_kontenerach + "\\" + dir + "\\" + file)
kontener_plastik = modele.Kontener(0, 0, "plastik")
kontener_plastik.setImage(pygame.image.load(
"resources/plansza/pojemnik_plastik.png"))
plansza[0, 0].setJestKontenerem(True)
plansza[0, 0].setObiekt(kontener_plastik)
kontener_szklo = modele.Kontener(4, 4, "glass")
kontener_szklo.setImage(pygame.image.load(
"resources/plansza/pojemnik_szklo.png"))
plansza[4, 4].setJestKontenerem(True)
plansza[4, 4].setObiekt(kontener_szklo)
kontener_metal = modele.Kontener(0, 4, "metal")
kontener_metal.setImage(pygame.image.load(
@ -211,17 +219,17 @@ def utworzObiekty():
plansza[0, 4].setJestKontenerem(True)
plansza[0, 4].setObiekt(kontener_metal)
kontener_papier = modele.Kontener(4, 0, "papier")
kontener_papier = modele.Kontener(4, 0, "paper")
kontener_papier.setImage(pygame.image.load(
"resources/plansza/pojemnik_papier.png"))
plansza[4, 0].setJestKontenerem(True)
plansza[4, 0].setObiekt(kontener_papier)
kontener_szklo = modele.Kontener(4, 4, "szklo")
kontener_szklo.setImage(pygame.image.load(
"resources/plansza/pojemnik_szklo.png"))
plansza[4, 4].setJestKontenerem(True)
plansza[4, 4].setObiekt(kontener_szklo)
kontener_plastik = modele.Kontener(0, 0, "plastic")
kontener_plastik.setImage(pygame.image.load(
"resources/plansza/pojemnik_plastik.png"))
plansza[0, 0].setJestKontenerem(True)
plansza[0, 0].setObiekt(kontener_plastik)
# domy
doms_array = ['resources/plansza/domy/dom1.png', 'resources/plansza/domy/dom2.png',

View File

@ -1,10 +1,10 @@
import pygame
import game
import uczenie_adamO
def main():
print("poczatek programu")
game.game()
rfc = game.game()
uczenie_adamO.wyswietlZdjecia(rfc)
if __name__ == '__main__':

View File

@ -193,7 +193,6 @@ class Kontener(pygame.sprite.Sprite):
WIDTH, HEIGHT)
self.smieci = []
self.typ = typ
os.makedirs("resources/smieci w kontenerach/" + self.typ)
def dodajSmiec(self, smiec):
self.smieci.append(smiec)

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -11,19 +11,19 @@ h5_dane = 'parametry_zdjec.h5'
h5_etykiety = 'etykiety.h5'
def hu_moments(zdj):
def wyznaczHuMomenty(zdj):
zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2GRAY)
momenty = cv2.HuMoments(cv2.moments(zdj)).flatten()
return momenty
def haralick(zdj):
def wyznaczHaralick(zdj):
szare_zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2GRAY)
haralick = mahotas.features.haralick(szare_zdj).mean(axis=0)
return haralick
def histogram(zdj, mask=None):
def wyznaczHistogram(zdj, mask=None):
zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2HSV)
hist = cv2.calcHist([zdj], [0, 1, 2], mask, [8, 8, 8], [0, 256, 0, 256, 0, 256])
cv2.normalize(hist, hist)
@ -46,11 +46,11 @@ for klasa in klasy:
zdj = cv2.resize(zdj, rozmiar_zdj) # zmiana rozmiaru
# wyznaczanie parametrow zdjecia
fv_hu_moments = hu_moments(zdj)
fv_haralick = haralick(zdj)
fv_histogram = histogram(zdj)
momenty = wyznaczHuMomenty(zdj)
haralick = wyznaczHaralick(zdj)
histogram = wyznaczHistogram(zdj)
wiersz = np.hstack([fv_hu_moments, fv_histogram, fv_haralick]) # ustaw poziomo, jeden za drugim
wiersz = np.hstack([momenty, histogram, haralick]) # ustaw poziomo, jeden za drugim
etykiety_zdj.append(klasa)
dane.append(wiersz)

View File

@ -0,0 +1,129 @@
import h5py
import numpy as np
import os
import glob
import cv2
import warnings
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
import matplotlib.pyplot as plt
import mahotas
import random
from math import ceil
warnings.filterwarnings('ignore')
rozmiar_zbioru_testowego = 0.20
katalog_uczacy = "resources\\smieci_stare"
katalog_testujacy = "resources\\smieci w kontenerach"
h5_parametry = 'parametry_zdjec.h5'
h5_etykiety = 'etykiety.h5'
rozmiar_zdj = tuple((500, 500))
def wyznaczHuMomenty(zdj):
zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2GRAY)
momenty = cv2.HuMoments(cv2.moments(zdj)).flatten()
return momenty
def wyznaczHistogram(zdj, mask=None):
zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2HSV)
hist = cv2.calcHist([zdj], [0, 1, 2], mask, [8, 8, 8], [0, 256, 0, 256, 0, 256])
cv2.normalize(hist, hist)
return hist.flatten()
def wyznaczHaralick(zdj):
szare_zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2GRAY)
haralick = mahotas.features.haralick(szare_zdj).mean(axis=0)
return haralick
def rozpocznijUczenie():
klasy = os.listdir(katalog_uczacy)
klasy.sort()
h5f_parametry = h5py.File(h5_parametry, 'r')
h5f_etykiety = h5py.File(h5_etykiety, 'r')
dane = h5f_parametry['dataset_1']
etykiety = h5f_etykiety['dataset_1']
dane = np.array(dane)
etykiety = np.array(etykiety)
h5f_parametry.close()
h5f_etykiety.close()
(uczenieDane, testowanieDane, uczenieEtykiety, testowanieEtykiety) = train_test_split(np.array(dane),
np.array(etykiety),
test_size=rozmiar_zbioru_testowego)
rfc = RandomForestClassifier(max_depth=15, n_jobs=4, random_state=1)
rfc.fit(uczenieDane, uczenieEtykiety)
print("uzyskana skutecznosc: ", rfc.score(testowanieDane, testowanieEtykiety))
return rfc
def przewidz(zdjecie, rfc):
klasy = os.listdir(katalog_uczacy)
klasy.sort()
zdj = cv2.imread(zdjecie)
zdj = cv2.resize(zdj, rozmiar_zdj)
# wyznaczanie parametrow zdjecia
momenty = wyznaczHuMomenty(zdj)
haralick = wyznaczHaralick(zdj)
histogram = wyznaczHistogram(zdj)
wiersz = np.hstack([momenty, histogram, haralick]) # ustaw poziomo, jeden za drugim
wiersz = wiersz.reshape(1, -1) # zmniejsz wymiar z 2 do 1
przewidywany_typ = rfc.predict(wiersz)[0] # zwraca wartosc 0,1,2,3
return klasy[przewidywany_typ] # zwraca glass,metal,paper,plastic
def wyswietlZdjecia(rfc):
if rfc is None:
return
path = os.getcwd()
klasy = os.listdir(katalog_testujacy)
klasy.sort()
wszystkie_pliki = []
for dir in os.listdir(katalog_testujacy):
os.chdir(path + "\\" + katalog_testujacy + "\\" + dir)
pliki = glob.glob('*.jpg')
for i in range(len(pliki)):
pliki[i] = dir + "\\" + pliki[i]
wszystkie_pliki.append(pliki)
os.chdir(path)
wszystkie_pliki = sum(wszystkie_pliki, [])
rozmiar = ceil(0.25 * len(wszystkie_pliki))
wybrane_zdjecia = random.sample(wszystkie_pliki, k=rozmiar)
print("ilosc wybranych zdjec: ",len(wybrane_zdjecia))
for i in wybrane_zdjecia:
zdjecie = cv2.imread(path + "\\" + katalog_testujacy + "\\" + i)
zdjecie = cv2.resize(zdjecie, rozmiar_zdj)
# wyznaczanie parametrow zdjecia
momenty = wyznaczHuMomenty(zdjecie)
haralick = wyznaczHaralick(zdjecie)
histogram = wyznaczHistogram(zdjecie)
wiersz = np.hstack([momenty, histogram, haralick]) # ustaw poziomo, jeden za drugim
wiersz = wiersz.reshape(1, -1) # zmniejsz wymiar z 2 do 1
przewidywany = rfc.predict(wiersz)[0]
prawdopodobienstwo = rfc.predict_proba(wiersz)
cv2.putText(zdjecie, klasy[przewidywany], (3, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), thickness=3)
cv2.putText(zdjecie, str(prawdopodobienstwo), (3, 60), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), thickness=1)
cv2.putText(zdjecie, i, (3, 460), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), thickness=2)
plt.imshow(cv2.cvtColor(zdjecie, cv2.COLOR_BGR2RGB))
plt.show()