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

View File

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

View File

@ -193,7 +193,6 @@ class Kontener(pygame.sprite.Sprite):
WIDTH, HEIGHT) WIDTH, HEIGHT)
self.smieci = [] self.smieci = []
self.typ = typ self.typ = typ
os.makedirs("resources/smieci w kontenerach/" + self.typ)
def dodajSmiec(self, smiec): def dodajSmiec(self, smiec):
self.smieci.append(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' h5_etykiety = 'etykiety.h5'
def hu_moments(zdj): def wyznaczHuMomenty(zdj):
zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2GRAY) zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2GRAY)
momenty = cv2.HuMoments(cv2.moments(zdj)).flatten() momenty = cv2.HuMoments(cv2.moments(zdj)).flatten()
return momenty return momenty
def haralick(zdj): def wyznaczHaralick(zdj):
szare_zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2GRAY) szare_zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2GRAY)
haralick = mahotas.features.haralick(szare_zdj).mean(axis=0) haralick = mahotas.features.haralick(szare_zdj).mean(axis=0)
return haralick return haralick
def histogram(zdj, mask=None): def wyznaczHistogram(zdj, mask=None):
zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2HSV) zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2HSV)
hist = cv2.calcHist([zdj], [0, 1, 2], mask, [8, 8, 8], [0, 256, 0, 256, 0, 256]) hist = cv2.calcHist([zdj], [0, 1, 2], mask, [8, 8, 8], [0, 256, 0, 256, 0, 256])
cv2.normalize(hist, hist) cv2.normalize(hist, hist)
@ -46,11 +46,11 @@ for klasa in klasy:
zdj = cv2.resize(zdj, rozmiar_zdj) # zmiana rozmiaru zdj = cv2.resize(zdj, rozmiar_zdj) # zmiana rozmiaru
# wyznaczanie parametrow zdjecia # wyznaczanie parametrow zdjecia
fv_hu_moments = hu_moments(zdj) momenty = wyznaczHuMomenty(zdj)
fv_haralick = haralick(zdj) haralick = wyznaczHaralick(zdj)
fv_histogram = histogram(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) etykiety_zdj.append(klasa)
dane.append(wiersz) 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()