| 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() |