sieć neuronowa, rozpoznawanie cyfry z obrazka oraz testowe cyfry
BIN
digits/digit1.png
Normal file
After Width: | Height: | Size: 195 B |
BIN
digits/digit10.png
Normal file
After Width: | Height: | Size: 282 B |
BIN
digits/digit11.png
Normal file
After Width: | Height: | Size: 245 B |
BIN
digits/digit12.png
Normal file
After Width: | Height: | Size: 348 B |
BIN
digits/digit2.png
Normal file
After Width: | Height: | Size: 254 B |
BIN
digits/digit3.png
Normal file
After Width: | Height: | Size: 247 B |
BIN
digits/digit4.png
Normal file
After Width: | Height: | Size: 259 B |
BIN
digits/digit5.png
Normal file
After Width: | Height: | Size: 204 B |
BIN
digits/digit6.png
Normal file
After Width: | Height: | Size: 192 B |
BIN
digits/digit7.png
Normal file
After Width: | Height: | Size: 202 B |
BIN
digits/digit8.png
Normal file
After Width: | Height: | Size: 207 B |
BIN
digits/digit9.png
Normal file
After Width: | Height: | Size: 265 B |
46
neural_network.py
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
import os
|
||||||
|
import cv2
|
||||||
|
import numpy as np
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import tensorflow as tf
|
||||||
|
|
||||||
|
def recognition():
|
||||||
|
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')
|
||||||
|
|
||||||
|
image_number = 1
|
||||||
|
while os.path.isfile(f"digits/digit{image_number}.png"):
|
||||||
|
try:
|
||||||
|
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)}")
|
||||||
|
plt.imshow(img[0], cmap = plt.cm.binary)
|
||||||
|
plt.show()
|
||||||
|
except:
|
||||||
|
print("Error!")
|
||||||
|
finally:
|
||||||
|
image_number +=1
|
||||||
|
|
||||||
|
loss, accuracy = model.evaluate(x_test, y_test)
|
||||||
|
|
||||||
|
print(loss)
|
||||||
|
print(accuracy)
|
||||||
|
|
||||||
|
recognition()
|