File size: 3,819 Bytes
11641bb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import numpy as np
import time

import tensorflow as tf
from utils import load_prepare_image, model_pred, fetch_recipe

import sys
sys.path.insert(1, 'Api Data')
from RecipeData import fetchRecipeData

IMG_SIZE = (224, 224)
model_V1 = 'models/Seefood_model_v1.tflite'
model_V2 = 'models/Seefood_model_V2.tflite'

@st.cache()
def model_prediction(model, img_file, rescale):
    img = load_prepare_image(img_file, IMG_SIZE, rescale=rescale)
    prediction = model_pred(model, img)
    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_model = st.selectbox('Select Model',('model 1', 'model 2'), index=1)
        if uploaded_file is not None:
            uploaded_img = uploaded_file.read()

            col2.image(uploaded_file, width=500)

        # butoon to make predictions
        predict = st.button('Get Recipe!')

    if predict:
        if uploaded_file is not None:
            with st.spinner('Please Wait 👩‍🍳'):

                # setting model and rescalling 
                if selected_model == 'model 2':
                    pred_model = model_V2 
                    pred_rescale = True
                else:
                    pred_model = model_V1 
                    pred_rescale = False
                
                # makeing prediction and fetching food recipe form api
                food, source_code, recipe_data = model_prediction(pred_model, uploaded_img, pred_rescale)
                
                # 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 :(')
                

        else:
            st.warning('Please Upload Image')

                


if __name__=='__main__': 
    main()