Spaces:
Runtime error
Runtime error
| import torch | |
| import cv2 | |
| import numpy as np | |
| from PIL import Image | |
| import google.generativeai as genai | |
| import gradio as gr | |
| from ultralytics import YOLO | |
| import os | |
| # Force PyTorch to use CPU | |
| device = torch.device("cpu") | |
| # Configure Google AI API | |
| # genai.configure(api_key='AIzaSyATgL92t9qBCe4eqFX1cSfyfkzKMooQM48') | |
| # model = genai.GenerativeModel('gemini-2.0-flash') | |
| genai.configure(api_key='AIzaSyATgL92t9qBCe4eqFX1cSfyfkzKMooQM48') | |
| generation_config = { | |
| "temperature": 1, | |
| "top_p": 0.95, | |
| "top_k": 40, | |
| "max_output_tokens": 8192, | |
| "response_mime_type": "text/plain", | |
| } | |
| model = genai.GenerativeModel( | |
| model_name="gemini-1.5-flash", | |
| generation_config=generation_config, | |
| ) | |
| # Test Gemini API connection | |
| try: | |
| test_response = model.generate_content("Say Hello!") | |
| print("Test Response from Gemini:", test_response.text) | |
| except Exception as e: | |
| print("Error: Gemini API connection failed! Check API key.") | |
| print(e) | |
| exit() | |
| class FoodDetectionSystem: | |
| def __init__(self, model_path): | |
| self.model = YOLO('best.pt') # Load trained YOLOv8 model | |
| self.model.to(device) # Ensure model runs on CPU | |
| def detect_food(self, image_path): | |
| """Detect food items in the image""" | |
| results = self.model(image_path) # Run inference on image | |
| detected_items = [] | |
| for result in results: | |
| boxes = result.boxes.cpu() # Ensure bounding boxes are on CPU | |
| for box in boxes: | |
| class_id = int(box.cls[0]) | |
| conf = float(box.conf[0]) | |
| if conf > 0.5: # Confidence threshold | |
| detected_items.append(result.names[class_id]) | |
| return list(set(detected_items)) # Remove duplicates | |
| def generate_recipe(ingredients, calorie_requirement): | |
| """Generate recipe using Gemini AI""" | |
| prompt = f""" | |
| Create a healthy recipe using some or all of these ingredients: {', '.join(ingredients)}. | |
| The recipe should be approximately {calorie_requirement} calories suggest 2 recipies. | |
| Please provide: | |
| Recipi Number | |
| 1. Recipe name | |
| 2. Ingredients list with quantities | |
| 3. Step-by-step instructions | |
| 4. Approximate calorie count per serving | |
| """ | |
| response = model.generate_content(prompt) | |
| return response.text | |
| def process_image_and_generate_recipe(image, calorie_requirement): | |
| """Main function to process image and generate recipe""" | |
| try: | |
| # Save uploaded image temporarily | |
| temp_path = "temp_upload.jpg" | |
| image.save(temp_path) | |
| print("Image saved at:", temp_path) | |
| print("food detection start") | |
| # Initialize and use food detection system | |
| detector = FoodDetectionSystem('path_to_your_trained_model.pt') | |
| detected_foods = detector.detect_food(temp_path) | |
| print(detected_foods) | |
| if not detected_foods: | |
| return "No food items detected in the image. Please try another image." | |
| # Generate recipe | |
| recipe = generate_recipe(detected_foods, calorie_requirement) | |
| # Clean up | |
| os.remove(temp_path) | |
| return f"Detected Foods: {', '.join(detected_foods)}\n\nGenerated Recipe:\n{recipe}" | |
| except Exception as e: | |
| return f"An error occurred: {str(e)}" | |
| # Create Gradio interface | |
| def create_interface(): | |
| iface = gr.Interface( | |
| fn=process_image_and_generate_recipe, | |
| inputs=[ | |
| gr.Image(type="pil", label="Upload Food Image"), | |
| gr.Number(label="Desired Calorie Count", value=500) | |
| ], | |
| outputs=gr.Textbox(label="Results"), | |
| title="Food Detection and Recipe Generator", | |
| description="Upload a food image to detect ingredients and generate a recipe based on your calorie requirements." | |
| ) | |
| return iface | |
| if __name__ == "__main__": | |
| iface = create_interface() | |
| iface.launch() |