File size: 1,569 Bytes
390de6f
 
 
 
 
 
 
7e5decb
 
390de6f
 
 
05818c4
 
 
390de6f
de4fabe
390de6f
 
ac5731e
390de6f
 
 
 
 
 
 
 
 
c010e3f
820387f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import numpy as np
import gradio as gr
from PIL import Image
from tensorflow import keras

model = keras.models.Sequential([
  keras.layers.Flatten(input_shape=(28, 28)),      # Diese Schicht nimmt unser 2D-Bild und verwandelt es in ein 1D-Array
  keras.layers.Dense(512, activation='relu'),       # Als Nächstes kommen zwei Schichten mit 512 künstlichen Neuronen. Als Funktion wählen wir 'relu' f(x) = max(0,x)
  keras.layers.Dense(512, activation='relu'),     
  keras.layers.Dense(10,  activation='softmax')    # Die letzte Schicht besteht aus 10 Neuronen, die für unsere 10 Zahlen stehen. Die 'softmax' Funktion wandelt die Ergebnisse der vorherigen Schicht in Wahrscheinlichkeiten
])

model.compile(optimizer=keras.optimizers.Adam(0.001),
              loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=[keras.metrics.SparseCategoricalAccuracy()])

model.load_weights('./weights/mnist.weights.h5')

def classify(input):
    image = np.expand_dims(np.array(Image.fromarray(input['layers'][0]).resize((28,28), resample=Image.Resampling.BILINEAR), dtype=int), axis=0)
    prediction = model.predict(image).tolist()[0]
    return {str(i): float(prediction[i]) for i in range(10)}

input_sketchpad = gr.Paint(image_mode="L", brush=gr.components.image_editor.Brush(default_color="rgb(156, 104, 200)"))
output_lable = gr.Label()

gr.Interface(fn=classify,               
             inputs=input_sketchpad,   
             outputs=output_lable,
             flagging_mode='never', 
             theme=gr.themes.Soft()).launch()