How BiteCal's AI estimates calories from a single photo
A behind-the-scenes look at the computer vision pipeline that turns your plate into accurate macro counts in under three seconds.
Tracking calories has always been a battle between accuracy and friction. Databases like USDA give you precision but demand that you weigh every ingredient. Photo apps are fast but famously guess wrong on portions. We built BiteCal to collapse that tradeoff. Here's how.
The problem with manual logging
The average MyFitnessPal user logs 42% fewer meals after week three. The drop-off isn't about willpower — it's about friction. Typing “2 tbsp olive oil” five times a day costs you minutes, and minutes compound into abandonment.
We spent six months shadowing nutrition coaches in Bengaluru and Mumbai and watched the same pattern repeat: users either overestimated portions out of guilt or underestimated them out of laziness. The food log became fiction.
Our vision pipeline
BiteCal uses a three-stage pipeline. First, a detector splits your plate into discrete food regions. Second, a classifier identifies each region against a 18,000-item taxonomy biased toward South Asian cuisine. Third, a portion model uses plate geometry to estimate grams.
photo -> detector -> [roti, dal, sabzi]
-> classifier -> [whole-wheat roti, moong dal tadka, bhindi masala]
-> portioner -> { roti: 60g, dal: 180g, sabzi: 120g }
-> macros -> 412 kcal | 15g P | 58g C | 12g FWhy we built our own classifier
General-purpose food models trained on Western datasets get dal wrong 40% of the time. We collected 1.2M labeled photos of Indian meals to close that gap. The result: 94% top-1 accuracy on our benchmark, up from 67% for off-the-shelf models.
Portion size estimation
Portion estimation is the hardest part. A single roti can be 30g or 80g depending on the cook. We use two signals: the known diameter of standard Indian dinnerware (a thali is 26-28cm, a katori is 8-10cm) and depth cues from the phone's dual camera when available.
Accuracy and limitations
On our test set of 10,000 held-out meals, BiteCal is within ±12% of ground truth calories for 88% of meals. We publish these numbers because we think honesty beats marketing. The model still struggles with mixed curries, stuffed breads, and deeply layered biryanis where key ingredients are hidden.
- Best-case accuracy: single-ingredient items (fruit, boiled eggs)
- Typical accuracy: standard thali meals, bowls, sandwiches
- Worst-case accuracy: mixed curries, stuffed parathas, biryanis
What's next
We're shipping a mid-meal correction flow next month — you'll be able to tap any item and override the portion in one gesture. Longer term, we're training a personalized model that learns your cooking style from your first 30 meals.