from flask import Flask, request, jsonify, render_template from tensorflow.keras.models import load_model from tensorflow.keras.preprocessing import image from efficientnet.tfkeras import preprocess_input import numpy as np app = Flask(__name__) model = load_model('EfficientNet_ModelWeights.keras') def preprocess_and_predict(model, img_path, target_size=(224, 224)): #Load and preprocess the image img = image.load_img(img_path, target_size=target_size) img_array = image.img_to_array(img) img_array = np.expand_dims(img_array, axis=0) img_array = preprocess_input(img_array) # Make prediction prediction = model.predict(img_array) predicted_class = np.argmax(prediction) # Return the predicted class return predicted_class @app.route('/') def home(): return render_template('index.html') @app.route('/predict', methods=['POST']) def predict(): if 'file' not in request.files: return jsonify({'error': 'No file part'}) file = request.files['file'] # Save the uploaded file temporarily file_path = 'temp_image.jpg' file.save(file_path) # Make prediction predicted_class = preprocess_and_predict(model, file_path) # Return the predicted class as a response return render_template('index.html', prediction=predicted_class) if __name__ == '__main__': app.run(debug=True) import streamlit as st from tensorflow.keras.models import load_model from tensorflow.keras.preprocessing import image from efficientnet.tfkeras import preprocess_input import numpy as np # Load your machine learning model @st.cache(allow_output_mutation=True) def load_model(): return load_model('EfficientNet_ModelWeights.keras') # Prediction function def preprocess_and_predict(model, img_path, target_size=(224, 224)): # Load and preprocess the image img = image.load_img(img_path, target_size=target_size) if img is None: print("Error: Image not loaded.") return None # Converting image to array and preprocessing using EfficientNet's preprocessing img_array = image.img_to_array(img) img_array = np.expand_dims(img_array, axis=0) img_array = preprocess_input(img_array) # Predicting the class label preds = model.predict(img_array) predicted_label = np.argmax(preds[0]) reverse_expression_labels = {v: k for k, v in expression_labels.items()} # Converting the predicted label index to its corresponding expression label predicted_expression_label = reverse_expression_labels[predicted_label] return predicted_expression_label def main(): st.title('Expresso - Image Prediction') # Display the custom HTML content with open("index.html", "r", encoding="utf-8") as file: html_code = file.read() st.components.v1.html(html_code, width=700, height=800) # Load the model model = load_model() # Check if the file uploader is used if st.file_uploader is not None: uploaded_file = st.file_uploader("Upload your image", type=['jpg', 'png']) if uploaded_file is not None: # Make prediction when the "Predict" button is clicked if st.button('Predict'): # Save the uploaded file temporarily with open("temp_image.jpg", "wb") as f: f.write(uploaded_file.read()) # Make prediction predicted_class = preprocess_and_predict(model, "temp_image.jpg") # Display prediction result st.write(f'Predicted Class: {predicted_class}') if __name__ == '__main__': main()