face_expresion2 / app.py
levi15's picture
Update app.py
2e14777 verified
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()