| import tensorflow as tf |
| from tensorflow import keras |
| import numpy as np |
| import cv2 |
| from PIL import Image |
| import json |
|
|
| |
| IMG_SIZE = 224 |
| MODEL_PATH = "model/plant_disease_efficientnetb0.weights.h5" |
| CLASS_NAMES_PATH = "model/class_names.json" |
|
|
| |
| with open(CLASS_NAMES_PATH, "r") as f: |
| CLASS_NAMES = json.load(f) |
|
|
| def build_model(num_classes, img_size=IMG_SIZE): |
| inputs = keras.Input(shape=(img_size, img_size, 3)) |
| base_model = keras.applications.EfficientNetB0( |
| include_top=False, |
| weights=None, |
| input_shape=(img_size, img_size, 3) |
| ) |
| base_model.trainable = False |
| x = keras.applications.efficientnet.preprocess_input(inputs) |
| x = base_model(x, training=False) |
| x = keras.layers.GlobalAveragePooling2D()(x) |
| x = keras.layers.BatchNormalization()(x) |
| x = keras.layers.Dropout(0.3)(x) |
| outputs = keras.layers.Dense(num_classes, activation="softmax")(x) |
| return keras.Model(inputs, outputs) |
|
|
| NUM_CLASSES = len(CLASS_NAMES) |
| model = build_model(NUM_CLASSES) |
| model.load_weights(MODEL_PATH) |
|
|
|
|
|
|
| |
| def preprocess_image(image_path): |
| img = tf.keras.preprocessing.image.load_img( |
| image_path, target_size=(IMG_SIZE, IMG_SIZE) |
| ) |
| img_array = tf.keras.preprocessing.image.img_to_array(img) |
| |
| return np.expand_dims(img_array, axis=0) |
|
|
|
|
| |
| def predict_plant_disease(image_path): |
| img_array = preprocess_image(image_path) |
| preds = model.predict(img_array)[0] |
|
|
| class_index = int(np.argmax(preds)) |
| confidence = float(preds[class_index]) |
| label = CLASS_NAMES[class_index] |
|
|
| return {label: confidence} |
|
|
|
|
| if __name__ == "__main__": |
| print("Model loaded. Enter image paths to classify (Ctrl+C to exit):\n") |
| try: |
| while True: |
| image_path = input("Enter image path: ").strip() |
| if not image_path: |
| print("Please enter a valid path.\n") |
| continue |
| try: |
| result = predict_plant_disease(image_path) |
| for label, confidence in result.items(): |
| print(f"Label: {label}, Confidence: {confidence:.4f}\n") |
| except Exception as e: |
| print(f"Error processing image: {e}\n") |
| except KeyboardInterrupt: |
| print("\n\nExiting...") |
|
|
|
|
|
|