File size: 2,770 Bytes
31b8f04
adf2111
08cbfae
259195c
08cbfae
 
259195c
 
08cbfae
31b8f04
a506c29
 
259195c
a506c29
08cbfae
 
 
 
2fac645
 
08cbfae
 
 
 
 
 
 
a506c29
 
08cbfae
b0a8cf0
 
 
 
 
 
 
 
 
 
08cbfae
2fac645
977a5b3
 
08cbfae
 
 
a506c29
08cbfae
259195c
bcdae47
259195c
abf887b
2fac645
259195c
08cbfae
6a61f29
259195c
6a61f29
259195c
 
 
 
 
 
977a5b3
08cbfae
 
2fac645
5e77aec
259195c
 
 
 
 
 
b1ed862
08cbfae
8d9c7cb
08cbfae
5e77aec
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
76
77
78
79
80
81
82
import gradio as gr
import tensorflow as tf
import efficientnet.tfkeras as efn
import numpy as np

# Dimensões da imagem
IMG_HEIGHT = 512
IMG_WIDTH = 512

# Função para construir o modelo original
def build_original_model():
    inp = tf.keras.layers.Input(shape=(IMG_HEIGHT, IMG_WIDTH, 3))
    efnet = efn.EfficientNetB3(  # Usando EfficientNetB3
        input_shape=(IMG_HEIGHT, IMG_WIDTH, 3),
        weights='imagenet',
        include_top=False
    )
    x = efnet(inp)
    x = tf.keras.layers.GlobalAveragePooling2D()(x)
    x = tf.keras.layers.Dense(2, activation='softmax')(x)
    model = tf.keras.Model(inputs=inp, outputs=x)
    opt = tf.keras.optimizers.Adam(learning_rate=0.000003)
    loss = tf.keras.losses.CategoricalCrossentropy(label_smoothing=0.01)
    model.compile(optimizer=opt, loss=loss, metrics=['accuracy'])
    return model

# Carregue o modelo treinado
original_model = build_original_model()
original_model.load_weights('modelo_treinado.h5')

# Função para realizar o pré-processamento da imagem de entrada
def preprocess_image(input_image):
    # Redimensione a imagem para as dimensões esperadas pelo modelo
    input_image = tf.image.resize(input_image, (IMG_HEIGHT, IMG_WIDTH))
    
    # Normalização dos valores de pixel para o intervalo [0, 1]
    input_image = input_image / 255.0

    return input_image

# Função para fazer previsões usando o modelo treinado
def predict(input_image):
    # Realize o pré-processamento na imagem de entrada
    input_image = preprocess_image(input_image)

    # Faça uma previsão usando o modelo carregado
    input_image = tf.expand_dims(input_image, axis=0)
    prediction = original_model.predict(input_image)

    # A saída será uma matriz de previsões
    class_names = ["Normal", "Cataract"]
    probabilities = prediction[0]

    # Determine a classe mais provável
    predicted_class = class_names[np.argmax(probabilities)]

    # Adicione informações adicionais à saída
    confidence = probabilities[np.argmax(probabilities)]

    return {
        "Imagem de Entrada": input_image[0].numpy(),
        "Classificação": predicted_class,
        "Confiança": confidence,
        "Probabilidades": {class_names[i]: probabilities[i] for i in range(len(class_names))}
    }

# Crie uma interface Gradio para fazer previsões
iface = gr.Interface(
    predict,
    inputs=gr.inputs.Image(label="Carregue uma imagem da região ocular", type="pil"),
    outputs=[
        gr.outputs.Image(label="Imagem de Entrada"),
        gr.outputs.Textbox(label="Classificação"),
        gr.outputs.Textbox(label="Confiança"),
        gr.outputs.Table(label="Probabilidades")
    ],
    theme="auto",  # Usar o tema padrão do Gradio
)

# Execute a interface Gradio
iface.launch()