| from flask import Flask, request, jsonify, render_template
|
| from flask_cors import CORS
|
| import onnxruntime as rt
|
| import numpy as np
|
| import cv2
|
| import io
|
| from PIL import Image
|
|
|
| app = Flask(__name__)
|
|
|
|
|
| CORS(app)
|
|
|
|
|
| MODEL_PATH = "coffee_model.onnx"
|
| session = rt.InferenceSession(MODEL_PATH)
|
|
|
| @app.route("/", methods=["GET"])
|
| def home():
|
| context = jsonify({"message": "ONNX Model API is running!"})
|
| return render_template("home.html")
|
|
|
| @app.route("/predict", methods=["POST"])
|
| def predict():
|
| try:
|
| if 'file' not in request.files:
|
| return jsonify({"error": "No file uploaded"}), 400
|
|
|
| file = request.files['file']
|
| image = Image.open(io.BytesIO(file.read()))
|
| image = np.array(image)
|
| image = cv2.resize(image, (224, 224))
|
| image = image.astype(np.float32) / 255.0
|
| image = np.expand_dims(image, axis=0)
|
|
|
|
|
| input_name = session.get_inputs()[0].name
|
|
|
|
|
| result = session.run(None, {input_name: image})
|
| prediction = np.argmax(result[0])
|
| confidence = np.max(result[0])
|
|
|
|
|
| classes = ['Health leaves', 'leaf rust', 'phoma']
|
| predicted_class = classes[prediction]
|
|
|
| return jsonify({"class": predicted_class, "confidence": float(confidence)})
|
|
|
| except Exception as e:
|
| print(f"Error: {e}")
|
| return jsonify({"error": str(e)}), 500
|
|
|
| if __name__ == "__main__":
|
| app.run(host="0.0.0.0", port=5000, debug=True)
|
|
|