|
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 |
|
|
|
|
|
|
|
|
|
model = load_model('model.h5') |
|
img_size = (64, 64) |
|
|
|
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 |
|
|
|
|
|
|
|
batch_size = 256 |
|
img_size = (64, 64) |
|
|
|
|
|
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') |
|
|
|
|
|
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: |
|
|
|
if uploaded_file is not None: |
|
|
|
img = Image.open(uploaded_file) |
|
x = np.array(img.resize(img_size))/255. |
|
x = np.expand_dims(x, axis=0) |
|
|
|
|
|
preds = model.predict(x, verbose=0) |
|
pred_class = np.argmax(preds) |
|
pred_class_name = class_names[pred_class] |
|
|
|
|
|
st.image(img, caption=f"Predicted Class: {pred_class_name}", use_column_width=True) |
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
run() |