DHEIVER commited on
Commit
2d807c6
1 Parent(s): 31b8f04

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +28 -37
app.py CHANGED
@@ -1,23 +1,24 @@
1
- import gradio as gr
2
  import tensorflow as tf
3
  import efficientnet.tfkeras as efn
 
4
  import numpy as np
 
5
 
6
  # Dimensões da imagem
7
- IMG_HEIGHT = 512
8
- IMG_WIDTH = 512
9
 
10
- # Função para construir o modelo original
11
- def build_original_model():
12
- inp = tf.keras.layers.Input(shape=(IMG_HEIGHT, IMG_WIDTH, 3))
13
- efnet = efn.EfficientNetB3( # Usando EfficientNetB3
14
- input_shape=(IMG_HEIGHT, IMG_WIDTH, 3),
15
  weights='imagenet',
16
  include_top=False
17
  )
18
  x = efnet(inp)
19
- x = tf.keras.layers.GlobalAveragePooling2D()(x)
20
- x = tf.keras.layers.Dense(2, activation='softmax')(x)
21
  model = tf.keras.Model(inputs=inp, outputs=x)
22
  opt = tf.keras.optimizers.Adam(learning_rate=0.000003)
23
  loss = tf.keras.losses.CategoricalCrossentropy(label_smoothing=0.01)
@@ -25,8 +26,8 @@ def build_original_model():
25
  return model
26
 
27
  # Carregue o modelo treinado
28
- original_model = build_original_model()
29
- original_model.load_weights('modelo_treinado.h5')
30
 
31
  # Função para realizar o pré-processamento da imagem de entrada
32
  def preprocess_image(input_image):
@@ -36,46 +37,36 @@ def preprocess_image(input_image):
36
  # Normalização dos valores de pixel para o intervalo [0, 1]
37
  input_image = input_image / 255.0
38
 
 
 
39
  return input_image
40
 
41
  # Função para fazer previsões usando o modelo treinado
42
- def predict(input_image):
43
  # Realize o pré-processamento na imagem de entrada
44
  input_image = preprocess_image(input_image)
45
 
46
  # Faça uma previsão usando o modelo carregado
47
  input_image = tf.expand_dims(input_image, axis=0)
48
- prediction = original_model.predict(input_image)
49
 
50
- # A saída será uma matriz de previsões
 
51
  class_names = ["Normal", "Cataract"]
52
- probabilities = prediction[0]
53
-
54
- # Determine a classe mais provável
55
- predicted_class = class_names[np.argmax(probabilities)]
56
 
57
- # Adicione informações adicionais à saída
58
- confidence = probabilities[np.argmax(probabilities)]
59
 
60
- return {
61
- "Imagem de Entrada": input_image[0].numpy(),
62
- "Classificação": predicted_class,
63
- "Confiança": confidence,
64
- "Probabilidades": {class_names[i]: probabilities[i] for i in range(len(class_names))}
65
- }
66
 
67
  # Crie uma interface Gradio para fazer previsões
68
  iface = gr.Interface(
69
- predict,
70
- inputs=gr.inputs.Image(label="Carregue uma imagem da região ocular", type="pil"),
71
- outputs=[
72
- gr.outputs.Image(label="Imagem de Entrada"),
73
- gr.outputs.Textbox(label="Classificação"),
74
- gr.outputs.Textbox(label="Confiança"),
75
- gr.outputs.Table(label="Probabilidades")
76
- ],
77
- theme="auto", # Usar o tema padrão do Gradio
78
  )
79
 
80
  # Execute a interface Gradio
81
- iface.launch()
 
 
1
  import tensorflow as tf
2
  import efficientnet.tfkeras as efn
3
+ from tensorflow.keras.layers import Input, GlobalAveragePooling2D, Dense
4
  import numpy as np
5
+ import gradio as gr
6
 
7
  # Dimensões da imagem
8
+ IMG_HEIGHT = 224
9
+ IMG_WIDTH = 224
10
 
11
+ # Função para construir o modelo
12
+ def build_model(img_height, img_width, n):
13
+ inp = Input(shape=(img_height, img_width, n))
14
+ efnet = efn.EfficientNetB0(
15
+ input_shape=(img_height, img_width, n),
16
  weights='imagenet',
17
  include_top=False
18
  )
19
  x = efnet(inp)
20
+ x = GlobalAveragePooling2D()(x)
21
+ x = Dense(2, activation='softmax')(x)
22
  model = tf.keras.Model(inputs=inp, outputs=x)
23
  opt = tf.keras.optimizers.Adam(learning_rate=0.000003)
24
  loss = tf.keras.losses.CategoricalCrossentropy(label_smoothing=0.01)
 
26
  return model
27
 
28
  # Carregue o modelo treinado
29
+ loaded_model = build_model(IMG_HEIGHT, IMG_WIDTH, 3)
30
+ loaded_model.load_weights('modelo_treinado.h5')
31
 
32
  # Função para realizar o pré-processamento da imagem de entrada
33
  def preprocess_image(input_image):
 
37
  # Normalização dos valores de pixel para o intervalo [0, 1]
38
  input_image = input_image / 255.0
39
 
40
+ # Outras transformações, se necessárias (por exemplo, normalização adicional)
41
+
42
  return input_image
43
 
44
  # Função para fazer previsões usando o modelo treinado
45
+ def predict_image(input_image):
46
  # Realize o pré-processamento na imagem de entrada
47
  input_image = preprocess_image(input_image)
48
 
49
  # Faça uma previsão usando o modelo carregado
50
  input_image = tf.expand_dims(input_image, axis=0)
51
+ prediction = loaded_model.predict(input_image)
52
 
53
+ # A saída será uma matriz de previsões (no caso de classificação de duas classes, será algo como [[probabilidade_classe_0, probabilidade_classe_1]])
54
+ # Adicione lógica para interpretar o resultado e formatá-lo para exibição
55
  class_names = ["Normal", "Cataract"]
56
+ predicted_class = class_names[np.argmax(prediction)]
57
+ probability = prediction[0][np.argmax(prediction)]
 
 
58
 
59
+ formatted_text = f"Predicted Class: {predicted_class}\nProbability: {probability:.2%}"
60
+ return formatted_text
61
 
 
 
 
 
 
 
62
 
63
  # Crie uma interface Gradio para fazer previsões
64
  iface = gr.Interface(
65
+ fn=predict_image,
66
+ inputs="image",
67
+ outputs="text",
68
+ interpretation="default"
 
 
 
 
 
69
  )
70
 
71
  # Execute a interface Gradio
72
+ iface.launch()