xValentim's picture
Chore: Change labels
15e8965
import gradio as gr
import os
# Import dependencies
import tensorflow as tf
from tensorflow import keras
import numpy as np
import pandas as pd
import pathlib
import PIL
import PIL.Image
import cv2
from tqdm import tqdm
TF_ENABLE_ONEDNN_OPTS=0
class Sampling(tf.keras.layers.Layer):
def call(self, inputs):
mean, log_var = inputs
return tf.random.normal(tf.shape(log_var)) * tf.exp(log_var / 2) + mean
custom_objects = {'Sampling': Sampling}
#
'''
Pre-trained models - Instructions about training you can find in another file
'''
variational_ae = keras.models.load_model('./regular_celeba_vae/autoencoder/vae_autoencoder.keras', custom_objects=custom_objects)
variational_encoder = keras.models.load_model('./regular_celeba_vae/encoder/vae_encoder.keras', custom_objects=custom_objects)
variational_decoder = keras.models.load_model('./regular_celeba_vae/decoder/vae_decoder.keras', custom_objects=custom_objects)
df_atts_loaded = pd.read_csv('./data/attributes_encodings.csv', index_col=0)
df_example_instance_loaded = pd.read_csv('./data/example_instance.csv', index_col=0)
O = df_example_instance_loaded.values[0]
v_att1 = tf.convert_to_tensor(df_atts_loaded.values[0])
v_att2 = tf.convert_to_tensor(df_atts_loaded.values[1])
v_att3 = tf.convert_to_tensor(df_atts_loaded.values[2])
v_att4 = tf.convert_to_tensor(df_atts_loaded.values[3])
v_att5 = tf.convert_to_tensor(df_atts_loaded.values[4])
v_att6 = tf.convert_to_tensor(df_atts_loaded.values[5])
v_att7 = tf.convert_to_tensor(df_atts_loaded.values[6])
# maximum_ = 25
# delta = 3.0 / maximum_
# def image_classifier(value_1, value_2):
# return np.clip(((variational_decoder(tf.reshape((O + delta * value_1 * v_att1 + delta * value_2 * v_att2), (1, 64)))[0]) * 255), 0, 255).astype(int)[:, :, :]
# input_value_d_1 = gr.Slider(minimum=0, maximum=25, step=1)
# input_value_d_2 = gr.Slider(minimum=0, maximum=25, step=1)
# demo = gr.Interface(fn=image_classifier, inputs=[input_value_d_1, input_value_d_2], outputs="image", live=True)
maximum_ = 25
delta = 1.0 / maximum_
def image_classifier(value_1, value_2, value_3, value_4, value_5, value_6, value_7):
return np.clip(((variational_decoder(tf.reshape((O + delta * value_1 * v_att1 + \
delta * 1.5 * value_2 * v_att2 + \
delta * 3.5 * value_3 * v_att3 + \
3.2 * delta * value_4 * v_att4 + \
4.0 * delta * value_5 * v_att5 + \
delta * value_6 * v_att6 + \
3.0 * delta * value_7 * v_att7), (1, 64)))[0]) * 255), 0, 255).astype(int)[:, :, :]
input_value_d_1 = gr.Slider(minimum=0, maximum=25, step=1, label="Bald")
input_value_d_2 = gr.Slider(minimum=0, maximum=25, step=1, label="Smiling")
input_value_d_3 = gr.Slider(minimum=0, maximum=25, step=1, label="Mustache")
input_value_d_4 = gr.Slider(minimum=0, maximum=25, step=1, label="Eyeglasses")
input_value_d_5 = gr.Slider(minimum=0, maximum=25, step=1, label="Goatee")
input_value_d_6 = gr.Slider(minimum=0, maximum=25, step=1, label="Arched_Eyebrows")
input_value_d_7 = gr.Slider(minimum=0, maximum=25, step=1, label="Bags_Under_Eyes")
demo = gr.Interface(fn=image_classifier, inputs=[input_value_d_1,
input_value_d_2,
input_value_d_3,
input_value_d_4,
input_value_d_5,
input_value_d_6,
input_value_d_7], outputs="image", live=True)
if __name__ == "__main__":
demo.launch()