Blog Nutrition

Food photo analysis cannot tell you the energy figure

Food photo analysis cannot state an energy figure, because a photograph of a plate does not contain the information required to work one out. Every product that states one anyway is guessing and then rounding the guess to make it look like a measurement.

What a photograph actually supports

Food photo analysis supports identification of components, reasonably. Relative proportions, roughly. Preparation method, sometimes. Portion mass, poorly — this is the one that dominates the error, and it is the one a photograph is worst at.

A curry can vary by a factor of three in energy density depending on how it was made, and nothing in the image distinguishes the versions. So FoodLens returns a range, and the range is wide when it should be.

The evidence ladder

A barcode is verified. A restaurant menu item with published data is verified. A user-entered weight is strong. A photograph alone is weak. The range narrows as the evidence improves and never narrows because the interface would look better.

This produces the counter-intuitive result that a barcode-scanned ready meal is analysed with more confidence than a carefully photographed home-cooked salad, which is correct and occasionally annoying.

Meal Intelligence scores the analysis, not the food

The number at the top of a FoodLens result is not a verdict on the meal. There is no composite health score — a single number that ranks food good or bad is the shortest path to a disordered relationship with eating, and the Charter forbids it.

Meal Intelligence measures how much the system knows: evidence source, item coverage, portion certainty, preparation certainty. It answers "how well did we read this plate", and the caption saying so is fixed in code rather than left to a designer.

And never to a child

No energy figure, no macronutrient breakdown and no portion judgement is shown below 18, in any mode, under any consent. What a younger user sees is component identification, plant variety, and allergen flags — which is the genuinely useful part anyway.

The twelve dimensions, and why there is no thirteenth

A FoodLens result carries twelve independent dimensions — component identification, portion estimate, energy range, macronutrient split, plant variety, fibre, preparation method, allergen flags, evidence source, confidence, agreement between estimates, and personal relevance against what the person has told us.

What it does not carry is a thirteenth number that combines them. Every reasonable objection to that decision is about convenience, and every objection to the alternative is about what happens to somebody who starts organising their eating around a score that a piece of software invented.

The Charter forbids the composite, and the test suite asserts that no dimension named anything like a health score exists in the response type. It is the most frequently requested feature we have.

Allergens are the one place we refuse to estimate

Fourteen allergens are flagged under UK labelling rules, and a photograph can suggest the presence of most of them. It can never establish absence.

So the result has three states, not two: present, unknown, and verified-absent. The third requires a barcode or published data — it is never inferred from appearance, however confident the identification looks.

The interface says "cannot confirm" rather than showing a reassuring empty space, because an empty space reads as "no allergens" to somebody scanning quickly, and the consequence of that misreading is not a slightly worse meal.

Swaps, and the uncertainty they add

Simulating a change — swap the rice for salad, halve the sauce — is the most useful thing food photo analysis does and the easiest to get wrong. The most useful thing FoodLens does and the easiest to get wrong, because a simulated meal has all the uncertainty of the original plus the uncertainty of the substitution.

So a swap widens the range rather than narrowing it, which is the opposite of what makes a good screenshot. The comparison shown is between two ranges, and where they overlap the interface says the difference is not distinguishable rather than picking a winner.

Questions this article answers

Why does FoodLens give a range instead of a calorie number?

Because a photograph is worst at portion mass, and that error dominates. A curry can vary by a factor of three in energy density depending on how it was made, and nothing in the image distinguishes the versions.

Does FoodLens give a meal a health score?

No. There is no composite score — a single number ranking food good or bad is the shortest path to a disordered relationship with eating, and the Charter forbids it. Meal Intelligence measures how well the plate was read, not the food.

Can FoodLens tell me a meal is free of an allergen?

Only from a barcode or published data. A photograph can suggest presence but never establish absence, so a result is present, unknown, or verified-absent, and the interface says “cannot confirm” rather than showing a reassuring empty space.

Part of: Reading a meal from a photograph

informational

This article sits in the food-intelligence cluster and links up to /foodlens. Clusters are how the editorial agent decides what to write next — the thinnest one wins.

  • how accurate are calorie counting apps
  • how to eat more plants without changing your diet
  • reading a food label without the maths
  • how much salt is actually in my food
  • swapping one thing instead of changing the whole meal

Linked from

1 pages

Other pages here that point at this one. Internal links are the part of “backlinks” a site actually controls — nothing on this platform buys or exchanges the other kind.

Read next

More of the same argument.

This is written about a product you can use today.

Everything described here is running. An account is free, takes about two minutes, and the writing stays free whether or not you make one.

Free to create. 150 AI credits a month for 2 months, then AI features need a plan — everything that is not AI carries on either way. Premium is £5.99 a month and cancels in one click. Under 18 a guardian confirms before the account opens.