2020-03-22 02:01:57 +01:00
|
|
|
import pygame
|
2020-06-09 23:21:04 +02:00
|
|
|
|
2020-04-20 23:19:13 +02:00
|
|
|
from kelner.src.components.GridBoard import GridBoard
|
|
|
|
from kelner.src.components.Waiter import Waiter
|
2020-05-11 20:42:17 +02:00
|
|
|
from kelner.src.components.Kitchen import Kitchen
|
2020-04-20 23:19:13 +02:00
|
|
|
from kelner.src.managers.DrawableCollection import DrawableCollection
|
2020-06-09 23:21:04 +02:00
|
|
|
|
|
|
|
# create screen consts
|
2020-04-20 23:19:13 +02:00
|
|
|
from kelner.src.managers.MenuManager import MenuManager
|
2020-06-09 23:21:04 +02:00
|
|
|
from kelner.src.managers.TableGenerator import TableGenerator
|
2020-05-10 00:04:33 +02:00
|
|
|
from kelner.src.algorithms.DecisionTree import Tree_Builder
|
2020-05-14 23:22:30 +02:00
|
|
|
from kelner.src.managers.KitchenManager import KitchenManager
|
2020-05-16 12:08:02 +02:00
|
|
|
from kelner.src.algorithms.CNN.PrepareData import LoadModelThread
|
2020-06-11 13:54:53 +02:00
|
|
|
from kelner.src.algorithms.FoodNet import classify
|
2020-05-16 12:08:02 +02:00
|
|
|
import kelner.src.settings as settings
|
2020-05-07 18:36:20 +02:00
|
|
|
|
2020-06-09 23:21:04 +02:00
|
|
|
Scale = 1.5 # scale for all images used within project
|
|
|
|
CellSize = round(50 * Scale) # pixel size of 1 square cell in the grid
|
|
|
|
PaintOffset = CellSize # pixel size of paint offset for all drawables
|
|
|
|
GridCountX = 15 # number of columns in grid
|
|
|
|
GridCountY = 9 # number of rows in grid
|
|
|
|
ScreenWidth = CellSize * GridCountX + 2 * PaintOffset # screen width in pixels
|
2020-04-20 23:19:13 +02:00
|
|
|
ScreenHeight = CellSize * GridCountY + 2 * PaintOffset # screen height in pixels
|
2020-05-16 12:08:02 +02:00
|
|
|
running_tasks = {'table': [], 'waiter': []}
|
2020-03-22 02:01:57 +01:00
|
|
|
|
2020-04-20 23:19:13 +02:00
|
|
|
# initialize background
|
|
|
|
gridBoard = GridBoard(ScreenWidth, ScreenHeight)
|
2020-03-22 02:01:57 +01:00
|
|
|
|
2020-06-11 13:54:53 +02:00
|
|
|
classify.join('/src/algorithms/FoodNet/classify.py')
|
|
|
|
|
2020-05-16 12:08:02 +02:00
|
|
|
# start loading prediction model
|
|
|
|
settings.init()
|
|
|
|
load_model_thread = LoadModelThread()
|
|
|
|
|
|
|
|
load_model_thread.start()
|
|
|
|
# joining this thread to main thread. Man thread will be started after this finish
|
|
|
|
load_model_thread.join()
|
|
|
|
|
2020-06-09 23:21:04 +02:00
|
|
|
kitchenManager = KitchenManager(gridBoard)
|
|
|
|
|
2020-04-20 23:19:13 +02:00
|
|
|
# initialize drawable objects manager
|
2020-06-09 23:21:04 +02:00
|
|
|
drawableManager = DrawableCollection(kitchenManager)
|
2020-04-03 23:54:29 +02:00
|
|
|
|
2020-04-20 23:19:13 +02:00
|
|
|
# initialize menu manager
|
2020-04-05 17:27:11 +02:00
|
|
|
menuManager = MenuManager()
|
|
|
|
|
2020-05-10 00:04:33 +02:00
|
|
|
##TESTING THE DECISION TREE
|
2020-05-13 01:59:34 +02:00
|
|
|
# Testing Data
|
2020-05-10 00:04:33 +02:00
|
|
|
testing_db = [
|
|
|
|
[1, 0, 0, 0, "Kurczak"],
|
|
|
|
[0, 1, 0, 0, "Piwo"],
|
|
|
|
[0, 0, 1, 0, "Pizza"],
|
|
|
|
[0, 0, 0, 1, "Salad"],
|
|
|
|
|
|
|
|
]
|
|
|
|
|
2020-05-13 01:59:34 +02:00
|
|
|
# Building a decision tree
|
2020-05-10 00:04:33 +02:00
|
|
|
Test_Tree = Tree_Builder.build_tree(testing_db)
|
|
|
|
|
2020-05-13 01:59:34 +02:00
|
|
|
# Testing the tree
|
2020-05-10 00:04:33 +02:00
|
|
|
if Tree_Builder.zgadnij(testing_db[0], Test_Tree) == "Kurczak":
|
|
|
|
print("test1: passed")
|
|
|
|
else:
|
|
|
|
print("test1: fail")
|
|
|
|
|
|
|
|
if Tree_Builder.zgadnij(testing_db[1], Test_Tree) == "Piwo":
|
|
|
|
print("test2: passed")
|
|
|
|
else:
|
|
|
|
print("test2: fail")
|
|
|
|
|
|
|
|
if Tree_Builder.zgadnij(testing_db[2], Test_Tree) == "Pizza":
|
|
|
|
print("test3: passed")
|
|
|
|
else:
|
|
|
|
print("test3: fail")
|
|
|
|
|
|
|
|
if Tree_Builder.zgadnij(testing_db[3], Test_Tree) == "Salad":
|
|
|
|
print("test4: passed")
|
|
|
|
else:
|
|
|
|
print("test4: fail")
|
|
|
|
|
2020-04-20 23:19:13 +02:00
|
|
|
# initialize waiter component
|
2020-06-09 23:21:04 +02:00
|
|
|
waiter1 = Waiter(7, 4, 0, GridCountX - 1, 0, GridCountY - 1, CellSize, PaintOffset)
|
2020-05-07 18:36:20 +02:00
|
|
|
|
2020-04-20 23:19:13 +02:00
|
|
|
# adds waiter to drawable collection
|
2020-04-27 12:22:19 +02:00
|
|
|
drawableManager.add(waiter1)
|
2020-05-11 20:42:17 +02:00
|
|
|
|
2020-06-09 23:21:04 +02:00
|
|
|
kitchen = Kitchen(14, 0, 5, GridCountX - 5, 5, GridCountY - 5, CellSize, PaintOffset)
|
2020-05-12 10:52:56 +02:00
|
|
|
drawableManager.add(kitchen)
|
2020-06-09 23:21:04 +02:00
|
|
|
|
|
|
|
tableGenerator = TableGenerator(GridCountX, GridCountY, 1, GridCountX - 2, 1, GridCountY - 2, CellSize, PaintOffset, drawableManager)
|
|
|
|
tableGenerator.start()
|
2020-04-05 17:27:11 +02:00
|
|
|
|
2020-04-20 23:19:13 +02:00
|
|
|
# main loop
|
2020-03-22 02:01:57 +01:00
|
|
|
running = True
|
|
|
|
while running:
|
|
|
|
|
|
|
|
for event in pygame.event.get():
|
|
|
|
if event.type == pygame.QUIT:
|
2020-06-09 23:21:04 +02:00
|
|
|
tableGenerator.stop()
|
|
|
|
drawableManager.stop()
|
2020-03-22 02:01:57 +01:00
|
|
|
running = False
|
|
|
|
|
2020-04-05 17:27:11 +02:00
|
|
|
# repaints all objects to the screen
|
2020-06-09 23:21:04 +02:00
|
|
|
# is set only on initial paint or call to forceRepaint()
|
2020-04-20 23:19:13 +02:00
|
|
|
if drawableManager.mustRepaint():
|
2020-05-14 23:22:30 +02:00
|
|
|
if not kitchenManager.is_running():
|
|
|
|
gridBoard.reinitialize()
|
|
|
|
gridBoard.draw(drawableManager)
|
|
|
|
gridBoard.udpdate()
|