import gradio as gr import wget from transformers import pipeline import requests import torch # Nutritionix API setup api_url = "https://trackapi.nutritionix.com/v2/natural/nutrients" # App ID, App Key provided by Nutritionix headers = { "x-app-id": "dd773727", "x-app-key": "86f278fc4c7f276c386f280848acf3e6", } # Load the Models device = 0 if torch.cuda.is_available() else -1 visual_quest_ans = pipeline("visual-question-answering", model="Salesforce/blip-vqa-base", device=device) translation_eng_to_ar = pipeline("translation_en_to_ar", model="marefa-nlp/marefa-mt-en-ar", device=device) def food_recognizer(image): result = visual_quest_ans(image=image, question="What is the food or the drink in the image?") return result[0]['answer'] def nutrition_info(food): data = {"query": food} response = requests.post(api_url, headers=headers, json=data) return response.json() def translator(text): text = text.strip() result = translation_eng_to_ar(text) return result[0]['translation_text'] def process_food_result(image, language): food_item = food_recognizer(image) nutritions_info = nutrition_info(food_item) food_info = nutritions_info['foods'][0] calories = food_info['nf_calories'] protein = food_info['nf_protein'] carbs = food_info['nf_total_carbohydrate'] fat = food_info['nf_total_fat'] sugars = food_info.get('nf_sugars', 'Unknown') fiber = food_info.get('nf_dietary_fiber', 'Unknown') sodium = food_info.get('nf_sodium', 'Unknown') serving_size = food_info.get('serving_weight_grams', 'Unknown') liquid_keywords = ['juice', 'water', 'milk', 'soda', 'tea', 'coffee'] is_liquid = any(keyword in food_item.lower() for keyword in liquid_keywords) if is_liquid and serving_size != 'Unknown': serving_size_text_en = f"{serving_size} mL" serving_size_text_ar = f"{serving_size} مل" else: serving_size_text_en = f"{serving_size} grams" serving_size_text_ar = f"{serving_size} جرام" if language == "Arabic": food_item_ar = translator(food_item) return f"""