integration plate recognition with the game, add popup
16
main.py
@ -1,8 +1,10 @@
|
|||||||
import secrets
|
import secrets
|
||||||
import sys
|
import sys
|
||||||
|
from random import randrange
|
||||||
|
|
||||||
from src.decisionTree import *
|
from src.decisionTree import *
|
||||||
#from src.SubprojectMaksymilianKierski.PlateRecognition import use_model_to_predict
|
|
||||||
|
from src.SubprojectMaksymilianKierski.PlateRecognition import use_model_to_predict, text_speech
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
# SETUP
|
# SETUP
|
||||||
@ -18,6 +20,7 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
goal = None
|
goal = None
|
||||||
path = ''
|
path = ''
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
|
|
||||||
for event in pygame.event.get():
|
for event in pygame.event.get():
|
||||||
@ -43,6 +46,7 @@ if __name__ == "__main__":
|
|||||||
tree.print()
|
tree.print()
|
||||||
|
|
||||||
if event.key == pygame.K_m:
|
if event.key == pygame.K_m:
|
||||||
|
|
||||||
tabPos = [[1, 2], [1, 4], [1, 5], [1, 7], [1, 8], [1, 10], [5, 4], [5, 8]]
|
tabPos = [[1, 2], [1, 4], [1, 5], [1, 7], [1, 8], [1, 10], [5, 4], [5, 8]]
|
||||||
print(tabPos[0][0], tabPos[0][1])
|
print(tabPos[0][0], tabPos[0][1])
|
||||||
|
|
||||||
@ -55,7 +59,15 @@ if __name__ == "__main__":
|
|||||||
path = waiter.findPath(goal)
|
path = waiter.findPath(goal)
|
||||||
path = waiter.translatePath(path)
|
path = waiter.translatePath(path)
|
||||||
else:
|
else:
|
||||||
print('hello')
|
predict = use_model_to_predict('test-{}'.format(randrange(20)))
|
||||||
|
if predict == 1:
|
||||||
|
predict = 'This plate is empty'
|
||||||
|
else:
|
||||||
|
predict = 'This plate has food'
|
||||||
|
text_speech('arialnarrow.ttf', 30, predict, (255, 255, 255), (0, 128, 0),
|
||||||
|
(waiter.X*100), (waiter.Y*50), False, False, screen=graphics.screen)
|
||||||
|
pygame.display.flip()
|
||||||
|
|
||||||
|
|
||||||
if event.key == pygame.K_r:
|
if event.key == pygame.K_r:
|
||||||
temp = False
|
temp = False
|
||||||
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 8.2 KiB |
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 106 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 8.5 KiB |
BIN
src/SubprojectMaksymilianKierski/Data/TestData/test-3.jpg
Normal file
After Width: | Height: | Size: 360 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 213 KiB After Width: | Height: | Size: 213 KiB |
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 10 KiB |
@ -16,6 +16,8 @@ from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten, Conv2D,
|
|||||||
from tensorflow.keras.callbacks import TensorBoard # tensorboard to analysing our models in period of time
|
from tensorflow.keras.callbacks import TensorBoard # tensorboard to analysing our models in period of time
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
import pygame
|
||||||
|
|
||||||
current_path = os.path.dirname(__file__)
|
current_path = os.path.dirname(__file__)
|
||||||
relative_path = os.path.join(current_path, 'Data/')
|
relative_path = os.path.join(current_path, 'Data/')
|
||||||
|
|
||||||
@ -28,6 +30,7 @@ training_data = []
|
|||||||
X = [] # feature set
|
X = [] # feature set
|
||||||
y = [] # label set
|
y = [] # label set
|
||||||
|
|
||||||
|
|
||||||
def create_training_data():
|
def create_training_data():
|
||||||
for category in CATEGORIES:
|
for category in CATEGORIES:
|
||||||
path = os.path.join(DATADIR, category) # path to plate images dir
|
path = os.path.join(DATADIR, category) # path to plate images dir
|
||||||
@ -121,16 +124,37 @@ def use_model_to_predict(name):
|
|||||||
def prepare(filepath):
|
def prepare(filepath):
|
||||||
img_array = cv2.imread(filepath, cv2.IMREAD_GRAYSCALE)
|
img_array = cv2.imread(filepath, cv2.IMREAD_GRAYSCALE)
|
||||||
new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE)) # The same which in model
|
new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE)) # The same which in model
|
||||||
plt.imshow(new_array, cmap=plt.cm.binary)
|
plt.imshow(img_array, cmap=plt.cm.binary)
|
||||||
plt.show()
|
plt.show()
|
||||||
return new_array.reshape(-1, IMG_SIZE, IMG_SIZE, 1)
|
return new_array.reshape(-1, IMG_SIZE, IMG_SIZE, 1)
|
||||||
|
|
||||||
model = tf.keras.models.load_model(relative_path + 'SavedModels/plate-64x2-cnn.model')
|
model = tf.keras.models.load_model(relative_path + 'SavedModels/plate-64x2-cnn.model')
|
||||||
prediction = model.predict([prepare(relative_path + 'TestData/' + name + '.jpg')])
|
prediction = model.predict([prepare(relative_path + 'TestData/' + name + '.jpg')])
|
||||||
|
|
||||||
print(CATEGORIES[int(prediction[0][0])])
|
|
||||||
print(prediction)
|
print(prediction)
|
||||||
|
print(CATEGORIES[int(prediction[0][0])])
|
||||||
|
return int(prediction[0][0])
|
||||||
|
|
||||||
|
|
||||||
|
def text_speech(font: str, size: int, text: str, color, background, x, y, bold: bool, bubble: bool, screen):
|
||||||
|
global textRect
|
||||||
|
font = pygame.font.SysFont(None, 40)
|
||||||
|
# font = pygame.font.Font(font,size)
|
||||||
|
font.set_bold(bold)
|
||||||
|
textSurf = font.render(text, True, color).convert_alpha()
|
||||||
|
if bubble:
|
||||||
|
textSize = textSurf.get_size()
|
||||||
|
bubbleSurf = pygame.Surface((textSize[0] * 2., textSize[1] * 2))
|
||||||
|
textRect = bubbleSurf.get_rect()
|
||||||
|
bubbleSurf.fill(background)
|
||||||
|
bubbleSurf.blit(textSurf, textSurf.get_rect(center=textRect.center))
|
||||||
|
textRect.center = (x, y)
|
||||||
|
screen.blit(bubbleSurf, textRect)
|
||||||
|
else:
|
||||||
|
textRect = textSurf.get_rect()
|
||||||
|
textRect.center = (x, y)
|
||||||
|
screen.blit(textSurf, textRect)
|
||||||
|
|
||||||
# save_dataset()
|
# save_dataset()
|
||||||
use_model_to_predict('test-full-5')
|
# use_model_to_predict('test-full-5')
|
||||||
# creat_model()
|
# creat_model()
|
||||||
|