Spaces:
Running
Running
from tensorflow.keras.models import load_model as keras_load_model | |
from tensorflow.keras.applications.xception import preprocess_input | |
from PIL import Image | |
import numpy as np | |
from huggingface_hub import hf_hub_download | |
from io import BytesIO | |
import os | |
from pathlib import Path | |
# Base directory: two levels up from this file | |
BASE_DIR = Path(__file__).resolve().parent.parent.parent | |
# Map model names to class labels | |
CLASS_NAMES = { | |
"xception_maize": ['fall armyworm', 'grasshoper', 'healthy', 'leaf beetle', 'leaf blight', 'leaf spot', 'streak virus'], | |
"xception_cassava": ["bacterial blight", "brown spot", "green mite", "healthy", "mosaic"], | |
"xception_cashew": ["anthracnose", "gumosis", "healthy", "leaf miner", "red rust"], | |
"xception_tomato": ["healthy", "leaf blight", "leaf curl", "septoria leaf spot", "verticulium wilt"] | |
} | |
HF_MODEL_REPO = { | |
"xception_maize": "SaiStack/xception_maize", | |
"xception_cassava": "SaiStack/xception_cassava", | |
"xception_cashew": "SaiStack/xception_cashew", | |
"xception_tomato": "SaiStack/xception_tomato" | |
} | |
DISEASE_DATA = { | |
"xception_maize": { | |
"fall armyworm": { | |
"description": "A destructive caterpillar that feeds on maize leaves and cobs.", | |
"symptoms": ["Holes in leaves", "Frass (insect poop) near whorls", "Stunted growth"], | |
"treatment": "Apply pesticides such as Spinosad or Bacillus thuringiensis. Early detection helps.", | |
"prevention": "Plant early, use pest-resistant varieties, rotate crops.", | |
"message": "Your maize might be under attack by fall armyworms. It's best to spray a safe pesticide like Spinosad and monitor regularly. Early action saves your yield!" | |
}, | |
"grasshoper": { | |
"description": "Insects that chew on maize leaves, reducing photosynthesis.", | |
"symptoms": ["Jagged leaf edges", "Visible insects on leaves"], | |
"treatment": "Use neem-based sprays or mechanical control.", | |
"prevention": "Encourage natural predators like birds; avoid overuse of fertilizers.", | |
"message": "Looks like grasshoppers are chewing on your maize. Spray neem oil and try attracting birds to your farm—they’re great helpers!" | |
}, | |
"healthy": { | |
"description": "Your crop shows no signs of disease or pest infestation.", | |
"symptoms": [], | |
"treatment": "No treatment needed.", | |
"prevention": "Keep monitoring and maintain good farming practices.", | |
"message": "Great job! Your maize is looking healthy. Keep up the good work and keep checking regularly." | |
}, | |
"leaf beetle": { | |
"description": "Beetles that skeletonize maize leaves, reducing growth.", | |
"symptoms": ["Holes and transparent patches on leaves"], | |
"treatment": "Use insecticidal soap or approved beetle pesticides.", | |
"prevention": "Practice crop rotation and destroy old crop debris.", | |
"message": "Leaf beetles may be feeding on your maize. Spray with safe insecticides and clean up leftover plant waste after harvest." | |
}, | |
"leaf blight": { | |
"description": "Fungal disease that causes dead streaks on leaves.", | |
"symptoms": ["Long, greyish lesions", "Yellowing and dying leaves"], | |
"treatment": "Apply fungicides like Mancozeb. Ensure good air circulation.", | |
"prevention": "Avoid overhead watering; plant in well-spaced rows.", | |
"message": "Maize leaf blight detected. Spray fungicide and avoid wetting leaves during irrigation." | |
}, | |
"leaf spot": { | |
"description": "Spots caused by fungus or bacteria, reducing photosynthesis.", | |
"symptoms": ["Brown or black spots with yellow halos"], | |
"treatment": "Spray with copper-based fungicide.", | |
"prevention": "Use disease-free seeds and rotate maize with legumes.", | |
"message": "Spots on your maize leaves suggest leaf spot. A copper fungicide should do the trick. Rotate crops to prevent re-infection." | |
}, | |
"streak virus": { | |
"description": "A viral disease transmitted by leafhoppers.", | |
"symptoms": ["Yellow streaks", "Stunted plants", "Chlorotic leaves"], | |
"treatment": "No cure, but remove and burn infected plants.", | |
"prevention": "Control leafhoppers; use virus-free seeds.", | |
"message": "Your maize may have streak virus. Uproot and burn infected plants quickly, and spray to control leafhoppers." | |
} | |
}, | |
"xception_cassava": { | |
"bacterial blight": { | |
"description": "A bacterial infection causing leaf wilting and stem dieback.", | |
"symptoms": ["Angular leaf spots", "Wilted leaves", "Stem rot"], | |
"treatment": "No direct cure, but pruning infected areas helps.", | |
"prevention": "Use disease-free cuttings; plant early.", | |
"message": "Cassava bacterial blight found. Cut off infected stems and plant clean cuttings next time." | |
}, | |
"brown spot": { | |
"description": "Fungal disease causing brown lesions on leaves.", | |
"symptoms": ["Brown dry patches", "Defoliation in severe cases"], | |
"treatment": "Apply Mancozeb or other fungicides.", | |
"prevention": "Avoid overhead watering and weed regularly.", | |
"message": "Your cassava shows brown spot symptoms. Apply fungicide and keep the field well-weeded." | |
}, | |
"green mite": { | |
"description": "Microscopic pests that feed on cassava leaves.", | |
"symptoms": ["Leaf curling", "Yellowing", "Stunted growth"], | |
"treatment": "Use neem oil or biological controls like predatory mites.", | |
"prevention": "Use tolerant varieties and natural predators.", | |
"message": "Green mites might be on your cassava. Spray neem oil and look into mite-resistant varieties." | |
}, | |
"healthy": { | |
"description": "Your cassava is in excellent condition.", | |
"symptoms": [], | |
"treatment": "None required.", | |
"prevention": "Keep monitoring and weed regularly.", | |
"message": "Well done! Your cassava looks healthy. Just maintain regular care and check for early signs of trouble." | |
}, | |
"mosaic": { | |
"description": "A viral disease causing leaf distortion.", | |
"symptoms": ["Mottled leaves", "Distorted growth"], | |
"treatment": "Remove and destroy infected plants.", | |
"prevention": "Use resistant varieties and clean planting materials.", | |
"message": "Cassava mosaic virus detected. Uproot affected plants and use resistant varieties for next season." | |
} | |
}, | |
"xception_cashew": { | |
"anthracnose": { | |
"description": "Fungal disease that attacks young shoots and fruits.", | |
"symptoms": ["Black lesions", "Fruit drop", "Leaf spots"], | |
"treatment": "Use copper-based fungicides like Copper Oxychloride.", | |
"prevention": "Prune to increase airflow and avoid overhead irrigation.", | |
"message": "Your cashew trees may have anthracnose. Apply copper fungicide and prune crowded branches." | |
}, | |
"gumosis": { | |
"description": "A physiological disorder where gum oozes from the bark.", | |
"symptoms": ["Gum exudation", "Cracked bark", "Yellowing leaves"], | |
"treatment": "Apply Bordeaux paste to the wounds.", | |
"prevention": "Avoid waterlogging and mechanical injuries.", | |
"message": "Gumosis spotted. Apply Bordeaux paste and ensure the soil drains well." | |
}, | |
"healthy": { | |
"description": "No signs of disease or pest issues on your cashew.", | |
"symptoms": [], | |
"treatment": "None needed.", | |
"prevention": "Maintain clean pruning and proper watering.", | |
"message": "Your cashew looks healthy! Keep following good care practices and you'll be rewarded with a good harvest." | |
}, | |
"leaf miner": { | |
"description": "Insects that burrow inside cashew leaves.", | |
"symptoms": ["Winding trails on leaves", "Leaf curling"], | |
"treatment": "Spray with Imidacloprid or neem-based pesticide.", | |
"prevention": "Remove affected leaves; plant resistant varieties.", | |
"message": "Leaf miners are feeding inside your cashew leaves. Spray with neem oil and remove damaged leaves." | |
}, | |
"red rust": { | |
"description": "Algae-caused disease that forms reddish growth on leaves.", | |
"symptoms": ["Reddish-orange spots", "Reduced vigor"], | |
"treatment": "Spray copper fungicide or lime-sulfur solution.", | |
"prevention": "Avoid overcrowding and increase air circulation.", | |
"message": "Red rust detected on your cashew. Treat with copper fungicide and give your plants some breathing room." | |
} | |
}, | |
"xception_tomato": { | |
"healthy": { | |
"description": "Tomatoes are growing well without any visible issues.", | |
"symptoms": [], | |
"treatment": "None needed.", | |
"prevention": "Maintain good practices like mulching and spacing.", | |
"message": "Your tomatoes are doing great! Keep watering regularly and monitor for any signs of pests or disease." | |
}, | |
"leaf blight": { | |
"description": "Fungal disease causing rapid leaf death.", | |
"symptoms": ["Brown lesions", "Leaf drop", "Stem cankers"], | |
"treatment": "Apply chlorothalonil or copper-based fungicide.", | |
"prevention": "Avoid overhead watering and plant spacing.", | |
"message": "Leaf blight may be affecting your tomatoes. Spray fungicide and avoid splashing water on leaves." | |
}, | |
"leaf curl": { | |
"description": "Viral disease spread by whiteflies.", | |
"symptoms": ["Upward curling leaves", "Stunted growth"], | |
"treatment": "Remove infected plants and control whiteflies.", | |
"prevention": "Use yellow sticky traps and virus-resistant varieties.", | |
"message": "Tomato leaf curl detected. Remove infected plants and trap whiteflies with yellow sticky traps." | |
}, | |
"septoria leaf spot": { | |
"description": "Fungal disease causing circular spots on tomato leaves.", | |
"symptoms": ["Small brown circular spots", "Yellowing lower leaves"], | |
"treatment": "Use Mancozeb or chlorothalonil spray.", | |
"prevention": "Avoid wetting leaves; improve air circulation.", | |
"message": "Spots on tomato leaves? That’s septoria. Spray fungicide and ensure your plants aren’t too crowded." | |
}, | |
"verticulium wilt": { | |
"description": "Soil-borne fungus that blocks water flow in tomatoes.", | |
"symptoms": ["Wilting leaves", "Yellowing", "Reduced fruit size"], | |
"treatment": "Remove affected plants and solarize soil.", | |
"prevention": "Rotate crops and avoid planting tomatoes in the same spot every year.", | |
"message": "Tomato wilt detected. Uproot infected plants and rotate your crops next season." | |
} | |
} | |
} | |
MODEL_CACHE = {} | |
def load_model(model_key): | |
if model_key in MODEL_CACHE: | |
return MODEL_CACHE[model_key] | |
hf_repo_id = HF_MODEL_REPO[model_key] | |
model_path = hf_hub_download( | |
repo_id=hf_repo_id, | |
filename=f"{model_key}.keras", | |
repo_type="model", | |
cache_dir="/tmp/hf_model_cache" | |
) | |
model = keras_load_model(model_path) | |
MODEL_CACHE[model_key] = model | |
return model | |
# Unified prediction logic | |
def predict_image(file_bytes, model, model_name): | |
img = Image.open(BytesIO(file_bytes)).convert("RGB") | |
img = img.resize((299, 299)) # Xception size | |
arr = np.array(img, dtype=np.float32) | |
arr = preprocess_input(arr) | |
arr = np.expand_dims(arr, axis=0) | |
preds = model.predict(arr) | |
idx = int(np.argmax(preds)) | |
label = CLASS_NAMES[model_name][idx] | |
conf = float(np.max(preds)) | |
return label, conf, DISEASE_DATA[model_name][label] | |