Spaces:
Running
Running
| from fastapi import FastAPI, File, UploadFile | |
| import tensorflow as tf | |
| import numpy as np | |
| from PIL import Image | |
| import io | |
| app = FastAPI() | |
| # Load the model once when server starts | |
| model = tf.keras.models.load_model("orange_disease_model.h5") | |
| # Define your classes (Make sure these match your labels.txt!) | |
| CLASS_NAMES = [ | |
| 'Citrus canker', 'Citrus greening', 'Citrus mealybugs', 'Die back', | |
| 'Foliage damaged', 'Healthy leaf', 'Powdery mildew', 'Shot hole', | |
| 'Spiny whitefly', 'Yellow dragon', 'Yellow leaves' | |
| ] | |
| def home(): | |
| return {"message": "Orange Disease Detection API is Running!"} | |
| async def predict(file: UploadFile = File(...)): | |
| # 1. Read the image uploaded by the user | |
| image_data = await file.read() | |
| image = Image.open(io.BytesIO(image_data)) | |
| # 2. Preprocess (Resize to 224x224 and Normalize) | |
| image = image.resize((224, 224)) | |
| img_array = tf.keras.preprocessing.image.img_to_array(image) | |
| img_array = tf.expand_dims(img_array, 0) # Create a batch | |
| img_array = img_array / 255.0 | |
| # 3. Predict | |
| predictions = model.predict(img_array) | |
| predicted_class = CLASS_NAMES[np.argmax(predictions[0])] | |
| confidence = float(np.max(predictions[0])) | |
| # 4. Return JSON | |
| return { | |
| "class": predicted_class, | |
| "confidence": confidence | |
| } |