File size: 2,524 Bytes
adf2111
 
 
7af9a08
adf2111
abed96a
 
 
 
 
 
 
 
 
7a80d19
abed96a
 
 
 
 
 
 
adf2111
2283b5b
 
 
 
adf2111
2283b5b
73036df
e0ee69d
2283b5b
73036df
2283b5b
73036df
e0ee69d
083bf6f
 
7af9a08
 
 
 
 
 
 
 
7487c51
adf2111
2283b5b
907b41c
adf2111
2283b5b
7487c51
 
adf2111
 
2283b5b
907b41c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import gradio as gr
import tensorflow as tf
import numpy as np
from PIL import Image, ImageDraw, ImageFont

# Defina a camada personalizada FixedDropout
class FixedDropout(tf.keras.layers.Dropout):
    def _get_noise_shape(self, inputs):
        if self.noise_shape is None:
            return self.noise_shape
        symbolic_shape = tf.shape(inputs)
        noise_shape = [symbolic_shape[axis] if shape is None else shape
                       for axis, shape in enumerate(self.noise_shape)]
        return tuple(noise_shape)

# Registre a camada personalizada FixedDropout
tf.keras.utils.get_custom_objects()['FixedDropout'] = FixedDropout

# Carregue seu modelo TensorFlow treinado
model = tf.keras.models.load_model('modelo_treinado.h5')

# Defina uma função para fazer previsões
def classify_image(input_image):
    # Redimensione a imagem para as dimensões corretas (192x256)
    input_image = tf.image.resize(input_image, (192, 256))  # Redimensione para as dimensões esperadas
    input_image = (input_image / 255.0)  # Normalize para [0, 1]
    input_image = np.expand_dims(input_image, axis=0)  # Adicione a dimensão de lote

    # Faça a previsão usando o modelo
    prediction = model.predict(input_image)

    # Assumindo que o modelo retorna probabilidades para duas classes, você pode retornar a classe com a maior probabilidade
    class_index = np.argmax(prediction)
    class_labels = ["Normal", "Cataract"]  # Substitua pelas suas etiquetas de classe reais
    predicted_class = class_labels[class_index]

    # Retorne a classe prevista e as probabilidades das classes
    class_probabilities = {class_labels[i]: round(float(prediction[0][i]), 4) for i in range(len(class_labels))}

    # Crie uma imagem composta com o rótulo de previsão
    output_image = Image.fromarray((input_image[0] * 255).astype('uint8'))
    draw = ImageDraw.Draw(output_image)
    font = ImageFont.load_default()
    label_text = f"Predicted Class: {predicted_class}"
    draw.text((10, 10), label_text, (255, 0, 0), font=font)

    return input_image[0], output_image, class_probabilities

# Crie uma interface Gradio
input_interface = gr.Interface(
    fn=classify_image,
    inputs="image",  # Especifique o tipo de entrada como "image"
    outputs=["image", "image", "text"],  # Especifique três tipos de saída: imagem de entrada, imagem de saída e texto
    output_labels=["Input Image", "Output Image", "Class Probabilities"]  # Rotule as saídas
)

# Inicie o aplicativo Gradio
input_interface.launch()