Teams in China vergleichen beim Einstieg in eine OCR API meist zuerst die Erkennungsrate und rufen anschließend direkt die Schnittstelle auf. Im Produktivbetrieb zeigt sich dann, dass die meiste Zeit in der Zugriffsschicht verloren geht: ob Bilder zuverlässig hochgeladen werden, ob der Pfad in der Abendspitze verfügbar ist, ob die Rechnung in Dollar oder Yuan ausgestellt wird, ob sie gebucht werden kann und wie ein Batch-Job nach einem Abbruch fortgesetzt wird.
Der Unterschied zwischen OCR und Chat-APIs liegt in der Eingabe: Bilder oder PDFs erzeugen größere Request-Bodies, häufigere Timeouts und leichter doppelte Kosten durch Retries. Dieser Beitrag vergleicht drei Wege — offizieller Direktzugang, eigener Proxy und inländisches AI-Gateway — und behandelt Bild-Upload, Drosselung, Failover und die Prüfliste vor dem Start. Konkrete Dienste und Abrechnung richten sich nach den Modellpreisen und der Anbieterdokumentation.
Hinweis: OpenAI, Claude, Gemini, Baidu AI Cloud, Tencent Cloud und Alibaba Cloud sind Marken ihrer jeweiligen Inhaber. Der Beitrag dient der technischen Erläuterung; es besteht keine Zugehörigkeit und kein Vertretungsverhältnis zu diesen Anbietern. Grenzüberschreitende Netze, Datenexport und Zahlungsabwicklung müssen den lokalen Gesetzen und den Nutzungsbedingungen der Plattformen entsprechen.
1. Die drei Wege im Überblick
Offizieller Direktzugang bedeutet, die Schnittstelle des OCR- oder Modellanbieters direkt aufzurufen. Bei einem inländischen Cloud-OCR-Anbieter liegen Netzweg und Zahlung ohnehin im Inland; das ist meist der einfachste Fall. Bei einem ausländischen Vision-Modell müssen grenzüberschreitendes Netz, Dollar-Abrechnung und Wechselkurse selbst geregelt werden.
Eigener Proxy heißt: Auf einem regelkonformen Server wird ein Reverse Proxy oder Gateway betrieben, das Authentifizierung, Logging, Retries und Drosselung bündelt. Die Kontrolle ist hoch, aber Server, Zertifikate, Updates und Bereitschaftsdienst liegen beim eigenen Team. Für OCR müssen zusätzlich Body-Limits und Timeouts angepasst werden, sonst werden große Bilder leicht schon im Proxy abgeschnitten.
Inländisches AI-Gateway bietet einen OpenAI-kompatiblen Zugang, Abrechnung in Yuan und üblicherweise Konsole, Verbrauchsstatistik und Rechnungen. Die Integration ist günstig und mehrere Modelle lassen sich vereinheitlichen; zu prüfen sind Vertragspartner, Datenklauseln, Kontingentregeln und Störungsreaktion.
| Dimension | Offizieller Direktzugang | Eigener Proxy | Inländisches AI-Gateway |
|---|---|---|---|
| Netz und Zugang | Kurzer Weg bei inländischen Anbietern; ausländische Modelle grenzüberschreitend | Route frei wählbar, Betrieb in Eigenregie | Inländischer Zugang, meist sofort nutzbar |
| Bild-Upload | An Body- und Formatlimits des Anbieters gebunden | Limits im Proxy müssen mit angepasst werden | Hängt von Body-Limit und Timeout des Gateways ab |
| Zahlung und Rechnung | Inländische Anbieter in Yuan; ausländische Modelle in Dollar | Abhängig von Konto und Serverbetreiber | Abrechnung in Yuan, meist mit Rechnung |
| Batches und Drosselung | An QPS, Parallelität und Kontingente gebunden | Warteschlange möglich, Upstream-Limits bleiben | Hängt von Limits, Scheduling und Retries ab |
| Datengrenze | Export und Bedingungen selbst bewerten | Datenort liegt in eigener Verantwortung | Anbieterbedingungen und Nachweise prüfen |
| Betriebsaufwand | Mittel, vor allem Netz und Konto | Hoch: Server, Zertifikate, Monitoring | Niedrig, zentrale Konsole |
| Modellabdeckung | Meist ein Anbieter | Selbst erweiterbar | Meist mehrere Anbieter |
2. Netz und Bild-Upload: zuerst 413 und Timeouts lösen
OCR-Request-Bodies sind deutlich größer als Textanfragen. Ein Bild mit 3 MB wächst als Base64 um etwa ein Drittel auf rund 4 MB. Wenn die Schnittstelle nur Base64 akzeptiert, müssen Client, Reverse Proxy und Gateway das Body-Limit anheben. Häufige Störungen sind deshalb nicht „unzureichende Erkennung“, sondern 413, Verbindungsabbrüche, Timeouts und halbe Antworten.
Einige praktische Empfehlungen:
- Wenn die Schnittstelle URL oder vorab signierte Adressen unterstützt, bevorzugt per URL hochladen, um den Body klein zu halten. Prüfen Sie, ob der Link bis zum Abschluss der Erkennung gültig ist und keine Anmeldung verlangt.
- Auf die fachlich akzeptable Auflösung komprimieren, aber nicht zu stark; kleine Schrift, Stempel, Handschrift und Tabellenlinien reagieren empfindlich. Zwei Schwellenwerte — lange Kante und Dateigröße — verwenden und das Original für die Prüfung behalten.
- Vor dem Upload gemäß EXIF-Ausrichtung drehen, damit eine quer liegende Seite nicht die Lesereihenfolge durcheinanderbringt.
- Im Proxy
client_max_body_size,proxy_read_timeoutundproxy_send_timeoutgemeinsam anpassen, nicht nur das Timeout der Anwendung. - Mehrseitige PDFs bevorzugt über asynchrone Aufgaben verarbeiten, statt die ganze Datei in eine synchrone Anfrage zu packen.
Wenn der Anbieter die Bild-URL selbst abruft, muss die Adresse öffentlich erreichbar sein, keine Anmeldung verlangen und die Signatur mindestens für die Wartezeit gültig bleiben.
3. Zahlung, Vertrag und Rechnungen
Ein häufiger Engpass für inländische Teams ist der Zahlungspartner. Aufladung per Privatkarte, Zahlung durch Dritte und uneinheitliche Belege führen oft dazu, dass die Buchhaltung nicht buchen kann. Klären Sie vor der Auswahl: Mit wem wird der Vertrag geschlossen, in welcher Währung wird abgerechnet, welche Rechnungsart gilt, wie lange ist eine Vorauszahlung gültig und welche Rückerstattungsregeln gelten?
Bei nutzungsbasierter Abrechnung muss auch die Grundlage geklärt werden: pro Bild, pro PDF-Seite, pro Aufruf oder pro Token; ob fehlgeschlagene Anfragen zählen; ob Retries doppelt berechnet werden; ob sich der Verbrauch nach Projekt oder Key aufteilen lässt. Schreiben Sie dies in die Vergleichstabelle und testen Sie mit derselben Bildmenge, um die realen Kosten zu schätzen. Konkrete Kosten richten sich nach den Modellpreisen und dem Vertrag.
4. Drosselung, Parallelität und Batch-Aufgaben
OCR-Schnittstellen unterliegen meist gleichzeitig QPS-, Parallelitäts-, Einzelbild-, PDF-Seiten- und Tageskontingent-Grenzen. 429 bedeutet nicht zwingend eine Störung; oft ist nur die kurzfristige Parallelität zu hoch. Für Batch-Erkennung empfiehlt sich diese Reihenfolge:
- Für jedes Bild oder PDF einen SHA-256-Hash als Idempotenzschlüssel berechnen und zuerst die lokale Ergebnistabelle prüfen, bevor ein Auftrag gesendet wird.
- Aufgaben nach Schnittstellenlimits aufteilen: eigene Schwellen für Bildgröße, Seiten pro Anfrage und Parallelität.
- Parallelität niedrig starten, etwa mit 2–4 Kanälen, und nach Beobachtung von 429-Anteil und P95-Latenz schrittweise erhöhen.
- Bei 429 und kurzfristigen 5xx exponentielles Backoff mit Jitter verwenden; 401, 403 und Parameterfehler nicht wiederholen, sondern zuerst die Konfiguration korrigieren.
- Bei asynchronen Aufgaben task_id, Übergabezeit, Status und Ergebnisadresse protokollieren und Ergebnisdateien zeitnah sichern, da Ergebnislinks oft ablaufen.
- Nach jedem Batch Erfolge, Fehler, berechnete Bilder und Laufzeit zählen; fehlgeschlagene Muster in eine eigene Wiederholungswarteschlange legen.
- Nach Abschluss stichprobenartig manuell prüfen und die Zahl der Datensätze mit der Zahl der Quelldateien abgleichen.
5. Retry, Idempotenz und Failover
Vor Retries muss Idempotenz stehen, sonst werden aus einem Netzwerkruckler zwei Kostenposten und zwei Datensätze. Das Beispiel markiert Anfragen mit einem Bild-Hash und wartet bei wiederholbaren Fehlern:
import base64
import hashlib
import os
import time
from openai import OpenAI
client = OpenAI(
api_key=os.environ["ZSQH_API_KEY"],
base_url=os.environ["ZSQH_BASE_URL"],
timeout=90.0,
max_retries=0,
)
def ocr_image(path, model, attempts=4):
raw = open(path, "rb").read()
key = hashlib.sha256(raw).hexdigest()
data_url = "data:image/jpeg;base64," + base64.b64encode(raw).decode()
for i in range(attempts):
try:
resp = client.chat.completions.create(
model=model,
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "Erkenne den gesamten Text im Bild und gib ihn in der ursprünglichen Reihenfolge aus."},
{"type": "image_url", "image_url": {"url": data_url}},
],
}],
)
return key, resp.choices[0].message.content
except Exception as exc:
if i == attempts - 1:
raise
wait = min(2 ** i, 30) + 0.5 * (i + 1)
print(key[:8], type(exc).__name__, "retry in", wait)
time.sleep(wait)
key, text = ocr_image("invoice.jpg", os.environ["VISION_MODEL"])
print(key[:12], len(text))
Beim Failover gibt es eine oft übersehene Grenze: Ausgaben verschiedener OCR-Engines lassen sich nicht einfach mischen. Klassische OCR liefert Text und Koordinaten, ein multimodales Modell natürliche Sprache oder JSON; Feldnamen und Koordinatensystem können völlig unterschiedlich sein. Vor dem Wechsel sollten feste echte Muster verglichen werden — Zeichengenauigkeit, Feldgenauigkeit und Erfolgsquote strukturierter Ausgabe. Parsercode und Prüfprozess müssen gemeinsam angepasst werden, nicht nur der Modellname.
6. Prüfliste vor dem Produktivstart
- Netzweg: Große Bilder, mehrseitige PDFs und Abendspitzen separat testen und Anteile von 413, Timeouts und 5xx protokollieren.
- Genauigkeit: 50–100 echte Bilder für klar, unscharf, gedreht, Handschrift, Tabelle und mehrspaltiges Layout verwenden.
- Verbrauch: Stimmen
usagebeziehungsweise Bildzahl und die Abrechnung im Portal überein, und werden Retries doppelt berechnet? - Drosselung: Sind Parallelitätsobergrenze, 429-Anteil und Erfolgsquote nach Backoff akzeptabel?
- Daten: Enthalten die Bilder personenbezogene oder geschäftliche Geheimnisse, und sind Aufbewahrung, Logging und Löschung beim Anbieter geklärt?
- Ausstieg: Lassen sich Keys rotieren, Guthaben erstatten und der alte Dienst samt Rückfallweg beibehalten?
Ist ein Punkt unklar, zuerst mit kleinem Verkehr testen und nicht sofort den Produktivverkehr umstellen.
7. Auswahl nach Rahmenbedingungen
Die Reihenfolge der Auswahl: Ist Netz und Zahlung langfristig stabil, werden fester Ausgang und Audit benötigt, und erst danach Modellabdeckung und Abrechnungsfunktionen bewerten. Läuft Cloud-OCR im Inland reibungslos, kann direkt verbunden werden; wer ausländische Vision-Modelle ohne grenzüberschreitendes Betriebsteam nutzt, sollte ein inländisches Gateway prüfen. Für einen einheitlichen Zugang und Abrechnung in Yuan kann im ZSQH AI Gateway ein Test-Key erstellt und zunächst mit einer kleinen Bildmenge getestet werden; die Abrechnung steht unter Modellpreise.
Häufige Fragen
Ist der Direktzugang zu ausländischen OCR-Schnittstellen aus China stabil?
Das hängt von lokalem Ausgang, Tageszeit, Zielregion und Kontingenten ab und lässt sich nicht pauschal beantworten. Beobachten Sie mehrere Tage mit echten Bildern und realer Parallelität, protokollieren Sie Fehlerrate und P95-Latenz und vergleichen Sie mit der Gateway-Variante. Ein einzelner erfolgreicher Aufruf reicht nicht als Beleg.
Bilder als Base64 oder per URL hochladen?
Kleine Bilder lassen sich einfach per Base64 senden; bei großen Bildern, mehrseitigen PDFs oder hoher Parallelität sind URL oder vorab signierte Objektspeicheradressen vorzuziehen, weil der Body deutlich kleiner bleibt. In beiden Fällen sind Größenlimits, Formatanforderungen und Gültigkeit des Links zu prüfen.
Wie setzt man einen unterbrochenen OCR-Batch fort?
Den Inhalts-Hash des Bilds als Idempotenzschlüssel verwenden, Ergebnisse batchweise sichern und nur fehlende Teile nacharbeiten. Vor dem Neustart die bereits gespeicherten Datensätze mit der Zahl der Quelldateien abgleichen, um doppelte Einträge und halbe Batches als Vollständigkeit zu vermeiden.
Ändert sich das Ergebnisformat nach einem OCR-Wechsel?
In der Regel ja. Feldnamen, Koordinatensystem, Konfidenz und Fehlerstruktur können sich je Engine unterscheiden; strukturierte Ausgaben benötigen erneut eine Schema-Prüfung. Bei der Migration sollten alte Ergebnisse eine Zeit lang aufbewahrt und mit festen Mustern verglichen werden.
Lassen sich Rechnungen und Verbrauch nach Projekt aufteilen?
Das hängt vom Anbieter ab. Klären Sie vor Vertragsschluss, ob sich Verbrauch nach Projekt, Key oder Modell exportieren lässt, ob die Abrechnungsgrundlage fehlgeschlagene und wiederholte Anfragen enthält und ob der Rechnungsinhalt den Beschaffungsanforderungen entspricht.
Weiterlesen:
