DSZI_2020_Projekt/final_evaluation.md
2020-06-14 20:03:18 +02:00

3.9 KiB

Raport przygotowały: Sara Kowalska, Marta Roszak, Kinga Molik i Natalia Plitta
Raportowany okres: 27 kwietnia - 15 czerwca
Niniejszy raport poświęcony jest przekazaniu informacji na temat końcowego stanu projektu grupowego realizowanego na przedmiot Sztuczna Inteligencja w roku akademickim 2019/2020.

W ramach projektu były realizowane 4 mini projekty:

  • "Rozpoznawanie talerzy" - Sara Kowalska
  • "Ocenianie ciężkostrawności potraw" - Marta Roszak
  • "Rozpoznawanie banknotów" - Kinga Molik
  • "Polecanie dań" - Natalia Plitta

Integracja mini projektów w programie głównym

Działanie projektów indywidualnych zostało opisane w odpowiednich osobnych raportach. Sposób działania ("chodzenia") agenta został opisany w raporcie dotyczącym działania algorytmu A*. Wszystkie 4 podprojekty zostały zintegrowane w głównym programie w ten sam sposób. W oknie programu zostały umieszczone 4 przyciski uruchamiające poszczególne programy:

alt text

Naciśnięcie któregoś z nich wywołuje odpowiednią funkcję - classify() / evaluate() / payment() / Tree_natalia(), która wykonuje przykładowy ruch agenta prezentujący dane zagadnienie:

    flag = True
    clock = pygame.time.Clock()
    while flag:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
        button("Rozpoznawanie talerzy", 0, width + 1, 150, 48, light_beige, white, classify)
        button("Ciężkostrawność dań", 150, width + 1, 150, 48, light_beige, white, evaluate)
        button("Rozpoznawanie banknotów", 300, width + 1, 150, 48, light_beige, white, payment)
        button("Polecanie dań", 450, width + 1, 150, 48, light_beige, white, Tree_natalia)
        redrawWindow(window)

Funkcja button() zdefiniowana jest następująco:

def button(msg, x, y, w, h, ic, ac, action=None):
    mouse = pygame.mouse.get_pos()
    click = pygame.mouse.get_pressed()

    if x+w > mouse[0] > x and y+h > mouse[1] > y:
        pygame.draw.rect(window, ac, (x, y, w, h))
        if click[0] == 1 and action != None:
            print("pressed")
            action(1)
    else:
        pygame.draw.rect(window, ic, (x, y, w, h))

    smallText = pygame.font.Font("freesansbold.ttf", 15)
    words = [msg.split(' ')]
    textSurf, textRect = text_objects(words[0][0], smallText)
    textRect.center = ((x+(w/2)), (y+(h/4)))
    window.blit(textSurf, textRect)

    textSurf, textRect = text_objects(words[0][1], smallText)
    textRect.center = ((x + (w / 2)), (y + (3*h / 4)))
    window.blit(textSurf, textRect)

Sczytywana jest tutaj pozycja myszki - "sprawdzane jest", czy został naciśnięty lewy przycisk myszy i jeśli tak, to na który przycisk kliknął użytkownik. Zdefiniowany jest również wygląd tekstu znajdującego się na przyciskach.

Funkcja button() wywoływana jest też w funkcji redrawWindow(), która odpowiada za odświeżanie wyświetlanego okna:

def redrawWindow(surface):
    surface.fill(beige)
    bot.draw(surface)
    kitchen.draw(surface)
    for i in range(len(tables)):
        tables[i].draw(surface)
    for i in range(len(puddles)):
        image = pygame.image.load(r'puddle.png')
        image = pygame.transform.scale(image, (sizeBetween - 1, sizeBetween - 1))
        surface.blit(image, (puddles[i][0] * sizeBetween + 1, puddles[i][1] * sizeBetween + 1))

    drawGrid(width, rows, surface)
    button("Rozpoznawanie talerzy", 0, width + 1, 150, 48, light_beige, white)
    button("Ciężkostrawność dań", 150, width + 1, 150, 48, light_beige, white)
    button("Rozpoznawanie banknotów", 300, width + 1, 150, 48, light_beige, white)
    button("Polecanie dań", 450, width + 1, 150, 48, light_beige, white)

    pygame.display.update()

Po bezawaryjnym wykonaniu funkcji - ruchu agenta, aplikacja zostaje wyłączona.