SmartPlate / src /predict.py
Aishrica's picture
initial commit
50ba6d4
Raw
History Blame Contribute Delete
1.13 kB
import torch
from .nutrition import get_nutrition
def predict_top_k(image, processor, model, calorie_db: dict, top_k: int = 3) -> list[dict]:
"""Run image classification and return top-k predictions with nutrition metadata."""
inputs = processor(images=image, return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
probs = torch.nn.functional.softmax(outputs.logits, dim=1)[0]
top = probs.topk(top_k)
results = []
for idx, score in zip(top.indices.tolist(), top.values.tolist()):
raw_label = model.config.id2label[idx]
nutrition = get_nutrition(raw_label, calorie_db)
results.append(
{
"label": raw_label.replace("_", " ").title(),
"raw_label": raw_label,
"confidence": round(score * 100, 1),
"category": nutrition["category"],
"calories_per_100g": nutrition["calories_per_100g"],
"serving_g": nutrition["serving_g"],
"calories_per_serving": nutrition["calories_per_serving"],
}
)
return results