podprojekt indywidualny
BIN
etykiety.h5
42
game.py
@ -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',
|
||||
|
6
main.py
@ -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__':
|
||||
|
@ -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)
|
||||
|
BIN
resources/smieci w kontenerach/glass/glass138.jpg
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
resources/smieci w kontenerach/glass/glass152.jpg
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
resources/smieci w kontenerach/glass/glass217.jpg
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
resources/smieci w kontenerach/glass/glass256.jpg
Normal file
After Width: | Height: | Size: 8.1 KiB |
BIN
resources/smieci w kontenerach/glass/glass363.jpg
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
resources/smieci w kontenerach/glass/glass367.jpg
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
resources/smieci w kontenerach/glass/glass424.jpg
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
resources/smieci w kontenerach/glass/glass441.jpg
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
resources/smieci w kontenerach/glass/glass447.jpg
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
resources/smieci w kontenerach/glass/glass464.jpg
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
resources/smieci w kontenerach/glass/glass55.jpg
Normal file
After Width: | Height: | Size: 8.0 KiB |
BIN
resources/smieci w kontenerach/metal/metal131.jpg
Normal file
After Width: | Height: | Size: 9.9 KiB |
BIN
resources/smieci w kontenerach/metal/metal227.jpg
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
resources/smieci w kontenerach/metal/metal273.jpg
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
resources/smieci w kontenerach/metal/metal361.jpg
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
resources/smieci w kontenerach/metal/metal53.jpg
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
resources/smieci w kontenerach/metal/metal77.jpg
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
resources/smieci w kontenerach/metal/metal93.jpg
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
resources/smieci w kontenerach/paper/paper111.jpg
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
resources/smieci w kontenerach/paper/paper114.jpg
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
resources/smieci w kontenerach/paper/paper175.jpg
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
resources/smieci w kontenerach/paper/paper204.jpg
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
resources/smieci w kontenerach/paper/paper233.jpg
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
resources/smieci w kontenerach/paper/paper235.jpg
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
resources/smieci w kontenerach/paper/paper242.jpg
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
resources/smieci w kontenerach/paper/paper301.jpg
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
resources/smieci w kontenerach/paper/paper334.jpg
Normal file
After Width: | Height: | Size: 8.8 KiB |
BIN
resources/smieci w kontenerach/paper/paper498.jpg
Normal file
After Width: | Height: | Size: 8.8 KiB |
BIN
resources/smieci w kontenerach/paper/paper507.jpg
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
resources/smieci w kontenerach/paper/paper516.jpg
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
resources/smieci w kontenerach/paper/paper527.jpg
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
resources/smieci w kontenerach/paper/paper590.jpg
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
resources/smieci w kontenerach/paper/paper67.jpg
Normal file
After Width: | Height: | Size: 8.7 KiB |
BIN
resources/smieci w kontenerach/paper/paper76.jpg
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
resources/smieci w kontenerach/plastic/paper263.jpg
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic110.jpg
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic113.jpg
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic132.jpg
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic151.jpg
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic168.jpg
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic191.jpg
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic215.jpg
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic219.jpg
Normal file
After Width: | Height: | Size: 8.1 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic312.jpg
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic319.jpg
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic34.jpg
Normal file
After Width: | Height: | Size: 9.1 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic368.jpg
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic389.jpg
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic403.jpg
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
resources/smieci w kontenerach/plastic/plastic408.jpg
Normal file
After Width: | Height: | Size: 27 KiB |
@ -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)
|
||||
|
||||
|
129
uczenie_adamO.py
@ -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()
|