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 you might expect this article to tell you the technology is amazing. Here’s the truthful version instead, 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 genuinely 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’re structurally weak is quantity. A photo is a 2D projection with no scale reference: the model can’t see how deep the bowl is, how densely the rice is packed, or whether that’s a 120-gram or 200-gram piece of meat under the sauce.
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, “banitsa” spans a range of recipes. Generic per-100g values are averages, not your grandmother’s.
Stack these up and an unassisted photo estimate landing within ±20–30% of the truth is a good outcome — sometimes better on simple plates, worse on stews and casseroles. Any app promising lab-grade numbers from a photo is marketing at you.
Why that’s more useful than it sounds
Here’s the part diet culture gets backwards: for most goals, consistency beats precision. A food log that’s 25% off but logged every single day gives you a trustworthy trend line — your weekly average is stable, your week-over-week change is real, and the direction of the trend is what decisions are made 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.)
The photo estimate’s job is to make logging cheap enough to be constant, while staying honest enough that you know what you’re looking at. Which brings us to design.
How Moraine narrows the error — and labels what’s left
Banitsa breakfast
- Banitsa✓ verified1 piece (150 g)480 kcal · P 12g · C 45g · F 27g
- Kiselo mlyako✓ verified1 bowl (200 g)132 kcal · P 7g · C 9g · F 7g
- Honey~ est1 tbsp64 kcal · P 0g · C 17g · F 0g
Moraine’s photo pipeline makes four specific choices:
- Itemize, don’t total. The model must break the plate into individual items (up to eight), each with its own portion and confidence. Itemized estimates fail visibly — you can see it missed the bread — where single-number totals fail silently.
- 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 deliberately conservative: “hamburger” must not resolve to “pickle relish, hamburger”. Anything ambiguous keeps its ~ est badge and confidence level. The badge is the accuracy claim — we’d rather show uncertainty than fake precision.
- Nothing logs itself. The result arrives as a confirm card: toggle items off, step portions from ×0.5 to ×3 (your eyes are better at “that was a big piece” than any model), then save. And the photo 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.
Photo calorie counting is a good estimator wearing honest labels — treat it that way and it’s the cheapest logging there is. The full feature is described here, exactly as it ships.