Alle Beiträge
ai tutorial

Vom Foto zu Lebensmitteldaten: die Vision-Endpunkte

Barcodes dekodieren, Produkte erkennen, Nährwertetiketten auslesen und Mahlzeiten analysieren — alles aus einem einzigen Foto, mit einer Multipart-Anfrage.

aktualisiert am 13. Oktober 2026 FoodBase Team 3 Min. Lesezeit

Vier Dinge, die aus einem Foto werden können

Die Vision-Endpunkte machen aus einem Foto strukturierte Lebensmitteldaten. Es gibt vier Modi, jeder mit eigenem Endpunkt und eigenem Preis in KI-Credits (jeder Plan — auch Free — kommt mit einem monatlichen Kontingent):

EndpunktWas er machtCredits
POST /v1/vision/barcodeBarcode aus einem Foto dekodieren, passendes Produkt zurückgeben0 (zählt zu deinem Tageskontingent)
POST /v1/vision/productProdukt anhand eines Fotos der Packungsvorderseite erkennen3
POST /v1/vision/labelNährwertetikett auslesen: Tabelle, Zutaten, Allergene4
POST /v1/vision/mealGerichte auf einem Teller samt geschätzter Portionen erkennen5

Das Dekodieren von Barcodes ist reines Computer Vision — ohne KI-Modell. Deshalb kostet es keine Credits und wird stattdessen wie eine normale Datenanfrage abgerechnet.

Alle vier kannst du im Browser mit deinem eigenen Schlüssel und deinen Fotos im Foto-Playground ausprobieren.

Aufbau der Anfrage

Alle vier nehmen dieselbe Multipart-Anfrage an — ein image-Feld:

curl -X POST "https://foodbase.dev/v1/vision/product" \
  -H "X-API-Key: food_your_key_here" \
  -F "[email protected]"

Oder aus JavaScript:

async function vision(endpoint, file) {
  const form = new FormData();
  form.append("image", file);
  const res = await fetch(`https://foodbase.dev/v1/vision/${endpoint}`, {
    method: "POST",
    headers: { "X-API-Key": API_KEY },
    body: form,
  });
  if (!res.ok) throw new Error(`Vision error: ${res.status}`);
  return res.json();
}

Fotos werden serverseitig normalisiert (verkleinert, EXIF-Daten entfernt), bevor sie überhaupt ein KI-Modell erreichen, und Bilder werden nie gespeichert — das Foto wird analysiert und verworfen.

Produkterkennung

/vision/product extrahiert, was das Modell sehen kann, gleicht es mit dem Katalog aus 6,1 Mio. Produkten ab und liefert nach Score sortierte Treffer:

{
  "request_id": "…",
  "cached": false,
  "extracted": {
    "name": "Масло Краве",
    "brand": "…",
    "quantity": "250 g",
    "lang": "bg",
    "confidence": 0.95
  },
  "matches": [
    { "score": 0.98, "product": { "id": "…", "name_default": "…", "nutrition_summary": { } } }
  ]
}

Auch nicht-lateinische Verpackungen werden gelesen — kyrillische Etiketten führen zu den richtigen Katalogeinträgen. Nimm matches[0] als Antwort, wenn sein Score hoch ist, und zeig eine kurze Auswahlliste, wenn mehrere Treffer nah beieinander liegen.

Etiketten auslesen

/vision/label liest per OCR eine Nährwerttabelle in dieselben Feldnamen aus, die auch der Rest der API verwendet — dazu den Zutatentext und erkannte Allergene:

{
  "extracted": {
    "energy_kcal": 539,
    "fat_g": 30.9,
    "saturated_fat_g": 10.6,
    "carbs_g": 57.5,
    "sugars_g": 56.3,
    "proteins_g": 6.3,
    "salt_g": 0.11,
    "ingredients_text": "Sugar, palm oil, hazelnuts 13%…",
    "allergens": ["milk", "nuts"],
    "product_name": "Nutella",
    "confidence": 0.97
  },
  "product": { "id": "…" }
}

Felder, die nicht auf dem Etikett stehen, kommen als null zurück — das Modell erfindet nie Zahlen. Wenn das Etikett einen Barcode enthält oder das Produkt erkannt wird, verweist product auf den Katalogeintrag.

Mahlzeitenanalyse

/vision/meal erkennt die Gerichte auf einem Teller, schätzt die Portionen und ordnet jedem Gericht ein generisches Lebensmittel zu, sodass du Kalorienschätzungen bekommst:

{
  "items": [
    {
      "dish": "grilled chicken breast",
      "portion_g_est": 150,
      "confidence": 0.9,
      "match": {
        "name_default": "Chicken breast, grilled",
        "per_100g": { "energy_kcal": 165, "proteins_g": 31, "carbs_g": 0, "fat_g": 3.6 },
        "estimated_kcal": 248
      }
    }
  ],
  "estimated_total_kcal": 612,
  "disclaimer": "Dish identification and portion sizes are AI estimates from a photo…"
}

Portionen aus einem einzigen Foto sind Schätzungen — die Antwort sagt das im disclaimer, und deine Oberfläche sollte das auch tun, idealerweise mit einer schnellen Möglichkeit für Nutzer, die Grammzahl anzupassen.

Credits, Caching und Fehler

  • Jede KI-Antwort enthält die Header X-Credits-Limit, X-Credits-Remaining und X-Credits-Reset — zeig sie in deiner App an, damit Nutzer nie überrascht werden.
  • Identische Bilder werden serverseitig gecacht, wiederholte Anfragen kommen also sofort zurück — zum selben Credit-Preis. Bau deine App so, dass sie Ergebnisse clientseitig cacht, statt dasselbe Foto erneut zu senden.
  • Schlägt eine Anfrage fehl, zahlst du nichts: Ungültige oder zu große Bilder, Provider-Fehler und nicht gefundene Barcodes werden automatisch erstattet.
  • Rechne mit 402 (keine Credits mehr), 429 (Vision-Rate-Limit pro Sekunde — jeder Plan hat eines) und 413 (Bild zu groß) und fang sie ab.

Wo du anfängst

Spiel im Playground mit deinen eigenen Fotos und lies dann die vollständigen Request-/Response-Verträge in der Doku. Die 20 monatlichen Credits des Free-Plans reichen, um alle vier Modi einmal auszuprobieren.

Bau es mit FoodBase

6,1 Mio. Produkte, über 40 Nährstoffe und KI-Lebensmittelanalyse — kostenlos starten, ohne Kreditkarte.