Spaces:
Runtime error
Runtime error
import numpy as np | |
import tensorflow as tf | |
from flask import Flask, request, jsonify, make_response | |
from PIL import Image | |
import io | |
app = Flask(__name__) | |
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'] | |
from tensorflow.keras.models import load_model | |
# Load the model without loading the weights | |
model = load_model('model.h5', compile=False) | |
for layer in model.layers: | |
if isinstance(layer, tf.keras.layers.BatchNormalization): | |
# Modify the configuration of BatchNormalization layer | |
config = layer.get_config() | |
config['axis'] = 3 # Ensure axis is set correctly as an integer | |
# Update the layer with the modified configuration | |
new_layer = tf.keras.layers.BatchNormalization.from_config(config) | |
# Replace the old layer with the updated one | |
model.layers[model.layers.index(layer)] = new_layer | |
model.save('modified_model.h5') | |
# custom_objects = {'BatchNormalization': tf.keras.layers.BatchNormalization} | |
loaded_model = load_model('modified_model.h5') | |
# Load the h5 model | |
# model = tf.keras.models.load_model("model.h5") | |
# Preprocess the image | |
def preprocess_image(image, target_size): | |
image = image.convert('RGB') | |
image = image.resize(target_size) | |
image = np.array(image, dtype=np.float32) | |
image = np.expand_dims(image, axis=0) | |
image = image / 255.0 # Normalize if required | |
return image | |
def after_request(response): | |
response.headers.add('Access-Control-Allow-Origin', '*') | |
response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization') | |
response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS') | |
return response | |
def predict(): | |
if 'file' not in request.files: | |
return jsonify({"error": "No file part in the request"}), 400 | |
file = request.files['file'] | |
if file.filename == '': | |
return jsonify({"error": "No file selected for uploading"}), 400 | |
if file: | |
# Read the image | |
image = Image.open(io.BytesIO(file.read())) | |
# Preprocess the image | |
target_size = (224, 224) | |
image = preprocess_image(image, target_size) | |
# Make prediction | |
predictions = loaded_model.predict(image) | |
predicted_class = np.argmax(predictions, axis=-1)[0] | |
confidence = np.max(predictions, axis=-1)[0] | |
response = jsonify({ | |
"predicted_class": classes[int(predicted_class)], | |
"confidence": float(confidence) | |
}) | |
response.headers.add('Access-Control-Allow-Origin', '*') | |
return response | |
return jsonify({"error": "An error occurred during prediction"}), 500 | |
#if __name__ == '__main__': | |
# app.run(debug=True) | |