foodreceipe / app.py
Tejasn's picture
commit
da42969
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()