Tabellen aus Scans auslesen
Erkennt Tabellen auf gescannten oder fotografierten Seiten und gibt Zeilen und Spalten als strukturierte Daten zurück. Gedacht für Preislisten, Statistiken und andere tabellarische Vorlagen, die sonst Zelle für Zelle von Hand in eine eigene Tabellenkalkulation übertragen werden müssten, obwohl der Inhalt bereits fertig vorliegt und nur eingelesen werden muss.
Online ausführen
Führen Sie dies mit Ihrem Konto auf unseren Servern aus. Kostenlose Tools laufen in Ihrem Browser; dieses wird zum oben genannten Preis von Ihrem KIT-Guthaben abgebucht.
Wie eine Tabelle erkannt wird
Aus dem Bild oder der Seite werden Zeilen, Spalten und die dazugehörigen Werte herausgelesen und als geordnete Struktur zurückgegeben, nicht als loser Fließtext ohne erkennbaren Aufbau. Klare Linien und ein gleichmäßiger Zeilenabstand verbessern das Ergebnis, sind aber keine zwingende Voraussetzung, da auch Tabellen ohne sichtbare Rahmenlinien anhand der Textausrichtung und der Abstände zwischen den Spalten erkannt werden. Das gilt auch für mehrzeilige Zellinhalte, etwa wenn eine Produktbeschreibung über zwei Zeilen läuft, solange die Spaltengrenzen im Bild erkennbar bleiben.
So gehen Sie vor
Sie laden das Bild oder die Seite auf dieser Seite hoch und erhalten die erkannte Tabelle zurück, bereit zur Weiterverarbeitung in einer Tabellenkalkulation oder Datenbank. Über die API lässt sich der gleiche Ablauf in eine bestehende Auswertung einbinden; App und E-Mail-Kanal kommen als weitere Wege hinzu, ohne dass eine eigene Programmierung nötig wäre, um die Funktion produktiv einzusetzen. So lässt sich derselbe Ablauf auch in ein regelmäßig laufendes Auswertungsskript einbauen, das neue Preislisten automatisch verarbeitet, sobald sie eintreffen.
Grenzen bei verschachtelten Tabellen
Einfache und mittelkomplexe Tabellen werden zuverlässig erkannt. Bei verschachtelten Kopfzeilen, zusammengeführten Zellen oder handschriftlichen Ergänzungen in einzelnen Feldern sinkt die Genauigkeit, weshalb sich bei solchen Vorlagen ein kurzer Blick auf das Ergebnis lohnt, bevor die Daten in eine wichtige Auswertung übernommen werden. Sehr breite Tabellen mit vielen Spalten auf schmalem Papier profitieren von einer Aufnahme mit möglichst hoher Auflösung, damit auch die äußeren Spalten noch sauber getrennt bleiben und keine Werte zusammenlaufen.
Preis pro Seite
$0.010 pro Anfrage plus $0.0575 pro verarbeiteter Seite. Eine einzelne Preisliste mit mehreren Tabellen auf einer Seite kostet damit rund $0.068, unabhängig von der Anzahl der Zeilen oder der Anzahl der Tabellen, die auf dieser einen Seite abgebildet sind. Mehrseitige Preislisten werden Seite für Seite abgerechnet, ohne Mengenrabatt oder Mindestbestellwert, sodass sich die Gesamtkosten schon vor dem Hochladen anhand der Seitenzahl überschlagen lassen.
Anwendungsfälle
Preisliste aus dem Katalog übernehmen
Weber Metallbau GmbH scannt eine gedruckte Preisliste eines Zulieferers und übernimmt die Tabelle direkt in die eigene Kalkulation, statt jede Zeile manuell zu übertragen.
Statistik aus einer Studie weiterverarbeiten
Katrin Baumann liest eine tabellarische Übersicht aus einer gedruckten Studie aus, um die Zahlen in einer eigenen Auswertung zu vergleichen.
Fahrplan digital verfügbar machen
Ein Vereinsvorstand digitalisiert den ausgehängten Fahrplan eines Vereinsbusses, damit die Abfahrtszeiten auch online abrufbar sind.
Positionsliste aus einer Papierrechnung
Schneider IT-Systeme GmbH & Co. KG liest die Positionstabelle einer eingescannten Lieferantenrechnung aus, um die Posten in die interne Kostenstelle zu übernehmen.
Häufige Fragen
In welchem Format erhalte ich die Tabelle?
Als strukturierte Zeilen und Spalten, die sich direkt in eine Tabellenkalkulation oder in eine eigene Datenverarbeitung übernehmen lassen.
Funktioniert das auch bei zusammengeführten Zellen?
Bei einfachen Tabellen zuverlässig, bei stark verschachtelten Kopfzeilen oder zusammengeführten Zellen kann die Zuordnung ungenauer werden. Ein kurzer Kontrollblick ist dann sinnvoll.
Was passiert mit der hochgeladenen Datei?
Sie wird ausschließlich zur Erstellung der Tabelle verarbeitet und nicht für andere Zwecke aufbewahrt. Es gibt kein Konto, in dem sie dauerhaft läge.
Ist für die Nutzung ein Konto notwendig?
Nein. Es gibt derzeit keine Konten – Sie zahlen direkt pro Anfrage.
Was kostet die Auswertung einer Seite mit mehreren Tabellen?
$0.010 pro Anfrage plus $0.0575 pro Seite, unabhängig davon, wie viele Tabellen auf dieser Seite stehen.
Gibt es ein Limit für die Seitenzahl?
Ja, bis zu 10 Seiten und 25 MB pro Datei in einem Durchlauf.
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/ocr/table \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"…"}'const res = await fetch("https://api.kit.forhosting.com/ocr/table", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"input": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/ocr/table",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"input": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/ocr/table", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"input":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"input":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/ocr/table", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"input": "…"
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "ocr.table",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Limits
max_mb | 25 |
max_pages | 10 |
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |
413 | input_too_large | Die Eingabe überschreitet das Größenlimit dieser Aufgabe – die genaue Grenze steht auf der Seite. |
422 | task_failed | Die Aufgabe ist fehlgeschlagen und wird nicht berechnet. |