Spaces:
Sleeping
Sleeping
from flask import Flask, request, jsonify,render_template | |
from keras.models import load_model | |
from PIL import Image, ImageOps | |
import numpy as np | |
from flask_cors import CORS | |
app = Flask(__name__) | |
CORS(app,origin=['*','http://localhost:3000'],allow_headers=['Content-Type','Authorization','Access-Control-Allow-Credentials','Access-Control-Allow-Origin','Access-Control-Allow-Headers','x-xsrf-token','Access-Control-Allow-Methods','Access-Control-Allow-Headers','Access-Control-Allow-Headers','Access-Control-Allow-Origin','Access-Control-Allow-Methods','Authorization','X-Requested-With','Access-Control-Request-Headers','Access-Control-Request-Method']) | |
port = 4000 | |
# Load the model | |
model = load_model("keras_model.h5", compile=False) | |
# Load the labels | |
class_names = [line.strip() for line in open("labels.txt", "r").readlines()] | |
# Confidence threshold for predictions | |
confidence_threshold = 0.7 | |
def hello(): | |
return render_template('index.html') | |
def predict(): | |
if 'file' not in request.files: | |
return jsonify({'error': 'No file provided'}), 400 | |
file = request.files['file'] | |
if file.filename == '': | |
return jsonify({'error': 'No selected file'}), 400 | |
if file: | |
# Process the image file | |
image = Image.open(file.stream).convert("RGB") | |
size = (224, 224) | |
image = ImageOps.fit(image, size, Image.Resampling.LANCZOS) | |
# Convert image to numpy array and normalize | |
image_array = np.asarray(image) | |
normalized_image_array = (image_array.astype(np.float32) / 127.5) - 1 | |
# Prepare the image for prediction | |
data = np.ndarray(shape=(1, 224, 224, 3), dtype=np.float32) | |
data[0] = normalized_image_array | |
# Predict | |
prediction = model.predict(data) | |
max_confidence = np.max(prediction) | |
if max_confidence >= confidence_threshold: | |
index = np.argmax(prediction) | |
class_name = class_names[index] | |
confidence_score = float(prediction[0][index]) | |
else: | |
# Classify as "other" if confidence is below threshold | |
class_name = "Other" | |
confidence_score = float(max_confidence) | |
# Return the result | |
response = jsonify({'class': class_name, 'confidence_score': confidence_score}) | |
return response | |
if __name__ == '__main__': | |
app.run(debug=True, port=port) | |