JFO_lab_skrzyzowanie/neural_network.py

60 lines
1.7 KiB
Python
Raw Normal View History

import os
import random
import cv2
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = tf.keras.utils.normalize(x_train, axis=1)
x_test = tf.keras.utils.normalize(x_test, axis=1)
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28, 28)))
model.add(tf.keras.layers.Dense(128, activation='relu'))
model.add(tf.keras.layers.Dense(128, activation='relu'))
model.add(tf.keras.layers.Dense(10, activation='softmax'))
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=3)
model.save('handwritten.model')
model = tf.keras.models.load_model('handwritten.model')
numery_paczek = []
def liczby():
digits = []
for i in range(0, 3):
image_number = random.randint(1, 19)
img = cv2.imread(f"digits/digit{image_number}.png")[:, :, 0]
img = np.invert(np.array([img]))
prediction = model.predict(img)
print(f"This digit is probably a {np.argmax(prediction)}")
digits.append(np.argmax(prediction))
plt.imshow(img[0], cmap=plt.cm.binary)
plt.show()
liczba = int(str(digits[0]) + str(digits[1]) + str(digits[2]))
if liczba in numery_paczek or liczba < 100:
liczby()
else:
numery_paczek.append(liczba)
return numery_paczek[-1]
def recognition():
try:
liczba = liczby()
except:
print("Error!")
ostatnia = liczba % 10
loss, accuracy = model.evaluate(x_test, y_test)
print(loss)
print(accuracy)
print(numery_paczek)
return ostatnia