Spaces:
Runtime error
Runtime error
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' | |
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() |