


Schnelle und schmutzige Dokumentenanalyse: Kombination von GOT-OCR und LLama in Python
Lassen Sie uns eine Möglichkeit erkunden, eine OCR-LLM-Analyse für ein Bild durchzuführen. Wird dies der beste Weg sein, der von einem Experten mit jahrzehntelanger Erfahrung gegeben wird? Nicht wirklich. Aber es kommt von jemandem, der im wirklichen Leben einen ähnlichen Ansatz verfolgt. Betrachten Sie dies als eine Wochenendprojektversion mit praktischen Schnipseln und nicht als produktionsbereiten Code. Lasst uns reinschnuppern!
Was ist hier unser Ziel?
Wir werden eine einfache Pipeline erstellen, die ein Bild (oder PDF) aufnehmen, mithilfe von OCR Text daraus extrahieren und diesen Text dann mithilfe eines LLM analysieren kann, um nützliche Metadaten zu erhalten. Dies könnte nützlich sein, um Dokumente automatisch zu kategorisieren, eingehende Korrespondenz zu analysieren oder ein intelligentes Dokumentenverwaltungssystem aufzubauen. Wir werden dafür einige beliebte Open-Source-Tools verwenden und die Dinge relativ einfach halten.
Und ja, bei allem Folgenden wird davon ausgegangen, dass Sie mit HF-Transformatoren bereits ziemlich vertraut sind. Wenn nicht, schauen Sie sich https://huggingface.co/docs/transformers/en/quicktour an – scheint ein guter Ausgangspunkt zu sein. Obwohl ich es nie getan habe und nur aus Beispielen gelernt habe. Ich werde es schaffen... irgendwann.
Welche Pakete brauchen wir?
Wir verwenden Taschenlampe und Transformatoren für die schwere Arbeit sowie Pymupdf und Rich, um uns das Leben mit einer benutzerfreundlichen Konsolenausgabe zu erleichtern (ich mag Rich, also verwenden wir es im Grunde genommen zum Spaß).
import json import time import fitz import torch from transformers import AutoModel, AutoTokenizer, pipeline from rich.console import Console console = Console()
Bereiten Sie das Bild vor
Welches Bild sollten wir zunächst als Eingabe verwenden? Da wir Hugging Face hier hauptsächlich für den Zweck verwenden, verwenden wir die erste Seite ihrer führenden Webseite als Testobjekt. Es ist ein guter Kandidat sowohl für Text als auch für komplizierte Formatierungen – perfekt, um unsere OCR auf Herz und Nieren zu testen.
Für eine realistischere Lösung gehen wir davon aus, dass unsere Eingabe ein PDF ist (denn seien wir ehrlich, damit werden Sie in der realen Welt wahrscheinlich zu tun haben). Wir müssen es in das PNG-Format konvertieren, damit unser Modell Folgendes verarbeiten kann:
INPUT_PDF_FILE = "./data/ocr_hf_main_page.pdf" OUTPUT_PNG_FILE = "./data/ocr_hf_main_page.png" doc = fitz.open(INPUT_PDF_FILE) page = doc.load_page(0) pixmap = page.get_pixmap(dpi=300) img = pixmap.tobytes() with console.status("Converting PDF to PNG...", spinner="monkey"): with open(OUTPUT_PNG_FILE, "wb") as f: f.write(img)
Führen Sie hier die echte OCR durch
Ich habe für diese Aufgabe mit verschiedenen OCR-Lösungen herumgespielt. Klar, es gibt Tesseract und viele andere Optionen. Aber für meinen Testfall habe ich mit GOT-OCR2_0 (https://huggingface.co/stepfun-ai/GOT-OCR2_0) die besten Ergebnisse erzielt. Also lasst uns gleich loslegen:
tokenizer = AutoTokenizer.from_pretrained( "ucaslcl/GOT-OCR2_0", device_map="cuda", trust_remote_code=True, ) model = AutoModel.from_pretrained( "ucaslcl/GOT-OCR2_0", trust_remote_code=True, low_cpu_mem_usage=True, use_safetensors=True, pad_token_id=tokenizer.eos_token_id, ) model = model.eval().cuda()
Was ist hier los? Nun, standardmäßig AutoModel und AutoTokenizer. Das einzig Besondere daran ist, dass wir das Modell für die Verwendung von cuda einrichten. Und das ist nicht optional. Für die Ausführung des Modells ist CUDA-Unterstützung erforderlich.
Da wir nun unser Modell definiert haben, lassen Sie uns es tatsächlich an unserer gespeicherten Datei anwenden. Außerdem messen wir die Zeit und drucken sie aus. Nützlich nicht nur zum Vergleich mit verschiedenen Modellen, sondern auch um zu verstehen, ob es für Ihren Anwendungsfall überhaupt machbar ist, so lange zu warten (obwohl es in unserem Fall sehr schnell ist):
import json import time import fitz import torch from transformers import AutoModel, AutoTokenizer, pipeline from rich.console import Console console = Console()
Und das erhalten wir aus unserem Originalbild:
INPUT_PDF_FILE = "./data/ocr_hf_main_page.pdf" OUTPUT_PNG_FILE = "./data/ocr_hf_main_page.png" doc = fitz.open(INPUT_PDF_FILE) page = doc.load_page(0) pixmap = page.get_pixmap(dpi=300) img = pixmap.tobytes() with console.status("Converting PDF to PNG...", spinner="monkey"): with open(OUTPUT_PNG_FILE, "wb") as f: f.write(img)
^ den gesamten Text, keine Formatierung, aber es ist beabsichtigt.
GOT-OCR2_0 ist ziemlich flexibel – es kann in verschiedenen Formaten ausgeben, einschließlich HTML. Hier sind einige andere Möglichkeiten, wie Sie es verwenden können:
tokenizer = AutoTokenizer.from_pretrained( "ucaslcl/GOT-OCR2_0", device_map="cuda", trust_remote_code=True, ) model = AutoModel.from_pretrained( "ucaslcl/GOT-OCR2_0", trust_remote_code=True, low_cpu_mem_usage=True, use_safetensors=True, pad_token_id=tokenizer.eos_token_id, ) model = model.eval().cuda()
Versuchen Sie es endlich mit LLM
Jetzt kommt der spaßige Teil – die Auswahl eines LLM. Es gab endlose Diskussionen darüber, welches das Beste ist, und überall gab es Artikel. Aber lassen Sie es uns einfach halten: Was ist das LLM, von dem jeder und sein Hund gehört haben? Lama. Also verwenden wir Llama-3.2-1B, um Text zu verarbeiten.
Was können wir aus dem Text lernen? Denken Sie an grundlegende Dinge wie Textklassifizierung, Stimmungsanalyse, Spracherkennung usw. Stellen Sie sich vor, Sie bauen ein System auf, um hochgeladene Dokumente automatisch zu kategorisieren oder eingehende Faxe für eine Apotheke zu sortieren.
Ich überspringe den tiefen Einblick in Prompt Engineering (das ist ein ganz anderer Artikel und ich glaube nicht, dass ich einen schreiben werde), aber hier ist die Grundidee:
def run_ocr_for_file(func: callable, text: str): start_time = time.time() res = func() final_time = time.time() - start_time console.rule(f"[bold red] {text} [/bold red]") console.print(res) console.rule(f"Time: {final_time} seconds") return res result_text = None with console.status( "Running OCR for the result file...", spinner="monkey", ): result_text = run_ocr_for_file( lambda: model.chat( tokenizer, OUTPUT_PNG_FILE, ocr_type="ocr", ), "plain texts OCR", )
Übrigens, mache ich hier etwas unglaublich Dummes mit Aufforderung/Inhalt? Lass es mich wissen. Ziemlich neu im Bereich „Prompt Engineering“ und ich nehme es noch nicht ernst genug.
Das Modell verpackt das Ergebnis manchmal in Markdown-Codeblöcke, also müssen wir damit umgehen (falls jemand einen saubereren Weg kennt, ich bin ganz Ohr):
Hugging Face- The Al community building the future. https: / / hugging face. co/ Search models, datasets, users. . . Following 0 All Models Datasets Spaces Papers Collections Community Posts Up votes Likes New Follow your favorite Al creators Refresh List black- forest- labs· Advancing state- of- the- art image generation Follow stability a i· Sharing open- source image generation models Follow bria a i· Specializing in advanced image editing models Follow Trending last 7 days All Models Datasets Spaces deep see k- a i/ Deep Seek- V 3 Updated 3 days ago· 40 k· 877 deep see k- a i/ Deep Seek- V 3- Base Updated 3 days ago· 6.34 k· 1.06 k 2.39 k TRELLIS Q wen/ QV Q- 72 B- Preview 88888888888888888888 888888888888888888 301 Gemini Co der 1 of 3 2025-01-01,9:38 p. m
Und hier ist, was wir normalerweise als Ausgabe erhalten:
# format texts OCR: result_text = model.chat( tokenizer, image_file, ocr_type='format', ) # fine-grained OCR: result_text = model.chat( tokenizer, image_file, ocr_type='ocr', ocr_box='', ) # ... ocr_type='format', ocr_box='') # ... ocr_type='ocr', ocr_color='') # ... ocr_type='format', ocr_color='') # multi-crop OCR: # ... ocr_type='ocr') # ... ocr_type='format') # render the formatted OCR results: result_text = model.chat( tokenizer, image_file, ocr_type='format', render=True, save_render_file = './demo.html', )
Um zusammenzufassen
Wir haben eine kleine Pipeline erstellt, die eine PDF-Datei aufnehmen, ihren Text mithilfe einer ziemlich guten OCR extrahieren und diesen Text dann mithilfe eines LLM analysieren kann, um nützliche Metadaten zu erhalten. Ist es produktionsreif? Wahrscheinlich nicht. Aber es ist ein guter Ausgangspunkt, wenn Sie etwas Ähnliches bauen möchten. Das Coole daran ist, wie wir verschiedene Open-Source-Tools kombiniert haben, um etwas Nützliches zu schaffen – von der PDF-Verarbeitung über OCR bis hin zur LLM-Analyse.
Sie können dies problemlos erweitern. Fügen Sie möglicherweise eine bessere Fehlerbehandlung hinzu, unterstützen Sie mehrere Seiten oder probieren Sie verschiedene LLMs aus. Oder schließen Sie es vielleicht an ein Dokumentenverwaltungssystem an. Ich hoffe, Sie werden es tun. Es könnte eine lustige Aufgabe sein.
Denken Sie daran, dass dies nur eine Möglichkeit ist – es gibt wahrscheinlich Dutzende anderer Ansätze, die für Ihren spezifischen Anwendungsfall besser funktionieren könnten. Aber hoffentlich gibt Ihnen das einen guten Ausgangspunkt für Ihre eigenen Experimente! Oder ein perfekter Ort, um mir in den Kommentaren zu zeigen, wie es gemacht wird.
Das obige ist der detaillierte Inhalt vonSchnelle und schmutzige Dokumentenanalyse: Kombination von GOT-OCR und LLama in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











Python eignet sich für Datenwissenschafts-, Webentwicklungs- und Automatisierungsaufgaben, während C für Systemprogrammierung, Spieleentwicklung und eingebettete Systeme geeignet ist. Python ist bekannt für seine Einfachheit und sein starkes Ökosystem, während C für seine hohen Leistung und die zugrunde liegenden Kontrollfunktionen bekannt ist.

Sie können die Grundlagen von Python innerhalb von zwei Stunden lernen. 1. Lernen Sie Variablen und Datentypen, 2. Master -Steuerungsstrukturen wie wenn Aussagen und Schleifen, 3. Verstehen Sie die Definition und Verwendung von Funktionen. Diese werden Ihnen helfen, einfache Python -Programme zu schreiben.

Python zeichnet sich in Gaming und GUI -Entwicklung aus. 1) Spielentwicklung verwendet Pygame, die Zeichnungen, Audio- und andere Funktionen bereitstellt, die für die Erstellung von 2D -Spielen geeignet sind. 2) Die GUI -Entwicklung kann Tkinter oder Pyqt auswählen. Tkinter ist einfach und einfach zu bedienen. PYQT hat reichhaltige Funktionen und ist für die berufliche Entwicklung geeignet.

