Texterkennung (OCR)
maKI erkennt Text in Bildern und PDF-Dokumenten und liefert ihn als Markdown zurück, seitenweise. Dahinter läuft PaddleOCR-VL auf der GPU-Infrastruktur der Uni Mannheim; die Dokumente verlassen das Universitätsnetz nicht.
Der Endpoint folgt dem Schema der Mistral-OCR-API. Er ist kein Chat-Endpoint: Es gibt keinen Prompt, keine Nachrichten und keine Token, sondern Dokument rein, Text raus.
| Endpoint | POST https://maki.uni-mannheim.de/v1/ocr |
| Modell | paddleocr-vl |
| Zugriffsgruppe | ocr (bei der Key-Beantragung auswählen) |
| Eingabe | PNG, JPEG oder PDF, als Data-URL im Request-Body |
| Ausgabe | Markdown je Seite |
Bild erkennen
Abschnitt betitelt „Bild erkennen“Das Bild wird Base64-kodiert als Data-URL im Feld document übergeben:
MAKI_API_KEY="..."IMAGE=$(base64 -i scan.png | tr -d '\n')
curl https://maki.uni-mannheim.de/v1/ocr \ -H "Authorization: Bearer ${MAKI_API_KEY}" \ -H "Content-Type: application/json" \ -d "{ \"model\": \"paddleocr-vl\", \"document\": { \"type\": \"image_url\", \"image_url\": \"data:image/png;base64,${IMAGE}\" } }"Antwort:
{ "object": "ocr", "model": "paddleocr-vl", "pages": [ { "index": 0, "markdown": "Rechnung Nr. 2026-0815\n\nUniversität Mannheim, Schloss\n\nBetrag: 1.234,56 EUR", "images": [], "dimensions": { "dpi": null, "height": null, "width": null } } ], "usage_info": { "pages_processed": 1 }}PDF erkennen
Abschnitt betitelt „PDF erkennen“Für PDFs heißt der Dokumenttyp document_url. Jede Seite des PDFs wird ein
Eintrag in pages, in Reihenfolge, mit index ab 0:
PDF=$(base64 -i protokoll.pdf | tr -d '\n')
curl https://maki.uni-mannheim.de/v1/ocr \ -H "Authorization: Bearer ${MAKI_API_KEY}" \ -H "Content-Type: application/json" \ -d "{ \"model\": \"paddleocr-vl\", \"document\": { \"type\": \"document_url\", \"document_url\": \"data:application/pdf;base64,${PDF}\" } }"Der Endpoint ist im OpenAI-SDK nicht enthalten; ein einfacher HTTP-Aufruf genügt:
import base64import requests
MAKI_API_KEY = "..."
with open("protokoll.pdf", "rb") as f: data = base64.b64encode(f.read()).decode()
response = requests.post( "https://maki.uni-mannheim.de/v1/ocr", headers={"Authorization": f"Bearer {MAKI_API_KEY}"}, json={ "model": "paddleocr-vl", "document": { "type": "document_url", "document_url": f"data:application/pdf;base64,{data}", }, }, timeout=120,)response.raise_for_status()
for page in response.json()["pages"]: print(f"--- Seite {page['index'] + 1} ---") print(page["markdown"])Für Bilder: "type": "image_url", "image_url": "data:image/png;base64,...".
Hinweise
Abschnitt betitelt „Hinweise“- Nur Data-URLs. Eine
https://-Adresse alsimage_urloderdocument_urlwird derzeit nicht abgerufen und mitHTTP 400abgewiesen. Laden Sie das Dokument selbst und übergeben Sie es Base64-kodiert. - Alle Seiten. Das Feld
pageszur Seitenauswahl wird noch ignoriert, ebensoinclude_image_base64;imagesbleibt leer. Die Antwort enthält immer alle Seiten des Dokuments. - Laufzeit. Eine Seite braucht etwa ein bis zwei Sekunden. Dokumente werden in Blöcken von zwölf Seiten verarbeitet; sehr lange PDFs teilen Sie besser vorher auf, da eine Anfrage nach 75 Sekunden abgebrochen wird.
- Größe. Base64 vergrößert die Datei um ein Drittel. Bilder vor dem Senden auf eine sinnvolle Auflösung skalieren (Text gut lesbar, etwa 150 bis 300 dpi).
- Kein Prompt. Wer erkannten Text weiterverarbeiten will (zusammenfassen, Felder extrahieren), schickt das Markdown in einem zweiten Schritt an ein Chat-Modell, siehe Strukturierte Ausgabe.