import streamlit as st import numpy as np import time import PIL import PIL.Image as Image from utils import make_pred_outside_india from utils import getmodel_outside_india from utils import getmodel_india from utils import load_prepare_img from utils import food_nofood_pred import sys from RecipeData import fetchRecipeData IMG_SIZE = (224, 224) model_V2 = 'efficientnet_b0.pt' model_V1 = 'indian_efficientnet_b0.pt' @st.cache() def model_prediction(model_path, img_file, rescale,selected_location): input_img, device = load_prepare_img(img_file) if(selected_location=='Outside India'): model = getmodel_outside_india(model_path) prediction = make_pred_outside_india(input_img, model, device, selected_location) elif(selected_location=='India'): model = getmodel_india(model_path) prediction = make_pred_outside_india(input_img, model, device, selected_location) print(prediction) sorceCode, recipe_data = fetchRecipeData(prediction) return prediction, sorceCode, recipe_data def main(): st.set_page_config( page_title="SeeFood", page_icon="🍔 Know Your Receipe", layout="wide", initial_sidebar_state="expanded" ) st.title('SeeFood🍔') st.write('Upload a food image and get the recipe for that food and other details of that food') col1, col2 = st.columns(2) with col1: # image uploading button uploaded_file = st.file_uploader("Choose a file") selected_location = st.selectbox('Select loaction',('India', 'Outside India'), index=1) if uploaded_file is not None: display_img = uploaded_file.read() uploaded_img = Image.open(uploaded_file) col2.image(display_img, width=500) predict = st.button('Get Recipe!') if predict: if uploaded_file is not None: with st.spinner('getting image type'): img_type=food_nofood_pred(uploaded_img) print(img_type) if(img_type=='food'): with st.spinner('Please Wait 👩‍🍳'): # setting model and rescalling if selected_location == 'India': pred_model = model_V1 pred_rescale = True if selected_location == 'Outside India': pred_model = model_V2 pred_rescale =True # makeing prediction and fetching food recipe form api food, source_code, recipe_data = model_prediction(pred_model, uploaded_img, pred_rescale,selected_location) # asssigning caleoric breakdown data percent_Protein = recipe_data['percentProtein'] percent_fat = recipe_data['percentFat'] percent_carbs = recipe_data['percentCarbs'] # food name message col1.success(f"It's an {food}") if source_code == 200: # desplay food recipe st.header(recipe_data['title']+" Recipe") col3, col4 = st.columns(2) with col3: # Ingridents of recipie st.subheader('Ingredients') # st.info(recipe_data['ingridents']) for i in recipe_data['ingridents']: st.info(f"{i}") # Inctuction for recipe with col4: st.subheader('Instructions') st.info(recipe_data['instructions']) # st.subheader('Caloric Breakdown') ''' ## Caloric Breakdown ''' st.success(f''' * Protien: {percent_Protein}% * Fat: {percent_fat}% * Carbohydrates: {percent_carbs}% ''') else: st.error('Something went wrong please try again :(') elif(img_type=='not food'): # Ingridents of recipie st.warning('This is not food image Please try again!!') else: st.warning('Please Upload Image') if __name__=='__main__': main()