File size: 2,516 Bytes
adf2111
7ebdd96
75fd37c
d1c66aa
a2419a7
08cbfae
7ebdd96
 
 
 
 
 
 
 
 
 
 
 
 
08cbfae
7708ef9
 
08cbfae
a2419a7
 
 
 
 
 
 
 
 
 
 
 
 
 
7708ef9
 
a2419a7
 
ffc1de3
7708ef9
a2419a7
c8fb571
ecd73fd
 
 
 
 
 
 
 
 
 
 
 
 
c8fb571
7708ef9
08cbfae
7708ef9
ffc1de3
ecd73fd
9698b9b
 
 
 
 
 
08cbfae
8d9c7cb
7708ef9
65cc174
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import tensorflow as tf
from keras.utils import custom_object_scope
import gradio as gr
import numpy as np
from PIL import Image

# Defina a camada personalizada FixedDropout
class FixedDropout(tf.keras.layers.Dropout):
    def __init__(self, rate, **kwargs):
        super().__init__(rate, **kwargs)
        self._rate = rate

    def call(self, inputs):
        return tf.nn.dropout(inputs, self._rate)

# Registre a camada personalizada FixedDropout com o TensorFlow
with custom_object_scope({'FixedDropout': FixedDropout}):
    # Carregue o modelo
    loaded_model = tf.keras.models.load_model('modelo_treinado.h5')

# Crie uma lista de classes
class_names = ["Normal", "Cataract"]

# Defina a função de pré-processamento
def preprocess_image(inp):
    # Redimensione a imagem para o formato esperado pelo modelo (192x256)
    img = Image.fromarray(inp)
    img = img.resize((256, 192))
    
    # Converta a imagem para um array numpy
    img = np.array(img)
    
    # Normalize a imagem (escala de 0 a 1)
    img = img / 255.0

    return img

# Defina a função de classificação
def classify_image(inp):
    # Pré-processar a imagem
    img = preprocess_image(inp)

    # Faça uma previsão usando o modelo treinado
    prediction = loaded_model.predict(np.expand_dims(img, axis=0)).flatten()

    # Obtém a classe prevista
    predicted_class = class_names[np.argmax(prediction)]

    # Crie uma imagem de saída com a classe prevista
    output_image = Image.new("RGB", (256, 192))
    output_image.paste((255, 255, 255), (0, 0, 256, 192))
    output_image_draw = ImageDraw.Draw(output_image)
    output_image_draw.text((10, 10), f"Classe Prevista: {predicted_class}", fill=(0, 0, 0))

    # Converte a imagem de saída de volta para numpy array
    output_image = np.array(output_image)

    return predicted_class, output_image

# Crie uma interface Gradio
iface = gr.Interface(
    fn=classify_image,
    inputs=gr.inputs.Image(shape=(192, 256)),
    outputs=[gr.outputs.Label(), gr.outputs.Image(type="numpy")],
    capture_session=True,
    title="Detecção de Catarata",
    description="Esta interface permite a detecção de catarata em imagens de olhos.",
    instructions="Carregue uma imagem de um olho e clique em 'Classificar' para obter a previsão.",
    theme="default",  # Você pode escolher um tema predefinido ou personalizar as cores manualmente.
    button_text="Classificar Imagem",  # Personalize o texto do botão.
)

# Inicie a interface Gradio
iface.launch(debug=True)