Sie können grundlegende Programmierkonzepte und Fähigkeiten von Python innerhalb von 2 Stunden lernen. 1. Lernen Sie Variablen und Datentypen, 2. Master Control Flow (bedingte Anweisungen und Schleifen), 3.. Verstehen Sie die Definition und Verwendung von Funktionen, 4. Beginnen Sie schnell mit der Python -Programmierung durch einfache Beispiele und Code -Snippets.

Python ist leichter zu lernen und zu verwenden, während C leistungsfähiger, aber komplexer ist. 1. Python -Syntax ist prägnant und für Anfänger geeignet. Durch die dynamische Tippen und die automatische Speicherverwaltung können Sie die Verwendung einfach zu verwenden, kann jedoch zur Laufzeitfehler führen. 2.C bietet Steuerung und erweiterte Funktionen auf niedrigem Niveau, geeignet für Hochleistungsanwendungen, hat jedoch einen hohen Lernschwellenwert und erfordert manuellem Speicher und Typensicherheitsmanagement.

Python wird in den Bereichen Webentwicklung, Datenwissenschaft, maschinelles Lernen, Automatisierung und Skripten häufig verwendet. 1) In der Webentwicklung vereinfachen Django und Flask Frameworks den Entwicklungsprozess. 2) In den Bereichen Datenwissenschaft und maschinelles Lernen bieten Numpy-, Pandas-, Scikit-Learn- und TensorFlow-Bibliotheken eine starke Unterstützung. 3) In Bezug auf Automatisierung und Skript ist Python für Aufgaben wie automatisiertes Test und Systemmanagement geeignet.

Um die Effizienz des Lernens von Python in einer begrenzten Zeit zu maximieren, können Sie Pythons DateTime-, Zeit- und Zeitplanmodule verwenden. 1. Das DateTime -Modul wird verwendet, um die Lernzeit aufzuzeichnen und zu planen. 2. Das Zeitmodul hilft, die Studie zu setzen und Zeit zu ruhen. 3. Das Zeitplanmodul arrangiert automatisch wöchentliche Lernaufgaben.

Python ist für seine Einfachheit und Kraft sehr beliebt, geeignet für alle Anforderungen von Anfängern bis hin zu fortgeschrittenen Entwicklern. Seine Vielseitigkeit spiegelt sich in: 1) leicht zu erlernen und benutzten, einfachen Syntax; 2) Reiche Bibliotheken und Frameworks wie Numpy, Pandas usw.; 3) plattformübergreifende Unterstützung, die auf einer Vielzahl von Betriebssystemen betrieben werden kann; 4) Geeignet für Skript- und Automatisierungsaufgaben zur Verbesserung der Arbeitseffizienz.
