1
resposta

Falha ao baixar gdown e tensorflow no ambiente streamlite

Bom dia!

Estou na 'Disponibilizando aplicação' com o seguinte código que foi feito seguindo as instruções da aula:

import streamlit as st import gdown import tensorflow as tf import io from PIL import Image import numpy as np import pandas as pd import plotly.express as px

@st.cache_resource def carrega_modelo(): #https://drive.google.com/file/d/1gZuGBQXzMlgeVoUszXxSb1H9Tg_6pRzt/view?usp=drive_link url = 'https://drive.google.com/uc?id=1gZuGBQXzMlgeVoUszXxSb1H9Tg_6pRzt'

gdown.download(url, 'modelo_quantizado16bits.tflite')
interpreter = tf.lite.Interpreter(model_path='modelo_quantizado16bits.tflite')
interpreter.allocate_tensors()

return interpreter

def carrega_imagem(): upload_file = st.file_uploader('Arraste e solte uma imagem de uma folha de videira', type=['png', 'jpg', 'jpeg'])

if upload_file is not None:
    image_data = upload_file.read()
    image = Image.open(io.BytesIO(image_data))

    #Exibirá a imagem:
    st.image(image)
    st.success('Imagem foi carregada com sucesso')

    image = np.array(image, dtype=np.float32)
    image = image / 255.0
    image = np.expand_dims(image,axis=0)

    return image

def previsao(interpreter, image): input_details = interpreter.get_input_details() output_details = interpreter.get_output_details()

interpreter.set_tensor(input_details[0]['index'], image)

interpreter.invoke()

output_data = interpreter.get_tensor(output_details[0]['index'])
classes = ['BlackMeasles', 'BlackRot', 'HealthyGrapes', 'LeafBlight']

df = pd.DataFrame()
df['classes'] = classes
df['probabilidades (%)'] = 100*output_data[0]

fig = px.bar(df,y='classes',x='probabilidades (%)', orientation='h', text='probabilidades (%)', title='Probabilidade de Classes de Doenças em Uvas')
st.plotly_chart(fig)

def main():

st.set_page_config(
    page_title='Classifica folhas de videira'
)
st.write('# Classifica folhas de videira')

#Carrega modelo:
interpreter = carrega_modelo()

#Carrega Imagem:
image = carrega_imagem()

#Classifica:
if image is not None:
    previsao(interpreter, image)

if name == 'main': main()

Mas estou recebendo o seguinte erro:

ModuleNotFoundError: This app has encountered an error. The original error message is redacted to prevent data leaks. Full error details have been recorded in the logs (if you're on Streamlit Cloud, click on 'Manage app' in the lower right of your app). Traceback: File "/home/adminuser/venv/lib/python3.12/site-packages/streamlit/runtime/scriptrunner/exec_code.py", line 88, in exec_func_with_error_handling result = func() ^^^^^^ File "/home/adminuser/venv/lib/python3.12/site-packages/streamlit/runtime/scriptrunner/script_runner.py", line 579, in code_to_exec exec(code, module.dict) File "/mount/src/classificacao_uvas/app.py", line 2, in import gdown

Poderiam me ajudar a resolver esse problema?

Eu tentei com o método requests e o problema com o gdown foi resolvido mas ai a mesma mensagem apareceu para a biblioteca do tensorflow.
1 resposta

Oi Luiz, tudo certo?

O erro que você está enfrentando, relacionado ao ModuleNotFoundError, indica que algumas bibliotecas não estão sendo encontradas no seu ambiente de execução do Streamlit. Mesmo que o gdown tenha sido resolvido, o problema ainda persiste com o TensorFlow. Vou te sugerir alguns passos para tentar resolver esse problema.

Passo 1: Verificar Dependências

No ambiente do Streamlit, é importante garantir que todas as dependências estejam instaladas corretamente. Parece que o TensorFlow não está instalado ou não está acessível no seu ambiente. Tente instalar o TensorFlow (e as outras dependências) diretamente no ambiente de execução do Streamlit. Se estiver utilizando o requirements.txt ou o arquivo de configuração do Streamlit, inclua estas dependências:

  1. Crie ou edite um arquivo requirements.txt no diretório do seu projeto com as dependências:

    tensorflow
    gdown
    pandas
    numpy
    plotly
    Pillow
    streamlit
    
  2. Após isso, tente rodar:

    pip install -r requirements.txt
    

Passo 2: Instalar TensorFlow no Streamlit

Certifique-se de que o tensorflow esteja instalado corretamente no ambiente onde você está rodando o Streamlit. Se você está no Streamlit Cloud, o processo de instalação pode ser feito diretamente através do arquivo requirements.txt que o Streamlit detecta ao iniciar o seu app.

Se você estiver rodando localmente, basta usar o comando abaixo para garantir que o TensorFlow está instalado corretamente no seu ambiente:

pip install tensorflow

Passo 3: Garantir Compatibilidade

Em alguns ambientes do Streamlit Cloud ou em servidores com menos recursos, pode ser difícil instalar versões mais pesadas do TensorFlow. Nesse caso, tente instalar uma versão mais leve do TensorFlow:

pip install tensorflow-cpu

Esse pacote é uma versão sem suporte a GPU, mas funciona para a maioria das operações e pode ser mais fácil de instalar.

Passo 4: Verificar Instalação do gdown

Se o gdown ainda estiver com problemas, tente instalá-lo diretamente:

pip install gdown

Passo 5: Usar requests como alternativa

Como você mencionou que conseguiu usar o requests para o gdown, isso pode ser uma alternativa viável. Aqui está um exemplo de como você pode substituir o gdown pelo requests:

import requests

def carrega_modelo():
    url = 'https://drive.google.com/uc?id=1gZuGBQXzMlgeVoUszXxSb1H9Tg_6pRzt'
    response = requests.get(url)
    
    # Salvar o arquivo localmente
    with open('modelo_quantizado16bits.tflite', 'wb') as f:
        f.write(response.content)
    
    interpreter = tf.lite.Interpreter(model_path='modelo_quantizado16bits.tflite')
    interpreter.allocate_tensors()
    
    return interpreter

Passo 6: Verificar Log de Erro Completo

O Streamlit geralmente gera logs detalhados quando ocorre um erro. Verifique se há mais detalhes no log que possam indicar o que está causando o problema. No Streamlit Cloud, você pode acessar os logs clicando em "Manage app" para ver as mensagens completas.

Espero que ajude!