Glide · Science

Can AI count carbs?

Glide's estimator, measured — evaluation runs from June 2026 · page updated 28 July 2026

Every insulin dose starts with a guess: how many grams of carbohydrate are in this meal? People with type 1 diabetes make that guess at every meal, every day, forever — and it cuts both ways. Count too low and glucose spikes; count too high and the extra insulin causes a low.

Glide's answer takes about four seconds at the table: photograph the plate, and AI proposes a carb count and a description — which you review and edit before anything is logged.

Glide's carb sheet: a photo of a margherita pizza with an estimate of 110 grams and the description Margherita pizza with fresh mozzarella
A restaurant pizza, straight from the camera. 110 g, in a field you can overwrite.
Glide's carb sheet: a photo of a Rice Krispies Treat bar with an estimate of 17 grams and the description Kellogg's Rice Krispies Treats Original, 1 bar
One Rice Krispies Treat from a kitchen-counter snapshot: 17 g — the wrapper's own label says the same.

This page shows how well that actually works, measured on public benchmarks, with the comparisons and the weak spots included. Nothing here is medical advice; the estimate is a starting point, and the final number is always yours.

2.0 g
average miss on familiar home meals
89% within ±10 g · 12% of a 17 g meal
3.5 g
average miss on packaged foods, per label serving
91% within ±10 g · 16% of a 22 g serving
11.9 g
average miss on plated meals — our weakest case
57% within ±10 g · 34% of a 35 g meal

What happens when you snap a meal

📷 Snap the plate or scan a barcode AI proposes “pizza margherita · 110 g” ✏️ You review & edit the number is always yours Logged only after you confirm
No estimate is ever logged without you. Scanned barcodes skip the AI entirely and read the product's own nutrition label.

The numbers

One production model serves every estimate — no silent fallbacks — so these numbers describe exactly what ships. Each bar below carries three figures, because no one of them is enough on its own:

  1. The average miss, in grams (MAE, mean absolute error) — the unit you actually dose in. A slice of bread is about 12 g.
  2. The meals it was measured on. The same 3 g miss is trivial on a 70 g plate and serious on a 20 g snack, so every set shows its average meal size and the miss as a share of it.
  3. How often it lands within ±10 g — the share of estimates close enough that the dose barely moves.
15.4 g21% of the meal

The human baseline

What hand-counting misses by, measured in 50 adults with type 1 diabetes across 448 meals against a dietitian-verified reference — meals that averaged 72 g. Every bar below is read against this (Brazeau et al.).

hand counting, published avg: 15.4 g — but 21% of a 72 g meal † Home photos n = 19 · private set avg meal 17 g Home photos (our own weighed meals): average miss 2.0 g on meals averaging 17 g of carbs — 12% of the meal; 89% of estimates within ±10 g 2.0 g 12% Typed correction n = 313 · scripted edits ‡ avg change 22 g Typed corrections (“add an apple”, “I ate half”): the revised estimate lands within 2.2 g of the instructed change on average, where the instructed change itself averaged 22 g; 94% within ±10 g 2.2 g Packaged, per serving n = 200 · Open Food Facts avg serving 22 g Packaged food, per labeled serving: average miss 3.5 g on servings averaging 22 g of carbs — 16% of the serving; 91% within ±10 g 3.5 g 16% Plated meal photo n = 300 · Nutrition5k avg meal 35 g Plated meal photo: average miss 11.9 g on meals averaging 35 g of carbs — 34% of the meal, our weakest case; 57% within ±10 g. The Nutrition5k paper's own research model on the same benchmark: 6.1 g 11.9 g 34% 6.1 § average miss (MAE), grams of carbs — and as a share of that set's average meal lower is better · shorter bar = better
Brazeau et al., above. Read the dashed line as context, and note that the grams flatter us: those meals averaged 72 g, roughly twice our plated set, so a smaller miss in grams is partly just a smaller meal. As a share of the meal, hand-counting (21%) beats our plated photo estimate (34%) and loses to our packaged one (16%). Different meals and protocol besides, so it is not a same-test comparison in either direction. ‡ typing is how you correct a photo estimate rather than a standalone estimator, so its miss is measured against the instructed change, not the meal total — which is why it gets no share-of-meal figure. Methodology under “Corrections” below. § the Nutrition5k paper's own research model on the same benchmark — single-photo portion size is genuinely hard, and we are not at research accuracy there.

