fast_food_classification / prediction.py
andrewsunanda's picture
Update prediction.py
fe46428
raw
history blame
2.67 kB
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
main_path= '\\food'
# Define batch size and image size
batch_size = 256
img_size = (64, 64)
# Define paths to the data folders
train_path = '\\food\\Train'
valid_path = '\\food\\Valid'
test_path = '\\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()