Spaces:
Sleeping
Sleeping
import gradio as gr | |
import tensorflow as tf | |
import numpy as np | |
import cv2 | |
# Load the pre-trained ResNet-18 model from PyTorch | |
import torch | |
import requests | |
from torchvision import transforms | |
resnet_model = torch.hub.load('pytorch/vision:v0.6.0', 'resnet18', pretrained=True).eval() | |
response = requests.get("https://git.io/JJkYN") | |
labels = response.text.split("\n") | |
# Load the TensorFlow model | |
tf_model_path = 'modelo_treinado.h5' | |
tf_model = tf.keras.models.load_model(tf_model_path) | |
class_labels = ["Normal", "Cataract"] | |
def predict(inp): | |
# First, use the ResNet-18 model to predict labels | |
inp_resized = transforms.ToTensor()(inp).unsqueeze(0) | |
with torch.no_grad(): | |
prediction_resnet = torch.nn.functional.softmax(resnet_model(inp_resized)[0], dim=0) | |
confidences_resnet = {labels[i]: float(prediction_resnet[i]) for i in range(1000)} | |
# Then, use the TensorFlow model to predict Normal or Cataract | |
img_array = cv2.cvtColor(np.array(inp), cv2.COLOR_RGB2BGR) | |
img_array = cv2.resize(img_array, (224, 224)) # Resize to match the input size expected by the TF model | |
img_array = img_array / 255.0 # Normalize pixel values | |
img_array = np.expand_dims(img_array, axis=0) # Add batch dimension | |
prediction_tf = tf_model.predict(img_array) | |
label_index = np.argmax(prediction_tf) | |
confidence_tf = float(prediction_tf[0, label_index]) | |
# Combine the ResNet-18 and TensorFlow predictions | |
resnet_label = max(confidences_resnet, key=confidences_resnet.get) | |
if confidence_tf >= 0.5: | |
final_label = class_labels[label_index] | |
confidence = confidence_tf | |
else: | |
final_label = resnet_label | |
confidence = confidences_resnet[resnet_label] | |
return final_label, confidence | |
demo = gr.Interface( | |
fn=predict, | |
inputs=gr.inputs.Image(type="pil"), | |
outputs=["label", "number"] | |
) | |
demo.launch() | |