Corrections: “add an apple”

Glide has no standalone text estimator — typing is how you correct a photo estimate, so the correction is re-run with the photo, the prior result, and your instruction. Every test meal already has lab-weighed carbs (Nutrition5k weighs each ingredient separately), which means a scripted correction has an exact right answer to score against. Five types, 313 corrections over the plated and home photo sets:

  1. Stated-carb addition. “A juice box with 15 g of carbs” on a 15 g dish must total 30 g — it lands within 0.2 g of the stated amount.
  2. Common-item addition. “Add a medium banana” shifts the estimate by a median of 27 g, matching USDA reference data.
  3. Halving. “I only ate half of this” must halve the weighed total.
  4. Ingredient removal. “I didn't eat the rice” must subtract the rice's weighed carbs. This is the weakest correction: it subtracts the model's own estimate of the rice, so it moves in the right direction 95% of the time but can miss on amount.
  5. Add-then-remove. Adding something and taking it back must land where it started — it returns within about 2 g.

Scored on how far the revised total sits from that right answer, the average miss is 2.2 g.

Why this model — we ran a bake-off

We benchmarked seven vision models on the same harness and shipped the one that won every column. When it loses to something — like the specialist research rig above — we say so rather than hiding the reference.

Gemini 3.5 Flash — ships in Glide Qwen3-VL 32B Gemini 2.5 Flash Plated photos — Gemini 3.5 Flash: 11.9 g average miss Plated photos — Qwen3-VL 32B: 12.8 g Plated photos — Gemini 2.5 Flash: 18.9 g, and it over-counted plated meals on average — an over-dose direction we would not ship 11.9 12.8 18.9 Plated photo Packaged, per serving — Gemini 3.5 Flash: 3.5 g Packaged — Qwen3-VL 32B: 6.6 g; it also misread zero-carb items as carby, an unsafe failure mode Packaged — Gemini 2.5 Flash: 4.7 g 3.5 6.6 4.7 Packaged Home photos — Gemini 3.5 Flash: 2.0 g Home photos — Qwen3-VL 32B: 7.6 g Home photos — Gemini 2.5 Flash: 2.0 g 2.0 7.6 2.0 Home photos average miss (MAE), grams — same harness, same test sets, lower is better
The two closest alternatives, on identical tests. The cheaper models failed in ways that matter more than their averages: one read zero-carb foods as carby, the other systematically over-counted plated meals — both errors in the over-dose direction.

Where it's weak — and what we do about it

How we test

We audit the reference data as well. A hand review of the packaged benchmark found mislabeled ground truth — impossible carb densities, placeholder serving sizes — that was inflating our error numbers; fixing the labels, not the model, moved packaged MAE from 4.7 g to 3.5 g. Benchmarks are only as honest as their labels. As evals rerun, this page gets the new numbers — including any that get worse.

What the test data looks like

The ground truth is a known carb count per example: lab-weighed dishes for plated photos, the printed nutrition label for packaged foods — and for typed corrections, a lab-weighed meal plus the instructed change. A few real examples:

Overhead photo of a plate of cherry tomatoes from the Nutrition5k dataset
Plated · Nutrition5k — cherry tomatoes
lab-weighed: 3.5 g
Overhead photo of cheese pizza from the Nutrition5k dataset
Plated · Nutrition5k — cheese pizza
lab-weighed: 30.8 g
Package photo of Sour Brite Crawlers gummy candy from Open Food Facts
Packaged · Open Food Facts — gummy candy
label: 26 g / serving

“I also drank a juice box with 15 g of carbs — add it.”

Correction · our refine eval — on a lab-weighed 15 g pizza slice
right answer: 30 g · model: 30 g
Phone photo of a Reese's protein bar, from our own home test set
Home · our own set — protein bar, 60 g
label: 25 g

Plated images from Nutrition5k; packaged photo by Open Food Facts contributors (CC BY-SA); the home example is one of the few from our private set we're comfortable sharing — it's a product shot, not a meal.

Glide displays data from a third-party CGM and is not affiliated with or endorsed by Dexcom. Not a medical device; not medical advice. Questions about the method? [email protected]