Pepinos / app.py
riabayonaor's picture
Update app.py
2e91b91 verified
raw
history blame
No virus
3.61 kB
import streamlit as st
import requests
from PIL import Image
from io import BytesIO
from dotenv import load_dotenv
import os
# Cargar variables de entorno desde el archivo .env
load_dotenv()
huggingface_api_key = os.getenv("HUGGINGFACE_API_KEY")
# Configuraci贸n de la API
API_URL = "https://api-inference.huggingface.co/models/riabayonaor/modelo_prediccion_enfermedades_pepinos"
META_LLAMA_API_URL = "https://api-inference.huggingface.co/models/meta-llama/Meta-Llama-3-8B-Instruct"
headers = {"Authorization": f"Bearer {huggingface_api_key}"}
# Lista de clases del modelo
classes = ["Anthracnose", "Bacterial Wilt", "Belly Rot", "Downy Mildew",
"Fresh Cucumber", "Fresh Leaf", "Gummy Stem Blight", "Pythium Fruit Rot"]
def query(image_bytes):
response = requests.post(API_URL, headers=headers, data=image_bytes)
if response.status_code != 200:
st.error(f"Error al clasificar la imagen: {response.status_code}")
return None
return response.json()
def llama_query(prompt):
response = requests.post(META_LLAMA_API_URL, headers=headers, json={"inputs": prompt})
if response.status_code != 200:
st.error(f"Error al obtener respuesta del modelo Meta Llama: {response.status_code}")
return None
return response.json()
def main():
st.set_page_config(page_title="Predicci贸n de Enfermedades en Pepinos")
st.title("Predicci贸n de Enfermedades en Pepinos")
st.write("Sube una foto de una planta de pepino o un pepino para clasificar posibles enfermedades y obtener soluciones.")
uploaded_file = st.file_uploader("Sube una foto de una planta de pepino o un pepino", type=["jpg", "jpeg", "png"])
if uploaded_file is not None:
image = Image.open(uploaded_file)
st.image(image, caption='Imagen subida.', use_column_width=True)
st.write("Clasificando...")
# Convertir la imagen a bytes
img_byte_arr = BytesIO()
image.save(img_byte_arr, format='PNG')
img_byte_arr = img_byte_arr.getvalue()
# Enviar la imagen al modelo de Hugging Face
predictions = query(img_byte_arr)
if predictions is not None:
if "error" not in predictions:
# Suponiendo que las predicciones est谩n en el formato [{label: "0", score: 0.95}, {label: "1", score: 0.05}]
top_prediction = max(predictions, key=lambda x: x["score"])
class_label = classes[int(top_prediction['label'])]
st.write(f"Predicci贸n principal: {class_label} con confianza {top_prediction['score']:.2f}")
# Usar la etiqueta principal para el modelo de Meta Llama
prompt = f"Esta enfermedad es {class_label}. Explica qu茅 es y sugiere posibles insecticidas o soluciones."
# Llamar al modelo Meta Llama
llama_response = llama_query(prompt)
if llama_response is not None:
if "error" not in llama_response:
explanation = llama_response[0]["generated_text"]
st.write("Explicaci贸n y posibles soluciones:")
st.write(explanation)
else:
st.write("No se pudo obtener una respuesta del modelo Meta Llama.")
else:
st.write("No se pudo obtener una respuesta del modelo Meta Llama.")
else:
st.write("No se pudo clasificar la imagen.")
else:
st.write("No se pudo clasificar la imagen.")
if __name__ == "__main__":
main()