# app.py import tensorflow as tf import numpy as np import requests import os from flask import Flask, request, render_template from PIL import Image from io import BytesIO app = Flask(__name__) # Load Food Recognition Model from TF Hub model = tf.keras.Sequential([ tf.keras.layers.Input(shape=(224, 224, 3)), hub.KerasLayer("https://tfhub.dev/google/aiy/vision/classifier/food_V1/1") ]) # Edamam API Credentials NUTRITION_API_ID = os.getenv('EDAMAM_APP_ID') NUTRITION_API_KEY = os.getenv('EDAMAM_API_KEY') def preprocess_image(image): img = Image.open(image).convert('RGB') img = img.resize((224, 224)) img_array = np.array(img) / 255.0 return np.expand_dims(img_array, axis=0) def get_nutrition_info(food_name): url = f'https://api.edamam.com/api/nutrition-data' params = { 'app_id': NUTRITION_API_ID, 'app_key': NUTRITION_API_KEY, 'ingr': food_name } response = requests.get(url, params=params) return response.json() if response.status_code == 200 else None def assess_healthiness(nutrition_data): # Simple heuristic for health assessment score = 0 if nutrition_data.get('calories', 0) < 300: score += 1 if nutrition_data.get('fat', 0) < 10: score += 1 if nutrition_data.get('sugar', 0) < 10: score += 1 return "Healthy" if score >= 2 else "Unhealthy" @app.route('/', methods=['GET', 'POST']) def index(): if request.method == 'POST': # Process image file = request.files['image'] img = preprocess_image(file) # Food recognition predictions = model.predict(img) food_class = tf.keras.applications.imagenet_utils.decode_predictions(predictions)[0][0][1] # Nutrition analysis nutrition_data = get_nutrition_info(food_class) if nutrition_data: health_status = assess_healthiness(nutrition_data) return render_template('result.html', food=food_class, status=health_status, benefits=nutrition_data.get('healthLabels', []), cautions=nutrition_data.get('cautions', [])) return render_template('index.html') if __name__ == '__main__': app.run(debug=True)

Comments

Popular posts from this blog

Home