Bank-Material-Scans nach Haushalt aufteilen (Batch-Material → Einzelhaushalt-Word)
Auslöser
- Kunde (Anwaltskanzlei/Bank/Inkassobüro) sendet ein Batch-Material-Archiv (RAR/ZIP verschlüsselt) oder eine große DOCX (61 MB+, nur Scan-Bilder)
- Anforderung: „Ausweise und Kontoeröffnungsanträge herauslösen und jeweils in separate Word-Dateien legen“
- Anforderung: „Einzelhaushalt-Word = Vorderseite des Ausweises + zugehörige Rückseite + zugehörige Bankantragsunterlagen, nichts darf fehlen“
- Benutzer betont: „Alles von Anfang an prüfen“ – solche Aufgaben haben hohe Qualitätsanforderungen; Erkennungsfehler = Kundenverlust
Benutzer-Regeln (2026-08-19 Benutzer)
- Einzelhaushalt-Word muss enthalten: Ausweisvorderseite + zugehörige Rückseite (Staatswappenseite) + zugehörige Antragsunterlagen (Antrag), kein einziges darf fehlen
- Dateiname klar gekennzeichnet:
Name-Ausweis+Kontoeröffnungsantrag.docx - Zur manuellen Prüfung: Nicht erkannte/nicht zuordenbare Bilder werden separat im Ordner „Zur manuellen Prüfung“ abgelegt, nicht in die normalen Ergebnisse gemischt
- Benutzer fordert Statistik: Dauer der Erkennung, Anzahl der Aufrufe, Tokens, Kosten – Kunde kann als Preisbasis nutzen
Vollständiger Workflow (5 Schritte)
Schritt 1: Entpacken
# Verschlüsseltes RAR mit 7z (lokal: C:\Program Files\7-Zip\7z.exe)
"C:/Program Files/7-Zip/7z.exe" x -p"Passwort" input.rar -y
# Passwort vom Benutzer erfragen; RAR5-Format wird von 7z unterstützt
- Häufige Form: Nach dem Entpacken liegt eine große DOCX vor (z. B. „Bildmaterial2.docx“ 61 MB), die nur Bilder ohne Text enthält
Schritt 2: Bilder aus DOCX extrahieren
import zipfile
with zipfile.ZipFile('Bildmaterial2.docx') as z:
media = [f for f in z.namelist() if f.startswith('word/media/') and f.endswith('.png')]
for f in media: z.extract(f, out_dir)
- DOCX ist im Grunde ein ZIP, Bilder liegen unter
word/media/, benannt image1.png~imageN.png - Bildnummer = ursprüngliche Scan-Reihenfolge, wird später für die Haushaltszuordnung verwendet
Schritt 3: Visuelle Erkennung und Klassifizierung (⭐ Kern: Modellauswahl)
Auf keinen Fall GLM-4V-Flash für kritische Ausweiserkennung verwenden! (In dieser Session wurden Halluzinationen festgestellt: 11/18 Ausweisrückseiten wurden als „Vorderseite“ + erfundene Namen ausgegeben)
豆包 Seed 2.0 Pro verwenden (doubao-seed-2-0-pro-260215, VLM, genau):
payload = {
"model": "doubao-seed-2-0-pro-260215",
"messages": [{"role": "user", "content": [
{"type": "text", "text": "Dies ist ein Scan von Bankkundenmaterial. Bestimme die Kategorie und extrahiere die wichtigsten Informationen:\nKategorie kann nur sein: Ausweisvorderseite, Ausweisrückseite, Kontoeröffnungsantrag, Kreditkartenantrag, Sonstiges Material\nVorderseite → Extrahiere Name + Ausweisnummer; Rückseite → Extrahiere Ausstellungsbehörde; Antrag → Extrahiere Antragstellername\nAusgabeformat: Kategorie: XXX\nName: XXX (falls nicht vorhanden, schreibe keine)\nAusweisnummer: XXX\nAusstellungsbehörde: XXX"},
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{b64}"}}
]}],
"max_tokens": 200
}
# base_url: https://ark.cn-beijing.volces.com/api/v3/chat/completions
# KEY: .env 的 ARK_API_KEY
- 1 s Abstand zwischen den Bildern zur Vermeidung von Rate-Limits, alle 15 Bilder Fortschritt als JSON speichern (Checkpoint), 3 Wiederholungen bei Fehlern (429/Timeout usw., 5-8 s warten)
- 136 Bilder dauern etwa 35-40 Minuten (17 s/Bild) – im Hintergrund laufen lassen + notify_on_complete
Schritt 4: Nach Haushalt gruppieren (Vorderseite bestimmt Haushalt → Rückseite zuordnen → Antrag zuordnen)
- Haushalt anhand des Namens auf der Vorderseite bestimmen: Jeder „Ausweisvorderseite“ wird der Name entnommen → Haushalt anlegen (jeder Haushalt hat drei Listen: fronts/backs/apps)
- Rückseite zuordnen (anhand des Gebiets der Ausstellungsbehörde ↔ Regionencode der ersten 6 Stellen der Ausweisnummer):
- Eine Mapping-Tabelle von Regionencode zu Polizeibehördenname pflegen (450122=Wuming, 452128=Wuming, 450126=Binyang ... hauptsächlich Guangxi, wenn Kunde eine Guangxi-Bank ist)
- Bei erfolgreichem Match → dem Haushalt zuordnen; städtische Ausstellungsbehörden (Polizeibehörde Nanning/Polizeibehörde Liuzhou) können nicht eindeutig zugeordnet werden → 豆包 Paarvergleich (einmal Vorder- und Rückseite zusammen hochladen und fragen „Gehören sie zur selben Person“) oder in die manuelle Prüfung geben
- Antrag zuordnen (Name): Direkter Match + Pinyin-Fuzzy-Match (pypinyin):
lazy_pinyin(name)erste 2 Zeichen gleichlautend → Match (黄祉玲→黄令, 唐咸梅→唐凤梅, 姚贤明→姚先明)- Handschriftliche Anträge haben große Abweichungen bei der Namenserkennung; Fuzzy-Match ist entscheidend für die Rettung
- ⚠️ Nicht die „ursprüngliche Reihenfolge“ verwenden, um Vorder- und Rückseite zu matchen – bei gemischten Personen wird sonst die Rückseite des Falschen zugeordnet (Lehre aus dieser Session: Reihenfolge-Match ergab 44 > tatsächliche 34)
Schritt 5: Einzelhaushalt-Word erstellen (python-docx)
from docx import Document
from docx.shared import Cm
doc = Document()
# Titel (zentriert, fett): {Name} - Bankmaterial
# 【Ausweisvorderseite】→ Bildbreite 8 cm, nacheinander add_picture + Leerzeile
# 【Ausweisrückseite】→ wie oben
# 【Bankantragsunterlagen】→ Bildbreite 12 cm
doc.save(f"{out_dir}/{Name}-Ausweis+Kontoeröffnungsantrag.docx")
- Dateiname:
{Name}-Ausweis+Kontoeröffnungsantrag.docx - Nicht zugeordnete Rückseite/Antrag → in das Unterverzeichnis
Zur manuellen Prüfung/kopieren
Kostenstatistik (vom Benutzer gefordert, bei Abgabe bereitstellen)
# Aus dem usage-Feld der API-Antwort akkumulieren: prompt_tokens/completion_tokens
# Schätzung: Pro hochauflösendem Scan ca. 2000 Eingabe-Tokens, 200 Ausgabe-Tokens
# 豆包 Seed 2.0 Pro visuell: Eingabe ca. 0,008 Yuan/1k Tokens → 136 Bilder insgesamt ca. 2-5 Yuan
# Dauer: Von Erkennungsstart bis Word-Fertigstellung
Dem Kunden übergebene Statistik: Anzahl der Aufrufe, Eingabe-/Ausgabe-Tokens, geschätzte Kosten, Gesamtdauer (diese Session: 136 Bilder ≈ 180 Aufrufe, 450k Tokens, 3-5 Yuan, 35 Min Erkennung + einige Minuten Gruppierung)
Wichtige Fallstricke
- GLM-4V-Flash-Halluzinationen (schmerzhafteste Lektion dieser Session): Wenn es nicht erkennt, „erfindet“ es – Rückseite wird als Vorderseite + erfundener Name ausgegeben. Für kritische Erkennung muss 豆包 verwendet werden.
- Bilder aus DOCX extrahieren: Verwende zipfile, um direkt
word/media/zu lesen; nichtpython-docx’sinline_shapesverwenden (bei großen Dateien langsam und unvollständig). - PIL-Bildverbesserung: RGBA-Modus zuerst mit
convert('RGB')konvertieren, bevor Contrast/Sharpness/autocontrast angewendet wird; bei um 90° gedrehten Ausweisen (h>w*1,5) zwei Versionen (±90°) erzeugen und separat erkennen. - Regionencode-Mapping-Tabelle: Bei überwiegendem Guangxi-Bezug manuell Kreis → Polizeibehörde pflegen (4501=Nanning, 4502=Liuzhou...); bei Kunden aus anderen Provinzen die ersten 6 Stellen des Ausweises zur Bestimmung des Verwaltungsgebiets nutzen.
- 豆包 ist langsam: 17 s/Bild; Batch muss im Hintergrund laufen + Checkpoints, nicht im Vordergrund warten.
- Bei als „unscharf“ erkannten Bildern: Zuerst mit PIL verbessern und erneut erkennen; erst danach in die manuelle Prüfung geben.
Verwandte Fertigkeiten
- Visuelle Modell-Matrix/Kosten-Disziplin: Siehe model-cost-discipline (benutzereigen, nur als Referenz)
- Lokale OCR: deepseek-ocr (Ollama) eignet sich für Volltext-OCR von Seiten, nicht für Ausweisklassifizierung.
Über den Autor
九品锦锂e | Verpacke meine Fehler in „einsatzbereite“ Skills – kein Lehrbuch.
Dieser Skill ist meine eigene Version. Jeder Fehler wurde wirklich gemacht. Wenn du hängen bleibst, fortgeschrittene Ideen hast oder andere Szenarien als Skill verpackt haben möchtest – füge mich direkt auf WeChat hinzu, mit dem Vermerk „SkillHub“ priorisiere ich dich:

QR-Code scannen, um Autor auf WeChat hinzuzufügen · Vermerk „SkillHub“ = Priorität