In short: a photograph answers “what is on the plate” well and “how many calories is that” badly. From a single picture, strong models are off by 20–36% of a dish’s calories on average, and consumer apps miss 27–38% on average. Accuracy is raised with a depth sensor, an ingredient list and manual corrections. Apart from the sensor, all of that is typed by a person, the very work the photo was taken to avoid.
Below: what a photo sees, what is missing from it, 18 sources with an error figure on one chart, how accuracy is raised, and open data for anyone who wants to check.
What the photo sees#
Food recognition works reasonably well, and that part of the promise is honest. In a 2025 study the system named 189 of 220 dishes correctly Sahoo 2025. In a four-app comparison, MyFitnessPal recognized 97% of dish components. From a picture a model can tell:
- what the food is: rice, salad, bread, chicken, soup
- how many pieces: one egg or two, one patty or two
- how much of the plate the food covers, its color and surface
- the plate, bowl and cutlery next to it
That is enough to shrink a database search from thousands of entries to a few. Calories need more.
What is missing from the picture#
The recipe#
The same curry is made with tomato, coconut milk, cream or ghee. A soup is broth-based or finished with cream. The picture shows the finished surface, not what it was made from.
Fat content and cut#
Lean and fatty ground meat look the same after cooking. So do different cuts of pork or chicken, especially when the rendered fat stayed in the dish. The hidden calories guide has a verified USDA example: raw 95% lean beef and 80/20 ground beef differ by 111 kcal per 100 g.
Oil#
Oil coats vegetables, sits in breading, soaks into rice and sauce. A glossy surface does not say how many grams went in or how much stayed in the pan. In the NIH test all four apps missed about 30 g of fat per meal.
Ingredients inside and underneath#
Sugar in a glaze, butter in rice, cheese inside a patty, a second layer under the sauce. None of it is in the picture at all.
Portion in grams#
The picture shows how much of the plate the food covers, not what it weighs. Plate size, camera distance, angle and the height of the pile change the estimate several times over, and food hides food. In Fridolfsson’s test, underestimation grew with portion size.
The sum is simple: calories come from the name, the portion and the recipe. A photo reliably supplies only the first. And what it misses, oil, fat grade, cheese, is mostly fat and protein, so the composition comes out worse than the calorie total.
What accuracy tests found#
We collected 164 records on photo calorie accuracy from 2015 to September 2026: papers, preprints, newsroom and personal tests, developer claims. 18 of them carry a number that fits on one scale; they count error in different ways, so this is not a ranking. The rest are in the open data, with the reason.
One row per source. Open a row to see what was measured and where it was published.
● External tests
NIH · four apps · 2026102 meals · conference abstract 27.5–37.6% →
Bias, from average underestimation. Mean reference 918 kcal per meal. Average underestimation: MyFitnessPal −327, Lose It! −333, Cal AI −345, Appediet −252 kcal. Divided by 918 that is 35.6%, 36.3%, 37.6% and 27.5% of a meal short on average; single dishes scatter around these figures in both directions, so the typical per-dish miss is not the same number.
Conference abstract, not yet a full paper. NIH funding. The 102-meal analysis is separate from the further meals mentioned in press coverage.
Tanabe · six models · 2025Nutrition5k photos · 6 models 39.8–129.5%
Average error per dish. Six models tested on the Nutrition5k photos, with and without fine-tuning: 129.5, 92.8, 55.7, 46.7, 41.5 and 39.8% average error per dish (MAPE).
Figures quoted from earlier papers are not counted as new tests. Volume-injection experiments are a different protocol and are left out.
Coburn · eight models · 2025806 images · scale markers 23.3–86.3%
Average error per dish. Eight models on 806 photos that contain a scale marker: 23.3–86.3% average error per dish (MAPE) in the baseline protocol.
Preprint. The scale marker in every photo helps with portion size. Prompts enriched with metadata are a separate condition. Model averages, not per-meal limits.
Fridolfsson · three models · 202552 food photographs 35.8–64.2%
Average error per dish. GPT-4o and Claude 3.5 Sonnet: 35.8% average error per dish (MAPE) each; Gemini 1.5 Pro: 64.2%. Underestimation grew with portion size.
Published 2025, tested September 2024. Controlled photos with cutlery and weighed portions.
Rodríguez · ChatGPT-5 · 2025195 dishes · photo / photo + ingredients 6.9–35.0%
Average error per dish. Same 195 dishes, different input. Photo only: 20.1–35% across three image sets, 30.5% overall. Photo plus a detailed ingredient list: 6.9–18.6%, 13.9% overall. Average error per dish (MAPE).
One study, different inputs. The 6.9% applies to 25 home-cooked dishes with a detailed ingredient list. Text-only runs are left out.
Li · four apps · 20246 mixed dishes · 4 apps 15.4–59.3%
Error of the six-dish total. Our calculation from the whole-dish rows of Table 10, six dishes all four apps handled: MyFitnessPal 59.3%, HealthifyMe 39.6%, Foodvisor 26.6%, Fastic 15.4% of the total reference calories (WAPE).
Small shared subset; milk tea left out because Foodvisor gave no result. Dietitian food records are the reference. No funding or conflicts declared.
Serra · SNAQ · 202330 women · seven-day diary ≥14.8%
Shortfall of the total, from average daily underestimation. App diary averaged 1905.5 kcal/day against a measured expenditure of 2235.2 kcal/day: the diary total falls 14.8% short. The paper's own −12.8% is the mean of individual percentages.
Academic funding; SNAQ was paid to build the research version. Expenditure as the intake reference assumes stable weight; skipped entries count against the app.
Herzig · SNAQ · 202048 meals · depth sensor + list 12.7%
Average error per meal. 12.7% average error per meal (MAPE), 41.2 kcal on average. Depth-sensing iPhone, food chosen from a predefined list, segmentation could be corrected by hand.
Academic study; the authors thank SNAQ's developers and declare no conflicts. This is assisted logging, not a bare photo.
Keenoa · 202072 participants · daily diary 15.6–19.5% →
Shortfall of the total, from average daily underestimation. Reference diary 2006.3 kcal/day; the app's own entries 1615.3; after a dietitian's review 1693. The totals fall 19.5% and 15.6% short.
The reference is another diary, itself imperfect. The result includes logging behaviour and human review, not image estimation alone.
◆ Developer-involved tests, reviews and claims
Bayern 1 · 2026One week · formula undisclosed 6.0–>20.0%
Weekly deviation, formula undisclosed. Foodvisor was reported about 6% off across a week; deviations above 20% were reported for the others. The upper end is unknown.
Newsroom test of four apps without a full reference log or error formula. A weekly total can hide opposite errors on single meals. Page date 3 June 2026; metadata 12 June.
Tom’s Guide · Gemini · 20263 meals · calculated bounds 5.3–27.2%
Error of the three-meal total, calculated bounds. References 175 / 295 / 328 kcal; Gemini answered with ranges 115–175 / 255–305 / 370–445. Taking the nearest and the farthest ends gives 5.3–27.2% of the total.
Photo plus a text description. Personal reference log, three meals. Bounds from answer ranges, not a measured average.
SnapCalorie FAQ · 2025Archived 2025 · unchanged in 2026 ≈15.0%
Company claim, formula undisclosed. The FAQ says about 15% mean caloric error. Same wording in the archive of 21 January 2025 and on the live page on 5 September 2026.
Date is when the archive captured the claim, not a test date. Nutrition5k is cited, but the formula, app version and any independent check are not.
Kakao & Karotte · Lifesum · 20257 meals · personal test 34.6%
Error of the seven-meal total. Seven meals, all overestimated: 660 kcal too many out of 1905 reference, 34.6% of the total (WAPE); 41.9% average per meal.
The site's printed total of 1406 kcal does not match its own rows, which sum to 1905; we use the rows. Affiliate links on the page.
Passio-based research app · 202526 participants · daily diary ≥20.1%
Shortfall of the total, from average daily underestimation. Average underestimation 1814 kJ/day against a measured expenditure of 9017 kJ/day: the total falls 20.1% short. The paper's 15% is the mean of individual ratios.
The academic authors built the app on Passio's engine; public and charitable grants paid for it, Passio supplied the algorithm in kind. Authors' own validation of their workflow.
FeastGood · 20241 meal · totals for 3 of 6 apps 0.7–11.8%
Error on one meal. One 440-kcal meal; three apps gave a total: 437, 470 and 388 kcal, that is 0.7%, 6.8% and 11.8% off. Three other apps gave no comparable total.
Default portion options were used for MyFitnessPal. Affiliate links disclosed. One successful meal says little about typical accuracy.
SnapCalorie · 2023Developer statement · depth + review <20.0%
Company claim, formula undisclosed. A founder quoted by TechCrunch on 26 June 2023: average caloric error below 20%. The service then used depth sensing and human reviewers.
No formula and no independent check for the quoted figure. The later 15% fits inside this earlier 'below 20%'.
CALO mama · 2022120 meals · automatic / corrected 1.6–10.1% →
Bias, from average difference. Mean reference 562 kcal. Automatic estimate averaged 505 kcal (−57), after manual correction 571 kcal (+9). That is 10.1% and 1.6% off on average; the measured per-meal error is not published.
Paid for by the developer, Link & Communication; two authors were its employees, another had a research advisory contract. Peer-reviewed, not independent. Japanese CALO mama is not Calorie Mama.
Nutrition5k · 2021Photo / depth / known weight 9.5–26.1%
Average error per dish. Average calorie error per dish, normalised: photo only 26.1%; with depth 18.8%; with volume 16.5%; with the true dish weight supplied 9.5%.
Google researchers evaluating their own models on their own dataset. The 9.5% needs the true weight and is not photo-only.
→ bias of the total: how far the sum of all estimates fell short of the true sum; single dishes scatter around it in both directions. For Bayern 1 the upper end is unknown. ◇ company claim. Dashed line: bounds calculated from answer ranges.
Colour says who did the measuring, not how good the result is. The rows count error in different ways (average per dish, error of a total, bias from average underestimation, a claim), on different meals, so the axis is not a ranking and the rows cannot be averaged into one “market accuracy.”
What the chart shows.
From a single photo, the error runs to tens of percent. Strong models, GPT-4o, Claude and ChatGPT-5, are off by 20–36% of a dish’s calories on average. Weak ones by 64–130%.
Consumer apps underestimate. In the NIH test on 102 meals, MyFitnessPal, Lose It!, Cal AI and Appediet missed 252–345 kcal of 918 on average, that is 27–38% of the meal. This is the average shortfall; on single dishes the error can be larger. In Li’s comparison on the same six dishes, four apps were off by 15–59% of the total.
The small figures came with help. Herzig’s 12.7% used a depth sensor and a food chosen from a fixed list. Nutrition5k’s 9.5% required telling the model the exact weight of the dish. CALO mama’s 1.6% is the average bias after manual corrections, in a study paid for by the developer; the average per-meal error was not published.
Companies do not publish an error figure. In the material we checked, Foodvisor, MyFitnessPal, Lose It!, YAZIO, Lifesum, Calorie Mama and BiteSnap never stated a calorie error, only a recognition rate or a database size. Cal AI wrote “90% accurate,” later “80%,” without saying what that measures. SnapCalorie: “below 20%” in 2023, “about 15%” since 2025, meal set and formula undisclosed.
How accuracy is raised#
Every good result on the chart came from one of four things.
- A depth sensor or a second angle. On Nutrition5k the error falls from 26% with one photo to 19% with depth, and to 9.5% when the model is given the dish’s weight. Herzig reached 12.7% on an iPhone with a depth sensor.
- An ingredient list. ChatGPT-5 on the same 195 dishes: 30.5% from the photo alone, 13.9% with a detailed description of the ingredients.
- A fixed menu. In Herzig’s study the user picked the food from a list and the model only estimated volume. Hospital and cafeteria setups work the same way.
- Manual corrections. CALO mama’s average bias dropped from 10% to 1.6% after the user corrected the entry. At Keenoa, a dietitian’s review cut the shortfall from 19.5% to 15.6%.
Each of these adds information that was not in the pixels. None of them makes the photo itself more accurate.
The price of accuracy#
The inputs work, and apart from the depth sensor every one of them is typed by a person. Sahoo’s study shows the gap: the system recognized 86% of dishes, and 68% were reported correctly after corrections Sahoo 2025. To bring a photo result to the truth, the user still decides:
- whether it is the right dish
- what is missing and what is extra
- how it was cooked
- whether oil, sauce and sugar were counted
- how much was eaten
That is the same input as typing it by hand, only after working out what the model guessed. A single correction factor does not fix it: in one photo the system added dressing, in the next it missed absorbed oil, in a third it got the portion right and the recipe wrong. “My camera usually runs 15% low” fails because different data is missing each time.
A photo shortens the search for the dish; checking the recipe and the portion still falls to you. That check is the real input, and it is easier to do once, in a template of a familiar meal, than after every picture. A systematic review of 52 studies reached the same place: the methods are too different for one accuracy figure, and the tools are not ready for use on their own Shonkoff 2023.
How Calk works#
Calk starts with the dish, not a picture of it. A meal template already holds the things a photo cannot see and that usually change:
- protein or main ingredient
- cooking method
- oil, sauce, sugar, salt and toppings
- portion
Save the meal to favorites with ♥. Next time, open it in the food tab and tap “Eat,” two actions. If one detail changed, change only that and the dish recalculates. The whole recipe is visible and editable, the same choices always give the same number, and the ingredient that changed is named. There is nothing to reverse-engineer before you can edit it.
See how meal templates work and the comparison of calorie-tracking methods.
Data for journalists and researchers#
Everything this article stands on is open: CSV and JSON, 164 records, reviewed 5 September 2026.
- 18 records on the chart, developer claims and personal tests included, each with the figure as printed in the source, our recalculation formula, the test conditions and disclosed developer ties.
- 71 verified records without a chart point and the reason: recognition only, no reference, kcal without a mean meal, a reprint of another study, inconsistent tables.
- 75 rejected candidates with the reason, including a network of 11 sites that pass off an invented “study” with a non-existent DOI as an independent validation.
For every record: who measured, who published, publication and test dates, product version, sample, reference method, original metric, the quote or table it came from, and the reprint chain. The data is free to reuse and quote with attribution to Calk and a link to this article. If you know a test that is missing, or find an error in a row, write to support@calk.me with “press” in the subject; we will check and update the data where needed.


