How accurate is AI photo calorie counting, really?
Vision models are good at naming food and mediocre at weighing it. What that means in practice, where a database helps, and why the badge on the number matters more than the number.
We build a photo-logging feature, so take this with the obvious grain of salt. We’re writing it anyway because we think you’ll trust the feature more once you know exactly where it’s strong and where it guesses.
What a photo can and cannot tell a model
Modern vision models are good at identification. Shown a typical plate, they’ll name the grilled chicken, the rice, the salad, and usually catch the feta on top. Where they struggle is quantity. A photo is a flat projection with no scale reference, so the model can’t see how deep the bowl is, how densely the rice is packed, or whether that piece of meat under the sauce weighs 120 grams or 200.
Three error sources dominate, in rough order of size:
- Portion size. The dominant error. Getting weight from pixels is estimation, not measurement, and errors here scale every macro linearly.
- Hidden ingredients. The tablespoon of oil in the pan, sugar dissolved in a sauce, butter under the eggs. Invisible to the camera — this error is systematic and almost always undercounts.
- Reference values. Even with the food named and weighed correctly, “lasagna” spans a range of recipes. Generic per-100g values are averages, not your grandmother’s.
Add these up and an unassisted photo estimate landing within ±20–30% of the truth is a good outcome. Simple plates do better, stews and casseroles do worse, and any app promising lab-grade numbers from a photo is overselling.
Why that’s more useful than it sounds
For most goals, consistency beats precision. A food log that’s 25% off but filled in every day gives you a stable weekly average and a real week-over-week trend, and the trend is what you make decisions from. A log that’s 5% accurate but abandoned by week three gives you nothing. We wrote more about that trade-off in why food tracking apps fail.
So the photo estimate’s job is to make logging cheap enough that you keep doing it, while making clear which numbers to lean on. That’s a design problem as much as a model problem.
How Moraine narrows the error — and labels what’s left
Grilled chicken with rice and a side salad
- Grilled chicken breast✓ verified1 breast (~180 g)297 kcal · P 56g · C 0g · F 7g
- White rice, cooked✓ verified1 cup (~160 g)206 kcal · P 4g · C 45g · F 0g
- Side salad with dressing~ est1 small bowl (~90 g)78 kcal · P 1g · C 5g · F 6g
Dressing amount not visible — estimated 1 tbsp.
Moraine’s photo pipeline makes four specific choices:
- Itemize, don’t total. The model has to break the plate into individual items (up to eight), each with its own portion and confidence. When an itemized estimate is wrong you can see it, because the bread is missing from the list. A single-number total hides the same mistake.
- Ground estimates in a reference database. Each item is matched against USDA FoodData Central (8,000+ foods) plus a hand-curated set of Bulgarian staples — banitsa, kiselo mlyako, kyufte, in Cyrillic or Latin spelling. When a confident name match and a parseable portion line up, the AI’s guessed macros are replaced with database per-gram values, and the item gets a ✓ verified badge. Portion size remains estimated — but the per-gram nutrition under it is no longer a guess.
- Prefer no match over a wrong match. The matcher is conservative on purpose: “hamburger” must not resolve to “pickle relish, hamburger”. Anything ambiguous keeps its ~ est badge and confidence level, so you always know which numbers came from the database and which are the model’s guess.
- Nothing logs itself. The result arrives as a confirm card. You can toggle items off and step portions from ×0.5 to ×3, because your eyes are better at “that was a big piece” than any model. Then one tap saves it. The photo itself is deleted from storage right after analysis; the journal keeps the entry, not the image.
Getting the most out of it
- Shoot from a slight angle (not top-down) so depth is visible, with everything in frame.
- Nudge portions when you know better — rich restaurant dishes usually deserve the bump up.
- For homemade mixed dishes you cook often, telling the coach in words — “my usual lentil stew, big bowl” — often beats the camera, because your description carries information the photo can’t.
Treat photo calorie counting as a labeled estimate rather than a measurement and it’s the cheapest logging there is. The full feature is described on the photo food logging page, exactly as it ships.