import streamlit as st import pandas as pd import numpy as np from PIL import Image import os from tensorflow.keras.preprocessing.image import ImageDataGenerator from tensorflow.keras.models import load_model # Load the Models model = load_model('model.h5') img_size = (64, 64) # Define a function to preprocess the input image def preprocess_input_image(img_path): img = image.load_img(img_path, target_size=img_size) img1 = image.load_img(img_path) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) x /= 255. return x, img1 # Define batch size and image size batch_size = 256 img_size = (64, 64) # Define paths to the data folders # Define paths to the data folders script_dir = os.path.dirname(os.path.abspath(__file__)) train_path = os.path.join(script_dir, 'food', 'Train') valid_path = os.path.join(script_dir, 'food', 'Valid') test_path = os.path.join(script_dir, 'food', 'Test') # Create data generators for training, validation, and testing train_datagen = ImageDataGenerator( rescale=1./255, horizontal_flip=True ) valid_datagen = ImageDataGenerator( rescale=1./255 ) test_datagen = ImageDataGenerator( rescale=1./255 ) train_generator = train_datagen.flow_from_directory( train_path, target_size=img_size, batch_size=batch_size, class_mode='categorical' ) valid_generator = valid_datagen.flow_from_directory( valid_path, target_size=img_size, batch_size=batch_size, class_mode='categorical' ) test_generator = test_datagen.flow_from_directory( test_path, target_size=img_size, batch_size=batch_size, class_mode='categorical' ) class_names = list(train_generator.class_indices.keys()) train_classes = pd.Series(train_generator.classes) test_classes = pd.Series(test_generator.classes) valid_classes = pd.Series(valid_generator.classes) def run(): st.title('Fast Food Image Prediction') with st.form(key='form_food'): uploaded_file = st.file_uploader("Choose an image file", type=["jpg", "jpeg", "png"]) submitted = st.form_submit_button('Predict') if submitted: # Transform Inference-Set if uploaded_file is not None: # Preprocess the input image img = Image.open(uploaded_file) x = np.array(img.resize(img_size))/255. x = np.expand_dims(x, axis=0) # Make predictions on the input image preds = model.predict(x, verbose=0) pred_class = np.argmax(preds) pred_class_name = class_names[pred_class] # Display the input image and prediction result st.image(img, caption=f"Predicted Class: {pred_class_name}", use_column_width=True) if __name__ == '__main__': run()