RajatMalviya's picture
Update app.py
7c29aab verified
raw
history blame
2.82 kB
from fastapi import FastAPI, File, UploadFile
import google.generativeai as genai
from PIL import Image
import io
import json
from google.colab import userdata
app = FastAPI()
# Set your API key
genai.configure(api_key=userdata.get('GOOGLE_API_KEY'))
@app.get("/")
def read_root():
return {"message": "FastAPI is running on Render!"}
@app.head("/")
async def root_head():
return {} # Empty response for HEAD requests
@app.post("/analyze")
async def analyze_food_image(file: UploadFile = File(...)):
"""Analyzes food items in the image using Gemini 1.5 Flash"""
image_bytes = await file.read()
img = Image.open(io.BytesIO(image_bytes))
model = genai.GenerativeModel("gemini-1.5-flash") # Best for real-time image processing
# Updated prompt for structured JSON response
prompt = """
Identify all food items in the given image and determine their approximate quantity. Then, provide nutritional information
in valid JSON format following this structure:
```json
{
"detected_food_items": [
{
"food_item": "Detected food name",
"quantity": "Approximate quantity (e.g., 1 bowl, 2 slices, half a chapati)",
"nutritional_info": {
"calories_kcal": value,
"protein_g": value,
"fiber_g": value,
"vitamins": {
"Vitamin A_mcg": value,
"Vitamin C_mg": value,
"Vitamin D_mcg": value,
"Vitamin E_mg": value,
"Vitamin K_mcg": value,
"Vitamin B1_mg": value,
"Vitamin B2_mg": value,
"Vitamin B3_mg": value,
"Vitamin B6_mg": value,
"Vitamin B12_mcg": value,
"Folate_mcg": value
}
},
"health_benefits": [
"Brief description of health benefit 1",
"Brief description of health benefit 2"
]
}
]
}
```
- **Ensure the response is valid JSON** inside triple backticks (```json ... ```).
- **Include accurate nutritional values based on the given quantity.**
- **If exact values are unavailable, provide estimated values.**
- **Ensure proper formatting and completeness of data.**
"""
# Get response from API
response = model.generate_content([prompt, img])
# Extract JSON response
try:
json_response = response.text.strip("```json").strip("```") # Remove markdown formatting
return json.loads(json_response) # Convert to Python dictionary
except json.JSONDecodeError:
return {"error": "Invalid response format from AI model"}
import os
if __name__ == "__main__":
port = int(os.getenv("PORT", 8000)) # Render assigns PORT dynamically
uvicorn.run(app, host="0.0.0.0", port=port)