Este directorio contiene el motor de visión y análisis inteligente utilizado por FoodTrack-EC para detectar automáticamente platos ecuatorianos, clasificarlos, obtener su información nutricional real y generar un análisis contextual con IA.
El módulo integra cuatro componentes principales:
- YOLOv11 → detección de platos en la imagen.
- VGG16 → clasificación refinada del plato.
- RAG (CSV + búsqueda inteligente) → obtención de macros reales.
- GPT → análisis nutricional explicado en lenguaje natural.
-
models/yolo/best.pt
Modelo YOLO entrenado para detectar los 21 platos ecuatorianos. -
models/vgg/vgg16_food_ec_best_tf.h5
Clasificador basado en VGG16 para reconocer platos en recortes o imágenes directas. -
src/pipeline/api.py
Pipeline principal que une YOLO → VGG → RAG → GPT y devuelve un JSON completo. -
src/rag/
Motor RAG que usa CSV + fuzzy matching + alias para extraer macros reales. -
src/common/paths.py
Rutas internas del proyecto (modelos, datos, outputs temporales). -
data/nutrition/*.csv
Datasets nutricionales procesados utilizados por el motor RAG.
Estas son las funciones principales que deben usar los servicios REST (Django/FastAPI).
Ubicación: src/pipeline/api.py
Este pipeline procesa cualquier imagen (ruta o bytes) y devuelve un JSON listo para frontend o almacenamiento.
Procesa la imagen desde su ruta local.
Ejemplo:
from src.pipeline.api import process_image_json result = process_image_json("data/images/test8.jpg", with_rag=True)
{
"mode": "yolo+vgg",
"image": "data/images/test8.jpg",
"yolo": {
"labels": ["guatita_ecuatoriana"],
"raw": [
{
"bbox": [17, 3, 640, 640],
"conf": 0.57,
"class_name": "guatita_ecuatoriana",
"vgg_label": "guatita_ecuatoriana",
"vgg_score": 0.89
}
]
},
"rag": {
"source": "rag+gpt",
"name": "Guatita",
"macros": {
"calorias": 438,
"proteina": 28.5,
"carbohidratos": 51.82,
"grasas": 13.01,
"fibra": 2.1
},
"analysis": "1) La guatita aporta 438 calorías... etc."
}
}
Función: process_image_bytes_json(image_bytes, with_rag=True)
Ejemplo:
from src.pipeline.api import process_image_bytes_json result = process_image_bytes_json(file_bytes, with_rag=True)
Ubicación: src/yolo/index.py
Ejecutar desde terminal:
python -m src.yolo.index --image data/images/test3.jpg
Ubicación: src/vgg/vgg_classifier.py
from src.vgg.vgg_classifier import VGGClassifier
clf = VGGClassifier("models/vgg/vgg16_food_ec_best_tf.h5") clf.topk("data/images/test4.jpg", k=3)
Ubicación: src/rag/rag_integration.py
from src.rag.rag_integration import rag_analyze rag_analyze("ceviche_manabita", 0.82)
Usos principales:
- autocompletado
- nutrición para historial
- recomendaciones
- consulta directa de macros
Crear archivo .env en la raíz:
OPENAI_API_KEY=sk-...
Si no se define → el sistema funciona sin GPT, pero con RAG solamente.
pip install -r requirements.txt
Debe existir esta estructura:
models/ yolo/best.pt vgg/vgg16_food_ec_best_tf.h5
No subir modelos al repo.
Ejecutar:
python -m src.pipeline.api --image data/images/test8.jpg --with-rag
YOLO → Detección del plato
VGG → Refinamiento por recortes
RAG → Macros reales desde CSV
GPT → Explicación nutricional (opcional)