File size: 5,286 Bytes
d565bc8 80def48 d565bc8 e880c31 d565bc8 80def48 d565bc8 80def48 d565bc8 5fcdc39 d565bc8 80def48 d565bc8 80def48 d565bc8 80def48 d565bc8 80def48 d565bc8 80def48 d565bc8 80def48 d565bc8 80def48 5fcdc39 d565bc8 80def48 d565bc8 80def48 d565bc8 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 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 138 139 |
import streamlit as st
import numpy as np
import time
import tensorflow as tf
from utils import load_prepare_image_tf, model_pred_tf, fetch_recipe, load_prepare_image_pt, model_pred_pt
from FoodNoFood import food_not_food
from PIL import Image
import sys
sys.path.insert(1, 'Api Data')
from RecipeData import fetchRecipeData
IMG_SIZE = (224, 224)
model_V1 = 'Seefood_model_v1.tflite'
model_V2 = 'Seefood_model_V2.tflite'
ViT_model = 'ViT-101-1.pt'
@st.cache(show_spinner=False)
def model_prediction(model, img_file, rescale, model_tensor_type):
if model_tensor_type == 'TF':
img = load_prepare_image_tf(img_file, IMG_SIZE, rescale=rescale)
prediction = model_pred_tf(model, img)
sorceCode, recipe_data = fetchRecipeData(prediction)
elif model_tensor_type == 'Pt':
img = load_prepare_image_pt(img_file)
prediction = model_pred_pt(img, model)
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_model = st.selectbox('Select Model',( 'ViT Model', 'model 1', 'model 2'), index=0)
if uploaded_file is not None:
uploaded_img = uploaded_file.read()
pil_img = Image.open(uploaded_file)
col2.image(uploaded_file, width=700)
# butoon to make predictions
predict = st.button('Get Recipe!')
if predict:
with st.spinner("Analyzing Image π΅οΈββοΈ"):
food_cat = food_not_food(pil_img)
if food_cat == 'food':
if uploaded_file is not None:
with st.spinner('Please Wait π©βπ³'):
# setting model and rescalling
if selected_model in ['model 1', 'model 2']:
if selected_model == 'model 2':
pred_model = model_V2
pred_rescale = True
elif selected_model == 'model 1':
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, 'TF')
elif selected_model == 'ViT Model':
pred_model = ViT_model
pred_rescale = True
# makeing prediction and fetching food recipe form api
food, source_code, recipe_data = model_prediction(pred_model, pil_img, pred_rescale, 'Pt')
# 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 food_cat == 'not food':
with col1:
st.warning('Invalid Image Please Add Food Image π¨βπ§')
else:
st.warning('Please Upload Image')
if __name__=='__main__':
main() |