Instructions to use kero2111/Plant_Disease with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Keras
How to use kero2111/Plant_Disease with Keras:
# Available backend options are: "jax", "torch", "tensorflow". import os os.environ["KERAS_BACKEND"] = "jax" import keras model = keras.saving.load_model("hf://kero2111/Plant_Disease") - Notebooks
- Google Colab
- Kaggle
| import tensorflow as tf | |
| import numpy as np | |
| from PIL import Image | |
| import os | |
| # ======================== | |
| # Custom layer (مطلوبة) | |
| # ======================== | |
| from tensorflow.keras.layers import Layer | |
| class CustomScaleLayer(Layer): | |
| def __init__(self, scale=1.0, **kwargs): | |
| super(CustomScaleLayer, self).__init__(**kwargs) | |
| self.scale = scale | |
| def call(self, inputs): | |
| if isinstance(inputs, (list, tuple)): | |
| x = tf.add_n(inputs) | |
| else: | |
| x = inputs | |
| return x * self.scale | |
| def get_config(self): | |
| config = super().get_config() | |
| config.update({"scale": self.scale}) | |
| return config | |
| # ======================== | |
| # Load the model | |
| # ======================== | |
| def load_model(model_path): | |
| try: | |
| model = tf.keras.models.load_model(model_path, custom_objects={'CustomScaleLayer': CustomScaleLayer}) | |
| print("Model loaded successfully!") | |
| return model | |
| except Exception as e: | |
| print(f"Error loading model: {e}") | |
| return None | |
| # ======================== | |
| # Image preprocessing | |
| # ======================== | |
| def preprocess_image(image_path, target_size=(299, 299), normalize=True): | |
| try: | |
| img = Image.open(image_path) | |
| if img.mode != 'RGB': | |
| img = img.convert('RGB') | |
| img = img.resize(target_size) | |
| img_array = np.array(img) | |
| if normalize: | |
| img_array = img_array / 255.0 | |
| img_array = np.expand_dims(img_array, axis=0) | |
| return img_array | |
| except Exception as e: | |
| print(f"Error preprocessing image: {e}") | |
| return None | |
| # ======================== | |
| # Prediction | |
| # ======================== | |
| def predict_disease(model, image_array): | |
| try: | |
| prediction = model.predict(image_array) | |
| predicted_class = np.argmax(prediction[0]) | |
| confidence = prediction[0][predicted_class] | |
| return predicted_class, confidence, prediction[0] | |
| except Exception as e: | |
| print(f"Error making prediction: {e}") | |
| return None, None, None | |
| # ======================== | |
| # Class names | |
| # ======================== | |
| def get_class_name(class_index): | |
| classes = [ | |
| "Apple___Apple_scab", "Apple___Black_rot", "Apple___Cedar_apple_rust", "Apple___healthy", | |
| "Blueberry___healthy", "Cherry_(including_sour)___Powdery_mildew", "Cherry_(including_sour)___healthy", | |
| "Corn_(maize)___Cercospora_leaf_spot Gray_leaf_spot", "Corn_(maize)___Common_rust_", | |
| "Corn_(maize)___Northern_Leaf_Blight", "Corn_(maize)___healthy", "Grape___Black_rot", | |
| "Grape___Esca_(Black_Measles)", "Grape___Leaf_blight_(Isariopsis_Leaf_Spot)", "Grape___healthy", | |
| "Orange___Haunglongbing_(Citrus_greening)", "Peach___Bacterial_spot", "Peach___healthy", | |
| "Pepper,_bell___Bacterial_spot", "Pepper,_bell___healthy", "Potato___Early_blight", | |
| "Potato___Late_blight", "Potato___healthy", "Raspberry___healthy", "Soybean___healthy", | |
| "Squash___Powdery_mildew", "Strawberry___Leaf_scorch", "Strawberry___healthy", | |
| "Tomato___Bacterial_spot", "Tomato___Early_blight", "Tomato___Late_blight", "Tomato___Leaf_Mold", | |
| "Tomato___Septoria_leaf_spot", "Tomato___Spider_mites Two-spotted_spider_mite", | |
| "Tomato___Target_Spot", "Tomato___Tomato_Yellow_Leaf_Curl_Virus", "Tomato___Tomato_mosaic_virus", | |
| "Tomato___healthy" | |
| ] | |
| if 0 <= class_index < len(classes): | |
| return classes[class_index] | |
| else: | |
| return "Unknown" | |
| # ======================== | |
| # Main function | |
| # ======================== | |
| def main(): | |
| model_path = "Pretrained_model.h5" | |
| sample_image_path = "sample_image.jpg" # 👈 ضع هنا اسم الصورة | |
| if not os.path.exists(model_path): | |
| print(f"Model file not found at: {model_path}") | |
| return | |
| if not os.path.exists(sample_image_path): | |
| print(f"Image file not found at: {sample_image_path}") | |
| return | |
| model = load_model(model_path) | |
| if model is None: | |
| return | |
| # تحقق هل الموديل فيه طبقة Rescaling | |
| has_rescaling = any(isinstance(layer, tf.keras.layers.Rescaling) for layer in model.layers) | |
| image_array = preprocess_image(sample_image_path, target_size=(299, 299), normalize=not has_rescaling) | |
| if image_array is None: | |
| return | |
| predicted_class, confidence, all_predictions = predict_disease(model, image_array) | |
| if predicted_class is not None: | |
| class_name = get_class_name(predicted_class) | |
| print(f"\nPrediction Results:") | |
| print(f"Predicted Class: {class_name}") | |
| print(f"Confidence: {confidence:.2%}") | |
| print(f"Class Index: {predicted_class}") | |
| # Show top 3 predictions | |
| top_3_indices = np.argsort(all_predictions)[-3:][::-1] | |
| print(f"\nTop 3 Predictions:") | |
| for i, idx in enumerate(top_3_indices): | |
| class_name = get_class_name(idx) | |
| confidence = all_predictions[idx] | |
| print(f"{i+1}. {class_name}: {confidence:.2%}") | |
| if __name__ == "__main__": | |
| main() | |