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()