DigitRecognizer / app.py
Rahul-Samedavar's picture
test
9efe831
from flask import Flask, request, render_template
import numpy as np
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: 45, 49 and 50 )
version = 50
WEIGHTS_PATH = f"Weights/v_{version}.weights.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(10, 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 = [i for i in range(10)]
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():
drawing = request.get_json()['drawing']
drawing = np.array(drawing)
pred = model.predict(np.expand_dims(drawing, axis=0).astype(np.float16), verbose=0)[0].astype(np.float64)
return {classes[i]: pred[i] for i in range(10)}
if __name__ == '__main__':
app.run()