|
import gradio as gr |
|
from gradio import Interface |
|
import tensorflow as tf |
|
from tensorflow import keras |
|
from tensorflow.keras import datasets, layers, models |
|
import numpy as np |
|
|
|
(X_train, y_train) , (X_test, y_test) = keras.datasets.mnist.load_data() |
|
|
|
X_train = np.concatenate((X_train, X_test)) |
|
y_train = np.concatenate((y_train, y_test)) |
|
|
|
X_train = X_train / 255 |
|
X_test = X_test / 255 |
|
|
|
data_augmentation = keras.Sequential([ |
|
tf.keras.layers.experimental.preprocessing.RandomRotation(0.2, input_shape=(28, 28, 1)), |
|
]) |
|
|
|
model = models.Sequential([ |
|
data_augmentation, |
|
|
|
|
|
layers.Conv2D(filters=32, kernel_size=(3,3), padding='same', activation='relu'), |
|
layers.MaxPooling2D((2,2)), |
|
layers.Conv2D(filters=32, kernel_size=(3,3), padding='same', activation='relu'), |
|
layers.MaxPooling2D((2,2)), |
|
|
|
|
|
|
|
layers.Flatten(), |
|
layers.Dense(32, activation='relu'), |
|
layers.Dense(10, activation='softmax'), |
|
|
|
]) |
|
|
|
model.compile(optimizer='adam', |
|
loss='sparse_categorical_crossentropy', |
|
metrics=['accuracy']) |
|
|
|
model.fit(X_train, y_train, epochs=5) |
|
|
|
def predict_image(img): |
|
img_3d = img.reshape(-1, 28,28) |
|
img_scaled = img_3d/255 |
|
prediction = model.predict(img_scaled) |
|
pred = np.argmax(prediction) |
|
|
|
return pred.item() |
|
|
|
iface = gr.Interface(predict_image, inputs='sketchpad', outputs='label', title='Digit Recognition Model By Debamrita Paul', description='Draw a single digit(0 to 9)', __gradio_theme='dark') |
|
|
|
iface.launch() |