|
import gradio as gr |
|
import tensorflow as tf |
|
import joblib |
|
import numpy as np |
|
import zipfile |
|
import os |
|
import re |
|
|
|
|
|
unzip_dir = "unzipped_models" |
|
zip_file = "Models.zip" |
|
|
|
if not os.path.exists(unzip_dir): |
|
print("Extracting model zip file...") |
|
with zipfile.ZipFile(zip_file, 'r') as zip_ref: |
|
zip_ref.extractall(unzip_dir) |
|
print("Extraction complete.") |
|
|
|
|
|
|
|
model_root = os.path.join(unzip_dir, 'Models') |
|
|
|
activations = [] |
|
seeds_dict = dict() |
|
neurons_dict = dict() |
|
|
|
for act in os.listdir(model_root): |
|
act_path = os.path.join(model_root, act) |
|
if os.path.isdir(act_path) and not act.startswith("linear_models"): |
|
activations.append(act) |
|
seeds = [] |
|
for seed_folder in os.listdir(act_path): |
|
seed_path = os.path.join(act_path, seed_folder) |
|
if os.path.isdir(seed_path): |
|
seeds.append(seed_folder) |
|
neuron_list = [] |
|
for model_file in os.listdir(seed_path): |
|
match = re.match(r"model_(\d+)\.keras", model_file) |
|
if match: |
|
neuron_list.append(int(match.group(1))) |
|
neurons_dict[(act, seed_folder)] = sorted(neuron_list) |
|
seeds_dict[act] = sorted(seeds) |
|
|
|
activations = sorted(activations) |
|
|
|
|
|
def predict(r, g, b, activation, seed, neurons): |
|
try: |
|
|
|
r = r/256 |
|
g = g/256 |
|
b = b/256 |
|
|
|
X = np.array([[r, g, b]]) |
|
|
|
|
|
lin_pred_rgb = (1.9221 * r) - (1.3817 * g) + (1.4058 * b) - 0.1318 |
|
|
|
|
|
keras_path = os.path.join(model_root, activation, seed, f"model_{neurons}.keras") |
|
if not os.path.exists(keras_path): |
|
raise FileNotFoundError(f"Model not found: {keras_path}") |
|
|
|
model = tf.keras.models.load_model(keras_path) |
|
ann_pred = model.predict(X)[0][0] |
|
|
|
|
|
return ann_pred*50, lin_pred_rgb*50 |
|
|
|
except Exception as e: |
|
return f"Error: {str(e)}", "" |
|
|
|
|
|
def update_seeds(activation): |
|
return gr.update(choices=seeds_dict[activation], value=seeds_dict[activation][0]) |
|
|
|
def update_neurons(activation, seed): |
|
neurons = neurons_dict[(activation, seed)] |
|
return gr.update(choices=neurons, value=neurons[0]) |
|
|
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown("# Cholestrol Concentration Prediction - ANN and Linear Model") |
|
gr.Markdown("# **Cholestrol Concentration Prediction - ANN and Linear Model**") |
|
gr.Markdown("Dynamically select models and predict cholesterol concentration.") |
|
|
|
gr.Markdown("### **Authors:**") |
|
gr.Markdown(""" |
|
**Poornima G** |
|
Research Scholar, Centre for Nanoscience and Technology, Pondicherry University, Puducherry-605 014 |
|
[Google Scholar](https://scholar.google.com/citations?user=N2uAkJEAAAAJ&hl=en) | [ORCiD](https://orcid.org/0000-0002-7398-5651) |
|
|
|
**Nihad Alungal** |
|
Research Scholar, Centre for Nanoscience and Technology, Pondicherry University, Puducherry-605 014 |
|
[Google Scholar](https://scholar.google.com/citations?hl=en&user=Qi-xkEYAAAAJ) | [ORCiD](https://orcid.org/0009-0000-4561-1874) |
|
|
|
**Caxton Emerald S** |
|
Research Scholar, Department of Computer Science, School of Engineering and Technology, Pondicherry University, Puducherry - 605 014 |
|
[Google Scholar](https://scholar.google.com/citations?user=OgCHQv4AAAAJ&hl=en) | [ORCiD](https://orcid.org/0000-0002-7763-3987) |
|
|
|
**Dr. S. Kannan** |
|
Professor, Centre for Nanoscience and Technology, Pondicherry University, Puducherry-605 014 |
|
[Web Page](http://www.pondiuni.edu.in/profile/dr-s-kannan) |
|
""") |
|
|
|
|
|
with gr.Row(): |
|
r = gr.Number(label="Mean R (0 -255)") |
|
g = gr.Number(label="Mean G (0 -255)") |
|
b = gr.Number(label="Mean B (0 -255)") |
|
|
|
with gr.Row(): |
|
activation = gr.Dropdown(choices=activations, label="Activation Function", interactive=True) |
|
seed = gr.Dropdown(choices=seeds, label="Seed", interactive=True) |
|
neurons = gr.Dropdown(choices=neuron_list, label="Neurons", interactive=True) |
|
|
|
activation.change(update_seeds, inputs=[activation], outputs=[seed]) |
|
seed.change(update_neurons, inputs=[activation, seed], outputs=[neurons]) |
|
|
|
with gr.Row(): |
|
btn = gr.Button("Predict") |
|
|
|
with gr.Row(): |
|
ann_output = gr.Text(label="Cholestrol Conentration (mM) - ANN Model Prediction ") |
|
lin_rgb_output = gr.Text(label="Cholestrol Conentration (mM) - Linear Model Prediction") |
|
|
|
btn.click( |
|
fn=predict, |
|
inputs=[r, g, b, activation, seed, neurons], |
|
outputs=[ann_output, lin_rgb_output] |
|
) |
|
|
|
if __name__ == "__main__": |
|
demo.launch() |
|
|