StockDetection / app.py
osamaifti's picture
Update app.py
5cc192b verified
raw
history blame contribute delete
No virus
2.95 kB
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>
"""
@app.route('/', methods=['GET', 'POST'])
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)