Spaces:
Runtime error
Runtime error
| from flask import Flask, render_template, request | |
| import cv2 | |
| import numpy as np | |
| from tensorflow.keras.models import load_model | |
| app = Flask(__name__) | |
| class ShelfClassifier: | |
| def __init__(self, model_path): | |
| self.model = load_model(model_path) | |
| def classify_image(self, image): | |
| image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) | |
| resized_image = cv2.resize(image_rgb, (224, 224)) | |
| resized_image = resized_image.astype('float32') / 255 | |
| resized_image = np.expand_dims(resized_image, axis=0) | |
| prediction = self.model.predict(resized_image) | |
| class_index = np.argmax(prediction) | |
| class_label = "Disorganized or Empty" if class_index == 1 else "Organized" | |
| return class_label | |
| index_html = """ | |
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>Shelf Classifier</title> | |
| </head> | |
| <body> | |
| <h1>Shelf Classifier</h1> | |
| <form method="POST" enctype="multipart/form-data"> | |
| <input type="file" name="file"> | |
| <input type="submit" value="Upload"> | |
| </form> | |
| {% if message %} | |
| <p>{{ message }}</p> | |
| {% endif %} | |
| </body> | |
| </html> | |
| """ | |
| result_html = """ | |
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>Classification Result</title> | |
| </head> | |
| <body> | |
| <h1>Classification Result</h1> | |
| <p>{{ class_label }}</p> | |
| <img src="result.jpg" alt="Result Image"> | |
| </body> | |
| </html> | |
| """ | |
| def upload_image(): | |
| if request.method == 'POST': | |
| # Check if the post request has the file part | |
| if 'file' not in request.files: | |
| return render_template_string(index_html, message='No file part') | |
| file = request.files['file'] | |
| # If user does not select file, browser also | |
| # submit an empty part without filename | |
| if file.filename == '': | |
| return render_template_string(index_html, message='No selected file') | |
| if file: | |
| # Read uploaded image | |
| image = cv2.imdecode(np.fromstring(file.read(), np.uint8), cv2.IMREAD_COLOR) | |
| # Initialize ShelfClassifier with the model | |
| classifier = ShelfClassifier('saved_model.h5') | |
| # Perform classification | |
| class_label = classifier.classify_image(image) | |
| # Draw bounding box if shelf is disorganized or empty | |
| if class_label == "Disorganized or Empty": | |
| # Draw red rectangle | |
| cv2.rectangle(image, (0, 0), (image.shape[1], image.shape[0]), (255, 0, 0), 2) | |
| # Save image with bounding box | |
| cv2.imwrite('result.jpg', image) | |
| return render_template_string(result_html, class_label=class_label) | |
| return render_template_string(index_html) | |
| if __name__ == '__main__': | |
| app.run(debug=True) | |