File size: 2,691 Bytes
adf2111
9c07890
75fd37c
f915493
 
e2d7f66
08cbfae
9c07890
 
 
 
 
 
 
 
 
 
 
 
 
08cbfae
7708ef9
339f505
08cbfae
7708ef9
 
df12e30
 
f915493
df12e30
 
ffc1de3
7708ef9
a2419a7
c8fb571
ecd73fd
 
 
e2d7f66
 
 
9762bfd
 
 
 
e2d7f66
9762bfd
c8fb571
9762bfd
 
024b698
08cbfae
7708ef9
ffc1de3
9762bfd
2debced
eea64d8
024b698
 
 
 
 
 
 
 
 
 
9762bfd
 
2debced
 
9762bfd
 
8d9c7cb
024b698
7708ef9
9762bfd
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
import tensorflow as tf
from keras.utils import custom_object_scope
import gradio as gr
from PIL import Image
import numpy as np
import datetime

# 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 classificação
def classify_image(inp):
    # Redimensione a imagem para o formato esperado pelo modelo (192x256)
    img = Image.fromarray(inp).resize((256, 192))

    # Converta a imagem para um array numpy e normalize-a (escala de 0 a 1)
    img = np.array(img) / 255.0

    # 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)]

    # Obtém a data e hora atual
    data_hora = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

    # Formate a saída em HTML
    result_html = f"""
    <h2>Resultado da Classificação</h2>
    <p><strong>Categoria Predita:</strong> {predicted_class}</p>
    <p><strong>Data e Hora:</strong> {data_hora}</p>
    """

    return result_html

# Crie uma interface Gradio com descrição formatada em HTML
iface = gr.Interface(
    fn=classify_image,
    inputs=gr.inputs.Image(shape=(192, 256)),
    outputs=gr.outputs.HTML(),  # Saída formatada com HTML
    live=True,
    title="Classificador de Catarata",
    description="""
    <p>Este é um classificador de imagens médicas para detectar catarata. Faça o upload de uma imagem e clique em 'Classificar' para obter a categoria predita.</p>
    <p><strong>Como usar:</strong></p>
    <ol>
      <li>Clique no botão 'Escolher Arquivo' abaixo para fazer o upload de uma imagem.</li>
      <li>Depois de fazer o upload, clique em 'Classificar' para iniciar a análise.</li>
      <li>A categoria predita e a data/hora da classificação serão exibidas abaixo.</li>
    </ol>
    <p><strong>Observação:</strong> Este modelo é destinado apenas para fins de demonstração e não deve substituir a avaliação de um médico.</p>
    """,
    allow_screenshot=False,
    allow_flagging=False,
    layout="vertical",
    capture_session=True,
    theme="default",
)


# Inicie a interface Gradio
iface.launch()