DHEIVER's picture
Update app.py
e996157
import gradio as gr
import tensorflow as tf
from tensorflow import keras
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
# Criar o modelo
model = keras.models.Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(300, 300, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))
# Compilar o modelo
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
# Carregar pesos pré-treinados (se disponíveis)
model.load_weights('50_epochs.h5')
# Função de pré-processamento
def preprocess(image):
# Redimensionar a imagem para a forma esperada pelo modelo (300x300)
image = tf.image.resize(image, (300, 300))
# Converter os valores dos pixels para o intervalo [0, 1]
image /= 255.0
return image
# Função para previsão
def predict(image):
preprocessed_image = preprocess(image)
prediction = model.predict(tf.expand_dims(preprocessed_image, axis=0))[0][0]
if prediction >= 0.5:
return 'cancer'
else:
return 'noncancer'
# Interface Gradio
inputs = gr.inputs.Image()
outputs = gr.outputs.Textbox()
examples = [['8864_idx5_x1801_y2351_class1.png']]
description = "Este é um classificador de histopatologia de mama. Ele foi treinado para distinguir entre amostras de tecido mamário canceroso e não canceroso. Carregue uma imagem de histopatologia de mama e o modelo irá prever se a amostra é cancerosa ou não cancerosa."
app = gr.Interface(fn=predict, inputs=inputs, outputs=outputs, title='Breast Histopathology Classifier', description=description, examples=examples)
app.launch()