dodanie sieci neuronowej i inne zmiany
3
.idea/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
8
.idea/Gra-SI_nn.iml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="PYTHON_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
6
.idea/inspectionProfiles/profiles_settings.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<settings>
|
||||
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||
<version value="1.0" />
|
||||
</settings>
|
||||
</component>
|
4
.idea/misc.xml
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11" project-jdk-type="Python SDK" />
|
||||
</project>
|
8
.idea/modules.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/Gra-SI_nn.iml" filepath="$PROJECT_DIR$/.idea/Gra-SI_nn.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
6
.idea/vcs.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
8
agent.py
@ -20,13 +20,13 @@ class Agent(pygame.sprite.Sprite):
|
||||
self.y_change = 0
|
||||
|
||||
#self.AGENT_IMG = pygame.image.load("./zdjecia/"+self.AGENT_IMAGES[self.direction]+".png")
|
||||
self.AGENT_IMG_RIGHT = pygame.image.load("./zdjecia/gandalf-prawo.png")
|
||||
self.AGENT_IMG_RIGHT = pygame.image.load("./pozostale_zdjecia/gandalf-prawo.png")
|
||||
self.AGENT_RIGHT = pygame.transform.scale(self.AGENT_IMG_RIGHT,(64,64))
|
||||
self.AGENT_IMG_DOWN = pygame.image.load("./zdjecia/gandalf-dol.png")
|
||||
self.AGENT_IMG_DOWN = pygame.image.load("./pozostale_zdjecia/gandalf-dol.png")
|
||||
self.AGENT_DOWN = pygame.transform.scale(self.AGENT_IMG_DOWN,(64,64))
|
||||
self.AGENT_IMG_LEFT = pygame.image.load("./zdjecia/gandalf-lewo.png")
|
||||
self.AGENT_IMG_LEFT = pygame.image.load("./pozostale_zdjecia/gandalf-lewo.png")
|
||||
self.AGENT_LEFT = pygame.transform.scale(self.AGENT_IMG_LEFT,(64,64))
|
||||
self.AGENT_IMG_UP = pygame.image.load("./zdjecia/gandalf-gora.png")
|
||||
self.AGENT_IMG_UP = pygame.image.load("./pozostale_zdjecia/gandalf-gora.png")
|
||||
self.AGENT_UP = pygame.transform.scale(self.AGENT_IMG_UP,(64,64))
|
||||
|
||||
self.AGENT = self.AGENT_RIGHT
|
||||
|
BIN
class_names.pkl
Normal file
6
main.py
@ -6,6 +6,7 @@ from mobs import *
|
||||
#from unknown_mob import * #unknown mob
|
||||
from bfs import *
|
||||
from heapq import *
|
||||
from nn import *
|
||||
|
||||
class Game:
|
||||
|
||||
@ -16,10 +17,10 @@ class Game:
|
||||
self.running = True
|
||||
self.clock = pygame.time.Clock()
|
||||
|
||||
self.BACKGROUND_IMG= pygame.image.load("./zdjecia/podloze.jpg")
|
||||
self.BACKGROUND_IMG= pygame.image.load("./pozostale_zdjecia/podloze.jpg")
|
||||
self.BACKGROUND = pygame.transform.scale(self.BACKGROUND_IMG,(64,64))
|
||||
|
||||
self.LVL_ICON_PNG = pygame.image.load("./zdjecia/lvl_icon.png")
|
||||
self.LVL_ICON_PNG = pygame.image.load("./pozostale_zdjecia/lvl_icon.png")
|
||||
self.LVL_ICON = pygame.transform.scale(self.LVL_ICON_PNG,(24,24))
|
||||
|
||||
pygame.display.set_caption('Gra-SI')
|
||||
@ -212,7 +213,6 @@ print("path_true:",path_true)
|
||||
|
||||
|
||||
|
||||
|
||||
g = Game()
|
||||
g.new()
|
||||
while g.running:
|
||||
|
@ -14,7 +14,7 @@ class Rocks(pygame.sprite.Sprite):
|
||||
self.width = TILE_SIZE
|
||||
self.height = TILE_SIZE
|
||||
|
||||
self.ROCKS_PNG = pygame.image.load("./zdjecia/rock.png")
|
||||
self.ROCKS_PNG = pygame.image.load("./pozostale_zdjecia/rock.png")
|
||||
self.ROCKS = pygame.transform.scale(self.ROCKS_PNG,(64,64))
|
||||
|
||||
self.image = pygame.Surface([self.width, self.height])
|
||||
@ -39,7 +39,7 @@ class Grass(pygame.sprite.Sprite):
|
||||
self.width = TILE_SIZE
|
||||
self.height = TILE_SIZE
|
||||
|
||||
self.GRASS_PNG = pygame.image.load("./zdjecia/grass.png")
|
||||
self.GRASS_PNG = pygame.image.load("./pozostale_zdjecia/grass.png")
|
||||
self.GRASS = pygame.transform.scale(self.GRASS_PNG,(64,64))
|
||||
|
||||
self.image = pygame.Surface([self.width, self.height])
|
||||
@ -67,7 +67,7 @@ class Health_flower(pygame.sprite.Sprite):
|
||||
self.width = TILE_SIZE
|
||||
self.height = TILE_SIZE
|
||||
|
||||
self.FLOWER_IMG = pygame.image.load("./zdjecia/flower.png")
|
||||
self.FLOWER_IMG = pygame.image.load("./pozostale_zdjecia/flower.png")
|
||||
self.FLOWER = pygame.transform.scale(self.FLOWER_IMG,(64,64))
|
||||
|
||||
self.image = pygame.Surface([self.width, self.height])
|
||||
@ -92,7 +92,7 @@ class Little_Rocks(pygame.sprite.Sprite):
|
||||
self.width = TILE_SIZE
|
||||
self.height = TILE_SIZE
|
||||
|
||||
self.LITTLE_ROCKS_PNG = pygame.image.load("./zdjecia/little_rocks.png")
|
||||
self.LITTLE_ROCKS_PNG = pygame.image.load("./pozostale_zdjecia/little_rocks.png")
|
||||
self.LITTLE_ROCKS = pygame.transform.scale(self.LITTLE_ROCKS_PNG,(64,64))
|
||||
|
||||
self.image = pygame.Surface([self.width, self.height])
|
||||
|
6
mobs.py
@ -14,7 +14,7 @@ class Archer_ork(pygame.sprite.Sprite):
|
||||
self.width = TILE_SIZE
|
||||
self.height = TILE_SIZE
|
||||
|
||||
self.ARCHER_ORK_IMG = pygame.image.load("./zdjecia/ork_lucznik.png")
|
||||
self.ARCHER_ORK_IMG = pygame.image.load("./pozostale_zdjecia/ork_lucznik.png")
|
||||
self.ARCHER_ORK = pygame.transform.scale(self.ARCHER_ORK_IMG,(64,64))
|
||||
|
||||
self.image = pygame.Surface([self.width, self.height])
|
||||
@ -41,7 +41,7 @@ class Infantry_ork(pygame.sprite.Sprite):
|
||||
self.width = TILE_SIZE
|
||||
self.height = TILE_SIZE
|
||||
|
||||
self.INFANTRY_ORK_IMG = pygame.image.load("./zdjecia/ork-piechota.png")
|
||||
self.INFANTRY_ORK_IMG = pygame.image.load("./pozostale_zdjecia/ork-piechota.png")
|
||||
self.INFANTRY_ORK = pygame.transform.scale(self.INFANTRY_ORK_IMG,(64,64))
|
||||
|
||||
self.image = pygame.Surface([self.width, self.height])
|
||||
@ -98,7 +98,7 @@ class Sauron(pygame.sprite.Sprite):
|
||||
self.width = TILE_SIZE
|
||||
self.height = TILE_SIZE
|
||||
|
||||
self.SAURON_IMG = pygame.image.load("./zdjecia/sauron.png")
|
||||
self.SAURON_IMG = pygame.image.load("./pozostale_zdjecia/sauron.png")
|
||||
self.SAURON = pygame.transform.scale(self.SAURON_IMG,(64,64))
|
||||
|
||||
self.image = pygame.Surface([self.width, self.height])
|
||||
|
122
nn.py
Normal file
@ -0,0 +1,122 @@
|
||||
import os
|
||||
import glob
|
||||
import PIL
|
||||
from PIL import Image
|
||||
import tensorflow as tf
|
||||
import pickle
|
||||
from tensorflow import keras
|
||||
from keras import layers
|
||||
from keras.models import Sequential
|
||||
import pathlib
|
||||
|
||||
|
||||
class NeuralN:
|
||||
# @staticmethod
|
||||
# def predict(image):
|
||||
data_dir = pathlib.Path('zdjecia')
|
||||
saved_model_path = pathlib.Path('trained_model.h5')
|
||||
class_names_path = pathlib.Path("class_names.pkl")
|
||||
image_count = sum(len(files) for _, _, files in os.walk(data_dir))
|
||||
|
||||
print(image_count)
|
||||
|
||||
# ORK_ARCHER = list(glob.glob('C:\\mobs_photos\\ORK_ARCHER'))
|
||||
# im = PIL.Image.open(ORK_ARCHER[0])
|
||||
# im.show()
|
||||
if os.path.exists(saved_model_path):
|
||||
model = tf.keras.models.load_model(saved_model_path)
|
||||
print("Saved model loaded")
|
||||
with open(class_names_path, 'rb') as f:
|
||||
class_names = pickle.load(f)
|
||||
print("Class names loaded.")
|
||||
|
||||
else:
|
||||
train_ds = tf.keras.utils.image_dataset_from_directory(
|
||||
data_dir,
|
||||
validation_split=0.2,
|
||||
subset="training",
|
||||
seed=123,
|
||||
image_size=(180, 180),
|
||||
batch_size=32)
|
||||
|
||||
val_ds = tf.keras.utils.image_dataset_from_directory(
|
||||
data_dir,
|
||||
validation_split=0.2,
|
||||
subset="validation",
|
||||
seed=123,
|
||||
image_size=(180, 180),
|
||||
batch_size=32)
|
||||
|
||||
# test_ds = tf.keras.utils.image_dataset_from_directory(
|
||||
# data_dir,
|
||||
# seed=123,
|
||||
# image_size=(180, 180),
|
||||
# batch_size=32)
|
||||
|
||||
class_names = train_ds.class_names
|
||||
print(class_names)
|
||||
|
||||
num_classes = len(class_names)
|
||||
|
||||
model = Sequential([
|
||||
layers.Rescaling(1. / 255, input_shape=(180, 180, 3)),
|
||||
layers.Conv2D(16, 3, padding='same', activation='relu'),
|
||||
layers.MaxPooling2D(),
|
||||
layers.Conv2D(32, 3, padding='same', activation='relu'),
|
||||
layers.MaxPooling2D(),
|
||||
layers.Conv2D(64, 3, padding='same', activation='relu'),
|
||||
layers.MaxPooling2D(),
|
||||
layers.Flatten(),
|
||||
layers.Dense(128, activation='relu'),
|
||||
layers.Dense(num_classes)
|
||||
])
|
||||
|
||||
model.compile(optimizer='adam',
|
||||
loss=tf.keras.losses.SparseCategoricalCrossentropy(
|
||||
from_logits=True),
|
||||
metrics=['accuracy'])
|
||||
model.summary()
|
||||
|
||||
epochs = 1
|
||||
history = model.fit(
|
||||
train_ds,
|
||||
validation_data=val_ds,
|
||||
epochs=epochs
|
||||
)
|
||||
model.save("trained_model.h5")
|
||||
print("Model trained and saved.")
|
||||
with open(class_names_path, 'wb') as f:
|
||||
pickle.dump(train_ds.class_names, f)
|
||||
print("Class names saved.")
|
||||
# loaded_model = tf.keras.models.load_model("trained_model.h5")
|
||||
probability_model = tf.keras.Sequential([model,
|
||||
tf.keras.layers.Softmax()])
|
||||
|
||||
#image_path = image
|
||||
image_path = pathlib.Path('path_to_image')
|
||||
image = Image.open(image_path)
|
||||
|
||||
# Preprocess the image
|
||||
image = image.resize((180, 180)) # Resize to match the input size of the model
|
||||
image_array = tf.keras.preprocessing.image.img_to_array(image)
|
||||
image_array = image_array / 255.0 # Normalize pixel values
|
||||
|
||||
# Add an extra dimension to the image array
|
||||
image_array = tf.expand_dims(image_array, 0)
|
||||
# Make the prediction
|
||||
predictions = probability_model.predict(image_array)
|
||||
|
||||
# Convert the predictions to class labels
|
||||
predicted_label = class_names[predictions[0].argmax()]
|
||||
#actions = {
|
||||
# 'ORK_MELEE': 'fight',
|
||||
# 'ORK_ARCHER': 'change_dir',
|
||||
# 'SAURON': 'change_dir'
|
||||
#}
|
||||
|
||||
# Get the action for the predicted character
|
||||
#action = actions.get(predicted_label, 'unknown')
|
||||
|
||||
# Print the predicted label
|
||||
print(predicted_label)
|
||||
# return predicted_label, action
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 1.9 MiB After Width: | Height: | Size: 1.9 MiB |
Before Width: | Height: | Size: 170 KiB After Width: | Height: | Size: 170 KiB |
Before Width: | Height: | Size: 170 KiB After Width: | Height: | Size: 170 KiB |
Before Width: | Height: | Size: 165 KiB After Width: | Height: | Size: 165 KiB |
Before Width: | Height: | Size: 164 KiB After Width: | Height: | Size: 164 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 92 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 212 KiB After Width: | Height: | Size: 212 KiB |
Before Width: | Height: | Size: 216 KiB After Width: | Height: | Size: 216 KiB |
Before Width: | Height: | Size: 227 KiB After Width: | Height: | Size: 227 KiB |
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 85 KiB |
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 135 KiB After Width: | Height: | Size: 135 KiB |
BIN
trained_model.h5
Normal file
@ -14,7 +14,7 @@ class Unknown_mob(pygame.sprite.Sprite):
|
||||
self.width = TILE_SIZE
|
||||
self.height = TILE_SIZE
|
||||
|
||||
self.UNKNOWN_MOB_IMG = pygame.image.load("./zdjecia/dragon.jpg")
|
||||
self.UNKNOWN_MOB_IMG = pygame.image.load("./pozostale_zdjecia/dragon.jpg")
|
||||
self.UKNOWN_MOB = pygame.transform.scale(self.UNKNOWN_MOB_IMG,(64,64))
|
||||
|
||||
self.image = pygame.Surface([self.width, self.height])
|
||||
|