Rahul-Samedavar's picture
Depoloyed
ff53531
from flask import Flask, request, render_template
import numpy as np
from tensorflow.keras.models import load_model
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Conv2D, Flatten, Dense, Dropout
from tensorflow.keras.metrics import Precision, Recall, TopKCategoricalAccuracy
from tensorflow.keras.optimizers import Adamax
# Replace this with any version of interest: (Available: 20, 42, 44, 45, 46, 48, 50 )
version = 50
WEIGHTS_PATH = f"Weights/v_{version}.h5"
model = Sequential([
Conv2D(16, (3,3), activation='relu', input_shape=(28, 28, 1)),
MaxPooling2D(2,2),
Conv2D(64, (3,3), activation='relu'),
MaxPooling2D(2,2),
Flatten(),
Dropout(0.2),
Dense(128, activation='relu'),
Dropout(0.2),
Dense(64, activation='relu'),
Dropout(0.2),
Dense(35, activation='softmax')
])
model.compile(
optimizer=Adamax(0.001),
loss='categorical_crossentropy',
metrics=['accuracy', TopKCategoricalAccuracy(3), Precision(), Recall()]
)
model.load_weights(WEIGHTS_PATH)
app = Flask(__name__)
classes = ['Airplane', 'Alarm Clock', 'Ant', 'Bear', 'Beard', 'Bird', 'Bus',
'Cookie', 'Cow', 'Donut', 'Hand', 'Hat', 'Key', 'Moon',
'Motorbike', 'Octagon', 'Pizza', 'Rabbit', 'School Bus', 'Shark',
'Skull', 'Smiley Face', 'Snake', 'Spider', 'Square', 'Star', 'Sun',
'Swing Set', 'Table', 'Tent', 'Tree', 'Triangle', 'Whale', 'Wheel',
'Windmill']
def label(pred):
return {classes[i]: float(pred[0][i]) for i in range(len(classes))}
@app.route('/')
def home():
return render_template('index.html')
@app.route('/classify', methods=['POST'])
def classify():
doodle = request.get_json()['doodle']
doodle = np.array(doodle)
pred = model.predict(np.expand_dims(doodle, axis=0).astype(np.float16))[0].astype(np.float64)
return {classes[i]: pred[i] for i in range(35)}
if __name__ == '__main__':
app.run(debug=True)