space-name / app.py
SujayAery's picture
Upload folder using huggingface_hub
59073b8 verified
import json
import numpy as np
import gradio as gr
import tensorflow as tf
MODEL_PATH = 'best_pneumonia_model.keras'
META_PATH = 'model_meta.json'
model = tf.keras.models.load_model(MODEL_PATH)
with open(META_PATH, 'r') as f:
meta = json.load(f)
label_names = meta['label_names']
img_size = int(meta['img_size'])
best_model_name = meta.get('best_model_name', '')
def preprocess(img):
x = img.convert('L').resize((img_size, img_size))
arr = np.array(x).astype(np.float32) / 255.0
arr = arr[..., None]
if best_model_name == 'Scratch_CNN':
pass
else:
arr = np.repeat(arr, 3, axis=-1) * 255.0
if 'MobileNetV2' in best_model_name:
arr = tf.keras.applications.mobilenet_v2.preprocess_input(arr)
elif 'EfficientNetB0' in best_model_name:
arr = tf.keras.applications.efficientnet.preprocess_input(arr)
arr = np.array(arr, dtype=np.float32)
return np.expand_dims(arr, axis=0)
def predict(image):
x = preprocess(image)
probs = model.predict(x, verbose=0)[0]
return {label_names[i]: float(probs[i]) for i in range(len(label_names))}
demo = gr.Interface(
fn=predict,
inputs=gr.Image(type='pil'),
outputs=gr.Label(num_top_classes=3),
title='Pneumonia Classification',
description='Upload chest image and get predicted class with probability.'
)
if __name__ == '__main__':
demo.launch(server_name='0.0.0.0', server_port=7860)