File size: 4,744 Bytes
b5ab758
 
 
 
 
 
 
 
 
9df472f
b5ab758
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9df472f
b5ab758
9df472f
b5ab758
9df472f
b5ab758
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9df472f
 
 
b5ab758
9df472f
b5ab758
9df472f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b5ab758
9df472f
 
 
 
b5ab758
 
9df472f
b5ab758
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
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="🍔",
        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()