anand_plant2 / app.py
ranchopanda0's picture
Update app.py
0a131b9 verified
raw
history blame
2.73 kB
import os
import gradio as gr
from transformers import AutoImageProcessor, AutoModelForImageClassification
from PIL import Image
import torch
import numpy as np
import requests
import logging
from dotenv import load_dotenv # Load .env file
# Load environment variables
load_dotenv()
HUGGINGFACE_API_KEY = os.getenv("HUGGINGFACE_API_KEY")
# Configure Logging
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
# Load Model & Processor
model_name = "linkanjarad/mobilenet_v2_1.0_224-plant-disease-identification"
try:
processor = AutoImageProcessor.from_pretrained(model_name, use_fast=True)
model = AutoModelForImageClassification.from_pretrained(model_name)
logging.info("✅ Model and processor loaded successfully.")
except Exception as e:
logging.error(f"❌ Failed to load model: {str(e)}")
raise RuntimeError("Failed to load the model. Please check the logs for details.")
# Function to Get AI-Powered Treatment Suggestions
def get_treatment_suggestions(disease_name):
url = "https://api-inference.huggingface.co/models/OpenAGI/agriculture-gpt"
headers = {"Authorization": f"Bearer {HUGGINGFACE_API_KEY}"}
data = {"inputs": f"What are the treatment options for {disease_name} in plants?"}
try:
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
return response.json()[0]["generated_text"]
else:
return f"API Error: {response.status_code}"
except Exception as e:
return "Error retrieving treatment details."
# Define Prediction Function
def predict(image):
try:
image = Image.fromarray(np.uint8(image)).convert("RGB")
inputs = processor(images=image, return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits
predicted_class_idx = logits.argmax(-1).item()
predicted_label = model.config.id2label[predicted_class_idx]
# Get AI-generated treatment suggestions
treatment = get_treatment_suggestions(predicted_label)
return f"Predicted Disease: {predicted_label}\nTreatment: {treatment}"
except Exception as e:
logging.error(f"Prediction failed: {str(e)}")
return f"❌ Prediction failed: {str(e)}"
# Gradio Interface
iface = gr.Interface(
fn=predict,
inputs=gr.Image(type="numpy", label="Upload or capture plant image"),
outputs=gr.Textbox(label="Result"),
title="AI-Powered Plant Disease Detector",
description="Upload a plant leaf image to detect diseases and get AI-powered treatment suggestions.",
allow_flagging="never",
)
# Launch Gradio App
iface.launch()