|
|
|
|
|
import gradio as gr |
|
import numpy as np |
|
|
|
|
|
import tensorflow as tf |
|
import cv2 |
|
|
|
|
|
|
|
|
|
|
|
def parse_image(image): |
|
image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) |
|
image = cv2.resize(image, (100, 100)) |
|
image = image.astype(np.float32) |
|
image = image / 255.0 |
|
image = np.expand_dims(image, axis=0) |
|
image = np.expand_dims(image, axis=-1) |
|
return image |
|
|
|
|
|
|
|
def cnn(input_shape, output_shape): |
|
num_classes = output_shape[0] |
|
dropout_seed = 708090 |
|
kernel_seed = 42 |
|
|
|
model = tf.keras.models.Sequential([ |
|
tf.keras.layers.Conv2D(16, 3, activation='relu', input_shape=input_shape, kernel_initializer=tf.keras.initializers.GlorotUniform(seed=kernel_seed)), |
|
tf.keras.layers.MaxPooling2D(), |
|
tf.keras.layers.Dropout(0.1, seed=dropout_seed), |
|
tf.keras.layers.Conv2D(32, 5, activation='relu', kernel_initializer=tf.keras.initializers.GlorotUniform(seed=kernel_seed)), |
|
tf.keras.layers.MaxPooling2D(), |
|
tf.keras.layers.Dropout(0.1, seed=dropout_seed), |
|
tf.keras.layers.Conv2D(64, 10, activation='relu', kernel_initializer=tf.keras.initializers.GlorotUniform(seed=kernel_seed)), |
|
tf.keras.layers.MaxPooling2D(), |
|
tf.keras.layers.Dropout(0.1, seed=dropout_seed), |
|
tf.keras.layers.Flatten(), |
|
tf.keras.layers.Dense(128, activation='relu', kernel_regularizer='l2', kernel_initializer=tf.keras.initializers.GlorotUniform(seed=kernel_seed)), |
|
tf.keras.layers.Dropout(0.2, seed=dropout_seed), |
|
tf.keras.layers.Dense(16, activation='relu', kernel_regularizer='l2', kernel_initializer=tf.keras.initializers.GlorotUniform(seed=kernel_seed)), |
|
tf.keras.layers.Dropout(0.2, seed=dropout_seed), |
|
tf.keras.layers.Dense(num_classes, activation='sigmoid', kernel_initializer=tf.keras.initializers.GlorotUniform(seed=kernel_seed)) |
|
]) |
|
|
|
return model |
|
|
|
|
|
model = cnn((100, 100, 1), (1,)) |
|
model.compile(loss=tf.keras.losses.BinaryCrossentropy(from_logits=False), optimizer='Adam', metrics='accuracy') |
|
|
|
model.load_weights('weights.h5') |
|
|
|
|
|
def segment(image): |
|
image = parse_image(image) |
|
|
|
output = model.predict(image) |
|
|
|
labels = { |
|
"farsi" : 1-float(output), |
|
"ruqaa" : float(output) |
|
} |
|
return labels |
|
|
|
iface = gr.Interface(fn=segment, inputs="image", outputs="label").launch() |