diff --git a/find.py b/find.py new file mode 100644 index 0000000..cd28456 --- /dev/null +++ b/find.py @@ -0,0 +1,19 @@ +import torch +import cv2 +import torchvision +import torch.nn as nn +import torch.nn.functional as F +import torchvision.transforms as transforms +import matplotlib.pyplot as plt +import numpy as np +import torch.optim as optim +from PIL import Image +import os + + +for filename in os.listdir('./resources/smieci/plastic'): + + img = Image.open('./resources/smieci/plastic/'+filename) + pil_to_tensor = transforms.ToTensor()(img).unsqueeze_(0) + if(str(pil_to_tensor.shape[1]) == '1'): + print(filename) diff --git a/game.py b/game.py index ea738b8..d4f241e 100644 --- a/game.py +++ b/game.py @@ -14,13 +14,13 @@ smieci_path = '' smieci_w_kontenerach = "resources/smieci w kontenerach" # PODAJ OSOBE PRZED URUCHOMIENIEM (kacper/adamB/adamO) -osoba = 'kacper' +osoba = 'adamB' rfc = None if osoba == 'kacper': smieci_path = 'resources/smieci' elif osoba == 'adamB': - smieci_path = 'resources/smieci_stare' + smieci_path = 'resources/smieci' else: smieci_path = 'resources/smieci_stare' rfc = adamO.rozpocznijUczenie() @@ -50,283 +50,284 @@ ILOSC_KOLUMN = 15 WINDOW_SIZE = [1300, 980] -# def game(): -# obiekty = utworzObiekty() -# nieodwiedzone_domy = obiekty["wspolrzedne_domow"] -# nieodwiedzone_kontenery = [(obiekty["kontener_szklo"].x, obiekty["kontener_szklo"].y), -# (obiekty["kontener_papier"].x, -# obiekty["kontener_papier"].y), -# (obiekty["kontener_metal"].x, -# obiekty["kontener_metal"].y), -# (obiekty["kontener_plastik"].x, obiekty["kontener_plastik"].y), ] -# # Petla az uzytkownik zamknie program -# done = False -# clock = pygame.time.Clock() +def game(): + obiekty = utworzObiekty() + nieodwiedzone_domy = obiekty["wspolrzedne_domow"] + nieodwiedzone_kontenery = [(obiekty["kontener_szklo"].x, obiekty["kontener_szklo"].y), + (obiekty["kontener_papier"].x, + obiekty["kontener_papier"].y), + (obiekty["kontener_metal"].x, + obiekty["kontener_metal"].y), + (obiekty["kontener_plastik"].x, obiekty["kontener_plastik"].y), ] + # Petla az uzytkownik zamknie program + done = False + clock = pygame.time.Clock() -# # -------- Glowna petla programu ----------- -# while not done: + # -------- Glowna petla programu ----------- + while not done: -# # obsluga zdarzen typu nacisniecie klawisza lub przycisku myszy -# for event in pygame.event.get(): -# if event.type == pygame.QUIT: -# done = True -# elif event.type == pygame.MOUSEBUTTONDOWN: -# # Zapisywanie pozycji myszki po kliknieciu -# pozycja_myszki = pygame.mouse.get_pos() + # obsluga zdarzen typu nacisniecie klawisza lub przycisku myszy + for event in pygame.event.get(): + if event.type == pygame.QUIT: + done = True + elif event.type == pygame.MOUSEBUTTONDOWN: + # Zapisywanie pozycji myszki po kliknieciu + pozycja_myszki = pygame.mouse.get_pos() -# # Zamiana pozycji na konkretne koordy -# kolumna = pozycja_myszki[0] // (WIDTH + MARGIN) -# wiersz = pozycja_myszki[1] // (HEIGHT + MARGIN) -# print("Click ", pozycja_myszki, -# "Grid coordinates: ", wiersz, kolumna) -# elif event.type == pygame.KEYDOWN: -# if event.key == pygame.K_LEFT: -# obiekty["smieciarka"].w_lewo() -# if event.key == pygame.K_RIGHT: -# # kacper.trainModel() -# obiekty["smieciarka"].w_prawo() -# if event.key == pygame.K_UP: -# obiekty["smieciarka"].w_gore() -# if event.key == pygame.K_DOWN: -# obiekty["smieciarka"].w_dol() + # Zamiana pozycji na konkretne koordy + kolumna = pozycja_myszki[0] // (WIDTH + MARGIN) + wiersz = pozycja_myszki[1] // (HEIGHT + MARGIN) + print("Click ", pozycja_myszki, + "Grid coordinates: ", wiersz, kolumna) + elif event.type == pygame.KEYDOWN: + if event.key == pygame.K_LEFT: + obiekty["smieciarka"].w_lewo() + if event.key == pygame.K_RIGHT: + # kacper.trainModel() + obiekty["smieciarka"].w_prawo() + if event.key == pygame.K_UP: + obiekty["smieciarka"].w_gore() + if event.key == pygame.K_DOWN: + obiekty["smieciarka"].w_dol() -# rysowaniePlanszy(obiekty) -# while nieodwiedzone_domy: -# nieodwiedzone_domy.sort( -# key=lambda x: astar.heurystyka((obiekty["smieciarka"].x, obiekty["smieciarka"].y), x)) -# cel = nieodwiedzone_domy.pop(0) -# obiekty["smieciarka"].astar_move( -# obiekty, (obiekty["smieciarka"].x, obiekty["smieciarka"].y), cel) -# pozX = cel[0] -# pozY = cel[1] -# for dom in obiekty["domy"]: -# if dom.x == pozX and dom.y == pozY: -# while dom.smieci: -# smiec = dom.smieci.pop(0) + rysowaniePlanszy(obiekty) + while nieodwiedzone_domy: + nieodwiedzone_domy.sort( + key=lambda x: astar.heurystyka((obiekty["smieciarka"].x, obiekty["smieciarka"].y), x)) + cel = nieodwiedzone_domy.pop(0) + obiekty["smieciarka"].astar_move( + obiekty, (obiekty["smieciarka"].x, obiekty["smieciarka"].y), cel) + pozX = cel[0] + pozY = cel[1] + for dom in obiekty["domy"]: + if dom.x == pozX and dom.y == pozY: + while dom.smieci: + smiec = dom.smieci.pop(0) -# rodzaj = "" -# if osoba == 'kacper': -# rodzaj = kacper.przewidz(smiec) -# elif osoba == 'adamB': -# pass -# else: -# rodzaj = adamO.przewidz(smiec, rfc) + rodzaj = "" + if osoba == 'kacper': + rodzaj = kacper.przewidz(smiec) + elif osoba == 'adamB': + rodzaj = adamB.predict(smiec) + # rodzaj = kacper.przewidz(smiec) + else: + rodzaj = adamO.przewidz(smiec, rfc) -# if rodzaj == "paper": -# obiekty["smieciarka"].dodajPapier(smiec) -# elif rodzaj == "glass": -# obiekty["smieciarka"].dodajSzklo(smiec) -# elif rodzaj == "metal": -# obiekty["smieciarka"].dodajMetal(smiec) -# elif rodzaj == "plastic": -# obiekty["smieciarka"].dodajPlastik(smiec) + if rodzaj == "paper": + obiekty["smieciarka"].dodajPapier(smiec) + elif rodzaj == "glass": + obiekty["smieciarka"].dodajSzklo(smiec) + elif rodzaj == "metal": + obiekty["smieciarka"].dodajMetal(smiec) + elif rodzaj == "plastic": + obiekty["smieciarka"].dodajPlastik(smiec) -# while nieodwiedzone_kontenery: -# nieodwiedzone_kontenery.sort( -# key=lambda x: astar.heurystyka((obiekty["smieciarka"].x, obiekty["smieciarka"].y), x)) -# cel = nieodwiedzone_kontenery.pop(0) -# obiekty["smieciarka"].astar_move( -# obiekty, (obiekty["smieciarka"].x, obiekty["smieciarka"].y), cel) -# pozX = cel[0] -# pozY = cel[1] + while nieodwiedzone_kontenery: + nieodwiedzone_kontenery.sort( + key=lambda x: astar.heurystyka((obiekty["smieciarka"].x, obiekty["smieciarka"].y), x)) + cel = nieodwiedzone_kontenery.pop(0) + obiekty["smieciarka"].astar_move( + obiekty, (obiekty["smieciarka"].x, obiekty["smieciarka"].y), cel) + pozX = cel[0] + pozY = cel[1] -# if obiekty["plansza"][pozX, pozY].obiekt == obiekty["kontener_papier"]: -# while obiekty["smieciarka"].papier: -# smiec = obiekty["smieciarka"].papier.pop(0) -# obiekty["kontener_papier"].dodajSmiec(smiec) -# elif obiekty["plansza"][pozX, pozY].obiekt == obiekty["kontener_szklo"]: -# while obiekty["smieciarka"].szklo: -# smiec = obiekty["smieciarka"].szklo.pop(0) -# obiekty["kontener_szklo"].dodajSmiec(smiec) -# elif obiekty["plansza"][pozX, pozY].obiekt == obiekty["kontener_metal"]: -# while obiekty["smieciarka"].metal: -# smiec = obiekty["smieciarka"].metal.pop(0) -# obiekty["kontener_metal"].dodajSmiec(smiec) -# elif obiekty["plansza"][pozX, pozY].obiekt == obiekty["kontener_plastik"]: -# while obiekty["smieciarka"].plastik: -# smiec = obiekty["smieciarka"].plastik.pop(0) -# obiekty["kontener_plastik"].dodajSmiec(smiec) + if obiekty["plansza"][pozX, pozY].obiekt == obiekty["kontener_papier"]: + while obiekty["smieciarka"].papier: + smiec = obiekty["smieciarka"].papier.pop(0) + obiekty["kontener_papier"].dodajSmiec(smiec) + elif obiekty["plansza"][pozX, pozY].obiekt == obiekty["kontener_szklo"]: + while obiekty["smieciarka"].szklo: + smiec = obiekty["smieciarka"].szklo.pop(0) + obiekty["kontener_szklo"].dodajSmiec(smiec) + elif obiekty["plansza"][pozX, pozY].obiekt == obiekty["kontener_metal"]: + while obiekty["smieciarka"].metal: + smiec = obiekty["smieciarka"].metal.pop(0) + obiekty["kontener_metal"].dodajSmiec(smiec) + elif obiekty["plansza"][pozX, pozY].obiekt == obiekty["kontener_plastik"]: + while obiekty["smieciarka"].plastik: + smiec = obiekty["smieciarka"].plastik.pop(0) + obiekty["kontener_plastik"].dodajSmiec(smiec) -# clock.tick(7) -# pygame.quit() -# return rfc + clock.tick(7) + pygame.quit() + return rfc -# def rysowaniePlanszy(obiekty): -# obiekty["obraz"].fill(BLACK) -# # rysowanie planszy -# for i in range(ILOSC_WIERSZY): -# for j in range(ILOSC_KOLUMN): -# pygame.draw.rect(obiekty["obraz"], -# obiekty["plansza"][i, j].kolor, -# [(MARGIN + WIDTH) * obiekty["plansza"][i, j].pozY + MARGIN, -# (MARGIN + HEIGHT) * -# obiekty["plansza"][i, j].pozX + MARGIN, -# WIDTH, -# HEIGHT]) +def rysowaniePlanszy(obiekty): + obiekty["obraz"].fill(BLACK) + # rysowanie planszy + for i in range(ILOSC_WIERSZY): + for j in range(ILOSC_KOLUMN): + pygame.draw.rect(obiekty["obraz"], + obiekty["plansza"][i, j].kolor, + [(MARGIN + WIDTH) * obiekty["plansza"][i, j].pozY + MARGIN, + (MARGIN + HEIGHT) * + obiekty["plansza"][i, j].pozX + MARGIN, + WIDTH, + HEIGHT]) -# obiekty["obraz"].blit(pygame.image.load( -# "resources/plansza/wysypisko.jpg"), (5, 5)) -# obiekty["obraz"].blit(pygame.image.load( -# "resources/plansza/jezioro.png"), (395, 655)) -# obiekty["plansza"][6, 10].setJestPrzeszkoda(True) -# obiekty["plansza"][6, 11].setJestPrzeszkoda(True) -# obiekty["plansza"][7, 10].setJestPrzeszkoda(True) -# obiekty["plansza"][7, 11].setJestPrzeszkoda(True) -# obiekty["sprajty"].draw(obiekty["obraz"]) -# text_metal, text_papier, text_plastik, text_szklo, text_pozostale, text_odwiedzone_domy = liczSmieci( -# obiekty["domy"], obiekty) -# obiekty["obraz"].blit(obiekty["text_pozostalo"], -# (1020, 240)) -# obiekty["obraz"].blit(text_metal, (1020, 280)) -# obiekty["obraz"].blit(text_plastik, (1020, 320)) -# obiekty["obraz"].blit(text_szklo, (1020, 360)) -# obiekty["obraz"].blit(text_papier, (1020, 400)) -# # obiekty["obraz"].blit(text_pozostale, (1020, 440)) -# obiekty["obraz"].blit(text_odwiedzone_domy, (1020, 480)) + obiekty["obraz"].blit(pygame.image.load( + "resources/plansza/wysypisko.jpg"), (5, 5)) + obiekty["obraz"].blit(pygame.image.load( + "resources/plansza/jezioro.png"), (395, 655)) + obiekty["plansza"][6, 10].setJestPrzeszkoda(True) + obiekty["plansza"][6, 11].setJestPrzeszkoda(True) + obiekty["plansza"][7, 10].setJestPrzeszkoda(True) + obiekty["plansza"][7, 11].setJestPrzeszkoda(True) + obiekty["sprajty"].draw(obiekty["obraz"]) + text_metal, text_papier, text_plastik, text_szklo, text_pozostale, text_odwiedzone_domy = liczSmieci( + obiekty["domy"], obiekty) + obiekty["obraz"].blit(obiekty["text_pozostalo"], + (1020, 240)) + obiekty["obraz"].blit(text_metal, (1020, 280)) + obiekty["obraz"].blit(text_plastik, (1020, 320)) + obiekty["obraz"].blit(text_szklo, (1020, 360)) + obiekty["obraz"].blit(text_papier, (1020, 400)) + # obiekty["obraz"].blit(text_pozostale, (1020, 440)) + obiekty["obraz"].blit(text_odwiedzone_domy, (1020, 480)) -# pygame.display.update() + pygame.display.update() -# def utworzObiekty(): -# # Tworzenie planszy i kratek -# plansza = np.array([[modele.Kratka(i, j) for i in range(ILOSC_KOLUMN)] -# for j in range(ILOSC_WIERSZY)]) -# all_sprites_list = pygame.sprite.Group() -# # smieciarka -# smieciarka = modele.Smieciarka(10, 10) -# plansza[10, 10].setKolor(BLUE) -# plansza[10, 10].setObiekt(smieciarka) +def utworzObiekty(): + # Tworzenie planszy i kratek + plansza = np.array([[modele.Kratka(i, j) for i in range(ILOSC_KOLUMN)] + for j in range(ILOSC_WIERSZY)]) + all_sprites_list = pygame.sprite.Group() + # smieciarka + smieciarka = modele.Smieciarka(10, 10) + plansza[10, 10].setKolor(BLUE) + plansza[10, 10].setObiekt(smieciarka) -# # tworzenie wyswietlanego okna -# os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (0, 30) -# obraz = pygame.display.set_mode(WINDOW_SIZE) -# smieciarka.setObraz(obraz) -# pygame.display.set_caption("Inteligentna śmieciarka") + # tworzenie wyswietlanego okna + os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (0, 30) + obraz = pygame.display.set_mode(WINDOW_SIZE) + smieciarka.setObraz(obraz) + pygame.display.set_caption("Inteligentna śmieciarka") -# # kontenery -# 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) + # kontenery + 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_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_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( -# "resources/plansza/pojemnik_metal.png")) -# plansza[0, 4].setJestKontenerem(True) -# plansza[0, 4].setObiekt(kontener_metal) + kontener_metal = modele.Kontener(0, 4, "metal") + kontener_metal.setImage(pygame.image.load( + "resources/plansza/pojemnik_metal.png")) + plansza[0, 4].setJestKontenerem(True) + plansza[0, 4].setObiekt(kontener_metal) -# 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_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_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) + 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', -# 'resources/plansza/domy/dom3.png', 'resources/plansza/domy/dom4.png', -# 'resources/plansza/domy/dom5.png'] + # domy + doms_array = ['resources/plansza/domy/dom1.png', 'resources/plansza/domy/dom2.png', + 'resources/plansza/domy/dom3.png', 'resources/plansza/domy/dom4.png', + 'resources/plansza/domy/dom5.png'] -# domy_lista = pygame.sprite.Group() + domy_lista = pygame.sprite.Group() -# smieci_lista = [os.path.join(path, filename) -# for path, dirs, files in os.walk(smieci_path) -# for filename in files] + smieci_lista = [os.path.join(path, filename) + for path, dirs, files in os.walk(smieci_path) + for filename in files] -# # informacje o ilosci smieci w domach -# font = pygame.font.SysFont("arial", 20, bold=True) -# text_pozostalo = font.render("Pozostało śmieci w domach:", True, WHITE) + # informacje o ilosci smieci w domach + font = pygame.font.SysFont("arial", 20, bold=True) + text_pozostalo = font.render("Pozostało śmieci w domach:", True, WHITE) -# wspolrzedne_domow = modele.generujWspolrzedneDomow(10) -# for i in range(len(wspolrzedne_domow)): -# dom = modele.Dom(wspolrzedne_domow[i][0], wspolrzedne_domow[i][1]) -# dom.setImage(pygame.image.load(random.choice(doms_array))) -# plansza[wspolrzedne_domow[i][0], -# wspolrzedne_domow[i][1]].setJestDomem(True) -# plansza[wspolrzedne_domow[i][0], -# wspolrzedne_domow[i][1]].setObiekt(dom) -# domy_lista.add(dom) -# all_sprites_list.add(dom) + wspolrzedne_domow = modele.generujWspolrzedneDomow(10) + for i in range(len(wspolrzedne_domow)): + dom = modele.Dom(wspolrzedne_domow[i][0], wspolrzedne_domow[i][1]) + dom.setImage(pygame.image.load(random.choice(doms_array))) + plansza[wspolrzedne_domow[i][0], + wspolrzedne_domow[i][1]].setJestDomem(True) + plansza[wspolrzedne_domow[i][0], + wspolrzedne_domow[i][1]].setObiekt(dom) + domy_lista.add(dom) + all_sprites_list.add(dom) -# lista_domow = domy_lista.sprites() -# for d in lista_domow: -# for j in range(5): -# smiec = random.choice(smieci_lista) -# d.dodajSmiec(smiec) + lista_domow = domy_lista.sprites() + for d in lista_domow: + for j in range(5): + smiec = random.choice(smieci_lista) + d.dodajSmiec(smiec) -# # ustawienie wysypiska, rozmiar wysypiska 5x5 -# for i in range(5): -# for j in range(5): -# plansza[i, j].setJestWysypiskiem(True) + # ustawienie wysypiska, rozmiar wysypiska 5x5 + for i in range(5): + for j in range(5): + plansza[i, j].setJestWysypiskiem(True) -# all_sprites_list.add(kontener_plastik, kontener_metal, kontener_papier, kontener_szklo, -# smieciarka) + all_sprites_list.add(kontener_plastik, kontener_metal, kontener_papier, kontener_szklo, + smieciarka) -# obiekty = { -# "plansza": plansza, -# "smieciarka": smieciarka, -# "obraz": obraz, -# "kontener_plastik": kontener_plastik, -# "kontener_szklo": kontener_szklo, -# "kontener_metal": kontener_metal, -# "kontener_papier": kontener_papier, -# "sprajty": all_sprites_list, -# "domy": lista_domow, -# "smieci": smieci_lista, -# "font": font, -# "text_pozostalo": text_pozostalo, -# "wspolrzedne_domow": wspolrzedne_domow -# } -# smieciarka.setObiekty(obiekty) -# smieciarka.setPlansza(plansza) -# return obiekty + obiekty = { + "plansza": plansza, + "smieciarka": smieciarka, + "obraz": obraz, + "kontener_plastik": kontener_plastik, + "kontener_szklo": kontener_szklo, + "kontener_metal": kontener_metal, + "kontener_papier": kontener_papier, + "sprajty": all_sprites_list, + "domy": lista_domow, + "smieci": smieci_lista, + "font": font, + "text_pozostalo": text_pozostalo, + "wspolrzedne_domow": wspolrzedne_domow + } + smieciarka.setObiekty(obiekty) + smieciarka.setPlansza(plansza) + return obiekty -# def liczSmieci(domy, obiekty): -# ile_metalu = 0 -# ile_szkla = 0 -# ile_papieru = 0 -# ile_plastiku = 0 -# ile_pozostalych = 0 -# for d in domy: -# for s in d.smieci: -# if "metal" in s: -# ile_metalu += 1 -# elif "paper" in s: -# ile_papieru += 1 -# elif "plastic" in s: -# ile_plastiku += 1 -# elif "glass" in s: -# ile_szkla += 1 +def liczSmieci(domy, obiekty): + ile_metalu = 0 + ile_szkla = 0 + ile_papieru = 0 + ile_plastiku = 0 + ile_pozostalych = 0 + for d in domy: + for s in d.smieci: + if "metal" in s: + ile_metalu += 1 + elif "paper" in s: + ile_papieru += 1 + elif "plastic" in s: + ile_plastiku += 1 + elif "glass" in s: + ile_szkla += 1 -# text_metal = obiekty["font"].render( -# "Metal: " + str(ile_metalu), True, WHITE) -# text_papier = obiekty["font"].render( -# "Papier: " + str(ile_papieru), True, WHITE) -# text_plastik = obiekty["font"].render( -# "Plastik: " + str(ile_plastiku), True, WHITE) -# text_szklo = obiekty["font"].render( -# "Szkło: " + str(ile_szkla), True, WHITE) -# text_pozostale = obiekty["font"].render( -# "Pozostałe: " + str(ile_pozostalych), True, WHITE) -# text_odwiedzone_domy = obiekty["font"].render( -# "Odwiedzone domy: " + str(obiekty["smieciarka"].getOdwiedzoneDomy()), True, WHITE) + text_metal = obiekty["font"].render( + "Metal: " + str(ile_metalu), True, WHITE) + text_papier = obiekty["font"].render( + "Papier: " + str(ile_papieru), True, WHITE) + text_plastik = obiekty["font"].render( + "Plastik: " + str(ile_plastiku), True, WHITE) + text_szklo = obiekty["font"].render( + "Szkło: " + str(ile_szkla), True, WHITE) + text_pozostale = obiekty["font"].render( + "Pozostałe: " + str(ile_pozostalych), True, WHITE) + text_odwiedzone_domy = obiekty["font"].render( + "Odwiedzone domy: " + str(obiekty["smieciarka"].getOdwiedzoneDomy()), True, WHITE) -# return text_metal, text_papier, text_plastik, text_szklo, text_pozostale, text_odwiedzone_domy + return text_metal, text_papier, text_plastik, text_szklo, text_pozostale, text_odwiedzone_domy diff --git a/main.py b/main.py index d558c73..1078433 100644 --- a/main.py +++ b/main.py @@ -4,7 +4,7 @@ import uczenie_adamB def main(): - uczenie_adamB.Siec() + game.game() if __name__ == '__main__': diff --git a/resources/asmieci/0M1VQgmsbWc.jpg b/resources/asmieci/0M1VQgmsbWc.jpg new file mode 100644 index 0000000..5a2276c Binary files /dev/null and b/resources/asmieci/0M1VQgmsbWc.jpg differ diff --git a/resources/asmieci/google-image(0002).jpeg b/resources/asmieci/google-image(0002).jpeg new file mode 100644 index 0000000..b72d2d9 Binary files /dev/null and b/resources/asmieci/google-image(0002).jpeg differ diff --git a/resources/asmieci/google-image(0003).jpeg b/resources/asmieci/google-image(0003).jpeg new file mode 100644 index 0000000..0eac3a7 Binary files /dev/null and b/resources/asmieci/google-image(0003).jpeg differ diff --git a/resources/smieci/paper/google-image(0021).jpeg b/resources/asmieci/google-image(0021).jpeg similarity index 100% rename from resources/smieci/paper/google-image(0021).jpeg rename to resources/asmieci/google-image(0021).jpeg diff --git a/resources/smieci/metal/google-image(0527).jpeg b/resources/smieci/metal/google-image(0527).jpeg deleted file mode 100644 index 00b6774..0000000 Binary files a/resources/smieci/metal/google-image(0527).jpeg and /dev/null differ diff --git a/resources/smieci/metal/google-image(0602).jpeg b/resources/smieci/metal/google-image(0602).jpeg deleted file mode 100644 index ec914e7..0000000 Binary files a/resources/smieci/metal/google-image(0602).jpeg and /dev/null differ diff --git a/resources/smieci/paper/google-image(0148).jpeg b/resources/smieci/paper/google-image(0148).jpeg deleted file mode 100644 index 3dbd6c3..0000000 Binary files a/resources/smieci/paper/google-image(0148).jpeg and /dev/null differ diff --git a/resources/smieci/plastic/815.jpg b/resources/smieci/plastic/815.jpg deleted file mode 100644 index d77367b..0000000 Binary files a/resources/smieci/plastic/815.jpg and /dev/null differ diff --git a/resources/smieci/plastic/google-image(0014).jpeg b/resources/smieci/plastic/google-image(0014).jpeg deleted file mode 100644 index 99fdb8d..0000000 Binary files a/resources/smieci/plastic/google-image(0014).jpeg and /dev/null differ diff --git a/resources/smieci/plastic/google-image(0071).jpeg b/resources/smieci/plastic/google-image(0071).jpeg deleted file mode 100644 index a881524..0000000 Binary files a/resources/smieci/plastic/google-image(0071).jpeg and /dev/null differ diff --git a/resources/smieci/plastic/google-image(0645).jpeg b/resources/smieci/plastic/google-image(0645).jpeg deleted file mode 100644 index 5895def..0000000 Binary files a/resources/smieci/plastic/google-image(0645).jpeg and /dev/null differ diff --git a/resources/zbior_uczacy/plastic/бутылка.jpg b/resources/zbior_uczacy/plastic/бутылка.jpg deleted file mode 100644 index fe0b0d3..0000000 Binary files a/resources/zbior_uczacy/plastic/бутылка.jpg and /dev/null differ diff --git a/uczenie_adamB.py b/uczenie_adamB.py index 1246515..b8fa861 100644 --- a/uczenie_adamB.py +++ b/uczenie_adamB.py @@ -1,65 +1,155 @@ import torch +import cv2 import torchvision import torch.nn as nn import torch.nn.functional as F import torchvision.transforms as transforms import matplotlib.pyplot as plt import numpy as np +import torch.optim as optim +from PIL import Image transform = transforms.Compose( [transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]) -trainset = torchvision.datasets.ImageFolder( - root='./resources/zbior_uczacy', transform=transform) -trainloader = torch.utils.data.DataLoader( - trainset, batch_size=4, shuffle=True, num_workers=2) -testset = torchvision.datasets.ImageFolder( - root='./resources/smieci', transform=transform) -testloader = torch.utils.data.DataLoader( - testset, batch_size=4, shuffle=False, num_workers=2) - -classes = ('glass', 'metal', 'paper', 'plastic') +# def imshow(img): +# img = img / 2 + 0.5 +# npimg = img.numpy() +# plt.imshow(np.transpose(npimg, (1, 2, 0))) +# plt.show() -def imshow(img): - img = img / 2 + 0.5 - npimg = img.numpy() - plt.imshow(np.transpose(npimg, (1, 2, 0))) - plt.show() +# dataiter = iter(trainloader) +# images, labels = dataiter.next() + +# # show images +# imshow(torchvision.utils.make_grid(images)) +# # print labels +# print(' '.join('%5s' % classes[labels[j]] for j in range(4))) -dataiter = iter(trainloader) -images, labels = dataiter.next() - -# show images -imshow(torchvision.utils.make_grid(images)) -# print labels -print(' '.join('%5s' % classes[labels[j]] for j in range(4))) - - -class Siec(nn.Module): +class Net(nn.Module): def __init__(self): - super(Siec, self).__init__() - self.conv1 = nn.Conv2d(1, 6, 3) - self.conv2 = nn.Conv2d(6, 16, 3) - self.fc1 = nn.Linear(16*6*6, 120) + super(Net, self).__init__() + self.conv1 = nn.Conv2d(3, 6, 5) + self.pool = nn.MaxPool2d(2, 2) + self.conv2 = nn.Conv2d(6, 16, 5) + self.fc1 = nn.Linear(16 * 71 * 71, 120) self.fc2 = nn.Linear(120, 84) self.fc3 = nn.Linear(84, 10) def forward(self, x): - x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2)) - x = F.max_pool2d(F.relu(self.conv2(x)), 2) - x = x.view(-1, self.num_flat_features(x)) + x = self.pool(F.relu(self.conv1(x))) + x = self.pool(F.relu(self.conv2(x))) + x = x.view(x.size(0), 16 * 71 * 71) x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x - def num_flat_features(self, x): - size = x.size()[1:] # all dimensions except the batch dimension - num_features = 1 - for s in size: - num_features *= s - return num_features + + +def train(): + trainset = torchvision.datasets.ImageFolder( + root='./resources/zbior_uczacy', transform=transform) + trainloader = torch.utils.data.DataLoader( + trainset, batch_size=1, shuffle=True, num_workers=2) + + classes = ('glass', 'metal', 'paper', 'plastic') + criterion = nn.CrossEntropyLoss() + optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9) + + for epoch in range(10): # loop over the dataset multiple times + print("siema") + running_loss = 0.0 + for i, data in enumerate(trainloader, 0): + # get the inputs; data is a list of [inputs, labels] + inputs, labels = data + + # zero the parameter gradients + optimizer.zero_grad() + + # forward + backward + optimize + outputs = net(inputs) + loss = criterion(outputs, labels) + loss.backward() + optimizer.step() + + # print statistics + running_loss += loss.item() + if i: # print every 2000 mini-batches + print('[%d, %5d] loss: %.3f' % + (epoch + 1, i + 1, running_loss)) + running_loss = 0.0 + print("kyrw") + + print('Finished Training') + PATH = './wytrenowaned.pth' + torch.save(net.state_dict(), PATH) + + +def predict(img_path): + net = Net() + PATH = './wytrenowaned.pth' + img = Image.open(img_path) + pil_to_tensor = transforms.ToTensor()(img).unsqueeze_(0) + if(pil_to_tensor.shape[1] == 1): + print(img_path) + classes = ('glass', 'metal', 'paper', 'plastic') + # testset = torchvision.datasets.ImageFolder( + # root='./resources/smieci', transform=transform) + # testloader = torch.utils.data.DataLoader( + # testset, batch_size=4, shuffle=True, num_workers=2) + # dataiter = iter(testloader) + # images, labels = dataiter.next() + + +# print images +# imshow(torchvision.utils.make_grid(images)) + # print('GroundTruth: ', ' '.join('%5s' % + # classes[labels[j]] for j in range(4))) + # print('---') + # print(images) + # print('---') + net.load_state_dict(torch.load(PATH)) + outputs = net(pil_to_tensor) + return classes[torch.max(outputs, 1)[1]] + + # print(classes[torch.max(outputs, 1)[1]]) + # print('Predicted: ', ' '.join('%5s' % classes[predicted[j]] + # for j in range(1))) + +# correct = 0 +# total = 0 +# with torch.no_grad(): +# for data in testloader: +# images, labels = data +# outputs = net(images) +# _, predicted = torch.max(outputs.data, 1) +# total += labels.size(0) +# correct += (predicted == labels).sum().item() + +# print('Accuracy of the network on the test images: %d %%' % ( +# 100 * correct / total)) + +# class_correct = list(0. for i in range(4)) +# class_total = list(0. for i in range(4)) +# with torch.no_grad(): +# for data in testloader: +# images, labels = data +# outputs = net(images) +# _, predicted = torch.max(outputs, 1) +# c = (predicted == labels).squeeze() +# for i in range(3): +# label = labels[i] +# print(labels) +# class_correct[label] += c[i].item() +# class_total[label] += 1 + + +# for i in range(4): +# print('Accuracy of %5s : %2d %%' % ( +# classes[i], 100 * class_correct[i] / class_total[i])) +# train() diff --git a/wytrenowaned.pth b/wytrenowaned.pth new file mode 100644 index 0000000..ec8425d Binary files /dev/null and b/wytrenowaned.pth differ diff --git a/wytrenowany.h5 b/wytrenowany.h5 new file mode 100644 index 0000000..7155b7d Binary files /dev/null and b/wytrenowany.h5 differ