alok94's picture
background dict
a231ba0
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras import layers
import matplotlib.pyplot as plt
import gradio as gr
import numpy as np
import pandas as pd
from PIL import Image as im
import PIL
#%matplotlib inline
num_classes = 10
input_shape = (28, 28, 1)
objt=tf.keras.datasets.mnist
(X_train, y_train), (X_test,y_test)=objt.load_data()
# X_train = X_train.astype("float32") / 255
# X_test = X_test.astype("float32") / 255
# # Make sure images have shape (28, 28, 1)
# X_train = np.expand_dims(X_train, -1)
# X_test = np.expand_dims(X_test, -1)
# print("x_train shape:", X_train.shape)
# print(X_train.shape[0], "train samples")
# print(X_test.shape[0], "test samples")
# # convert class vectors to binary class matrices
# y_train = keras.utils.to_categorical(y_train, num_classes)
# y_test = keras.utils.to_categorical(y_test, num_classes)
# X_new=np.concatenate((X_train, X_test))
# y_new=np.concatenate((y_train, y_test))
# print(X_train.shape)
# print(X_new.shape)
# print(y_new.shape)
# print(y_train)
# model = keras.Sequential(
# [
# keras.Input(shape=input_shape),
# layers.Conv2D(32, kernel_size=(3, 3), activation="relu"),
# layers.MaxPooling2D(pool_size=(2, 2)),
# layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
# layers.MaxPooling2D(pool_size=(2, 2)),
# layers.Flatten(),
# layers.Dropout(0.5),
# layers.Dense(num_classes, activation="softmax"),
# ]
# )
# model.summary()
# batch_size = 128
# epochs = 15
# model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])
# model.fit(X_new, y_new, batch_size=batch_size, epochs=epochs, validation_split=0.1)
# model.save("keras_digit_test_include.h5")
# score = model.evaluate(X_test, y_test, verbose=0)
# print("Test loss:", score[0])
# print("Test accuracy:", score[1])
# loaded_model = keras.models.load_model('keras_digit_accurate.h5')
# score = loaded_model.evaluate(X_test, y_test, verbose=0)
# print("Test loss:", score[0])
# print("Test accuracy:", score[1])
#................................................................................................
# for i in range(9):
# plt.subplot(330+1+i)
# plt.imshow(X_train[i])
# plt.show()
# X_train=X_train/255.0
# X_test=X_test/255.0
# model=tf.keras.models.Sequential([Flatten(input_shape=(28,28)),
# Dense(650,activation='relu'),
# Dense(450,activation='relu'),
# Dense(250,activation='relu'),
# Dense(150,activation='relu'),
# Dense(10,activation=tf.nn.softmax)])
# model.compile(optimizer='adam',
# loss='sparse_categorical_crossentropy',
# metrics=['accuracy'])
# model.fit(X_train,y_train, epochs=10)
# model.save("keras_digit_temp.h5")
# test=X_test[0].reshape(-1,28,28)
# predicted=model.predict(test)
# print(predicted)
#count=0
def predict_digit(img):
if img is not None:
loaded_model = keras.models.load_model('keras_digit_test_include.h5')
#img_data = im.fromarray(img)
#img_data.save(f"image1.jpg")
#count=count+1
print(img)
img_3d=img['background'].reshape(-1,28,28)
print(img_3d)
img_resized=img/255.0
pred_prob=loaded_model.predict(img_resized)
pred_prob=pred_prob*100
print((pred_prob))
simple = pd.DataFrame(
{
"a": ["0", "1", "2", "3", "4", "5", "6", "7", "8","9"],
"b": pred_prob[0],
}
)
predicted_val=np.argmax(pred_prob)
return int(predicted_val), gr.BarPlot.update(
simple,
x="a",
y="b",
x_title="Digits",
y_title="Identification Probabilities",
title="Identification Probability",
tooltip=["a", "b"],
vertical=False,
y_lim=[0, 100],
)
else:
simple_empty = pd.DataFrame(
{
"a": ["0", "1", "2", "3", "4", "5", "6", "7", "8","9"],
"b": [0,0,0,0,0,0,0,0,0,0],
}
)
return " ", gr.BarPlot.update(
simple_empty,
x="a",
y="b",
x_title="Digits",
y_title="Identification Probabilities",
title="Identification Probability",
tooltip=["a", "b"],
vertical=False,
y_lim=[0, 100],
)
# iface=gr.Interface(prdict_digit, inputs='sketchpad', outputs=['label', gr.Slider(0,100, label='Probably 0'), gr.Slider(0,100, label='Probably 1')] ).launch()
# iface.launch(debug='true')
css='''
#title_head{
text-align: center;
text-weight: bold;
text-size:30px;
}
#name_head{
text-align: center;
}
'''
with gr.Blocks(css=css) as demo:
with gr.Row():
with gr.Column():
gr.Markdown("<h1>Digit Identifier</h1>", elem_id='title_head')
gr.Markdown("<h2>Cyperts Project</h2>", elem_id="name_head")
with gr.Row():
with gr.Column():
with gr.Row():
skch=gr.Sketchpad()
with gr.Row():
with gr.Column():
clear=gr.ClearButton(skch)
with gr.Column():
btn=gr.Button("Identify")
with gr.Column():
gr.Markdown("Identified digit")
label=gr.Label("")
gr.Markdown("Other possible values")
bar = gr.BarPlot()
btn.click(predict_digit,inputs=skch,outputs=[label,bar])
demo.launch(debug=True)