fast_food_classification / prediction.py
andrewsunanda's picture
Update prediction.py
3ef14c9
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()