Adra · Label reading

Point the camera at a nutrition label.

Adra reads the table on the package and turns it into structured macros. On your phone, with no typing and no cloud.

Example

A Swiss fish pack, printed in four languages at once. Here is what the reader takes from the photo.

A nutrition table in four languages: Energie/énergie/energia 660 kJ (158 kcal) in the 100 g column, a 50 g half-pack column, and a reference intake column on the right.
The benchmark label behind the example. Energy row: 660 kJ and 158 kcal, plus the 50 g column and the reference intake column the reader has to ignore.

Label photo from the Open Food Facts nutrient-detection-layout benchmark set (CC BY-SA 3.0).

Read from the photo.
Energy Protein Carbs Fat Basis Serving
158 kcal 23 g 0 g 7.2 g per 100 g 50 g

The kJ and kcal pair is read as one value. The 8400 kJ adult reference column is ignored.

Pairs, columns, reference values, and two bases at once. Energy, protein, carbs, and fat all come out of it. Everything is understood before you confirm anything.

Tested on up to 300 labels

The reader goes through a benchmark of up to 300 real label photos. The core set is the Open Food Facts nutrition-table test split, plus US-format labels and close-up photos of packaged food. Every field is scored against the values printed on the label.

  • A Spanish nutrition label reading Valor energetico 425 kJ / 101 kcal per 100 g.
    Spanish. Energy: 425 kJ and 101 kcal, read as 101.
  • A French jar label reading Energie 979 kJ/235 kcal with fat 18 g, carbohydrates 1,3 g, and protein 17 g per 100 g.
    French. 235 kcal, with all four macros correct on the device.
  • A nutrition label photographed rotated 90 degrees, still reading 1078 kJ and 256 kcal per 100 g.
    Rotated 90 degrees. Read anyway: 256 kcal.

All label photos from the Open Food Facts nutrient-detection-layout benchmark set (CC BY-SA 3.0).

Per 100 g, as read from the four photos on this page.
Photo Energy (kcal) Protein (g) Carbs (g) Fat (g)
Swiss fish pack, four languages 158 23 0 7.2
Spanish fish fillets 101 missed* 0 1.16
French rillettes 235 17 1.3 18
Gratin, rotated 90 degrees 256 4.4 41 6.2

* The protein line on the Spanish label is the one macro value missed across these four photos.

Labels vary and yours may surprise it. The reader always shows its numbers before anything is saved, so you can catch what it missed.

What it reads

  • Energy in kcal, fat and saturated fat, carbs and sugars, protein, fiber, and sodium.
  • Per 100 g, per serving, or both, when the pack prints both.
  • The values land in your meal as that ingredient's nutrition. Set the portion and the macros follow.
  • German labels work too, words like Brennwert and Kohlenhydrate included. More than a dozen languages in total.

Many languages, many layouts

Labels are not standardized across countries. Adra reads the patterns that repeat everywhere. Field names are matched in more than a dozen languages.

Brennwert     · Energie              · Energy     → calories
Fett          · matières grasses                  → fat
Kohlenhydrate · glucides                          → carbs
Eiweiß        · protéines            · Protein    → protein

German, English, French, Spanish, Italian, Portuguese, Dutch, Polish, and other Latin-script labels read directly. Numbers are numbers in every language. Other script families are a planned expansion.

Layouts that show up in the wild, all handled:

  • Per 100 g tables, per serving tables, and packs that print both bases.
  • US-style Nutrition Facts panels with a percent-daily-value column.
  • Rotated and tilted photos, including full 90-degree turns.
  • Reference columns like 8400 kJ and 2000 kcal, recognized and left out.
  • Bilingual packaging, where one field appears twice or three times.
  • Photos with a barcode in frame. The text is still read.

How one label works

  1. Take a photo.

    Camera or gallery. Straight or tilted, both are fine.

  2. Adra finds the text.

    On-device text recognition detects the words and their positions on the package.

  3. It rebuilds the table.

    The words become rows and columns, the way a person would read them.

  4. You confirm.

    The values are shown for review, then they land in your meal.

What makes it good

  • Rotation handled.

    Tilted and rotated photos are straightened before reading. Vertical text does not scare it.

  • The fine print knows its place.

    The 8400 kJ reference column that packages print is recognized and excluded automatically.

  • Both number styles.

    Energy pairs like 660 kJ (158 kcal) are understood in one step, whether they share a cell or sit side by side.

  • Two bases at once.

    Packs that print per 100 g and per pack are read as both, with the serving grams taken from the pack itself.

Honest limits

  • A blurry or badly angled photo can lose a field. Crowded multi-column labels are the hardest case.
  • Energy is stored in kcal.
  • It reads what is printed. It does not guess.

Label logging is part of the free version, like everything except history beyond today. Compare with the pricing model.

FAQ

Does the label reader need the internet?

No. Detection and reading run on the phone. The models ship inside the app.

Which languages does the label reader understand?

Label field names are recognized in more than a dozen languages, including German, English, French, Spanish, Italian, Portuguese, and Dutch. Latin-script labels read directly.

How accurate is the label reader?

The reader is benchmarked against up to 300 real label photos. Across the four examples on this page, energy was right every time and the full macro set came back for three of four. On the device circuit, calories were right on 3 of 3 labels, and one full label logged with all four macros correct. Hard photos and dense layouts can still trip a field, so values are always shown for confirmation first.