


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!

Dieses Tutorial zeigt, wie man Python verwendet, um das statistische Konzept des Zipf -Gesetzes zu verarbeiten, und zeigt die Effizienz des Lesens und Sortierens großer Textdateien von Python bei der Bearbeitung des Gesetzes. Möglicherweise fragen Sie sich, was der Begriff ZiPF -Verteilung bedeutet. Um diesen Begriff zu verstehen, müssen wir zunächst das Zipf -Gesetz definieren. Mach dir keine Sorgen, ich werde versuchen, die Anweisungen zu vereinfachen. Zipf -Gesetz Das Zipf -Gesetz bedeutet einfach: In einem großen natürlichen Sprachkorpus erscheinen die am häufigsten vorkommenden Wörter ungefähr doppelt so häufig wie die zweiten häufigen Wörter, dreimal wie die dritten häufigen Wörter, viermal wie die vierten häufigen Wörter und so weiter. Schauen wir uns ein Beispiel an. Wenn Sie sich den Brown Corpus in amerikanischem Englisch ansehen, werden Sie feststellen, dass das häufigste Wort "Th ist

Python bietet eine Vielzahl von Möglichkeiten zum Herunterladen von Dateien aus dem Internet, die über HTTP über das Urllib -Paket oder die Anforderungsbibliothek heruntergeladen werden können. In diesem Tutorial wird erläutert, wie Sie diese Bibliotheken verwenden, um Dateien von URLs von Python herunterzuladen. Anfragen Bibliothek Anfragen ist eine der beliebtesten Bibliotheken in Python. Es ermöglicht das Senden von HTTP/1.1 -Anfragen, ohne die URLs oder die Formulierung von Postdaten manuell hinzuzufügen. Die Anforderungsbibliothek kann viele Funktionen ausführen, einschließlich: Formulardaten hinzufügen Fügen Sie mehrteilige Datei hinzu Greifen Sie auf Python -Antwortdaten zu Eine Anfrage stellen Kopf

In diesem Artikel wird erklärt, wie man schöne Suppe, eine Python -Bibliothek, verwendet, um HTML zu analysieren. Es beschreibt gemeinsame Methoden wie find (), find_all (), select () und get_text () für die Datenextraktion, die Behandlung verschiedener HTML -Strukturen und -Anternativen (SEL)

Der Umgang mit lauten Bildern ist ein häufiges Problem, insbesondere bei Mobiltelefonen oder mit geringen Auflösungskamera-Fotos. In diesem Tutorial wird die Bildfilterungstechniken in Python unter Verwendung von OpenCV untersucht, um dieses Problem anzugehen. Bildfilterung: Ein leistungsfähiges Werkzeug Bildfilter

PDF-Dateien sind für ihre plattformübergreifende Kompatibilität beliebt, wobei Inhalte und Layout für Betriebssysteme, Lesegeräte und Software konsistent sind. Im Gegensatz zu Python Processing -Klartextdateien sind PDF -Dateien jedoch binäre Dateien mit komplexeren Strukturen und enthalten Elemente wie Schriftarten, Farben und Bilder. Glücklicherweise ist es nicht schwierig, PDF -Dateien mit Pythons externen Modulen zu verarbeiten. In diesem Artikel wird das PYPDF2 -Modul verwendet, um zu demonstrieren, wie Sie eine PDF -Datei öffnen, eine Seite ausdrucken und Text extrahieren. Die Erstellung und Bearbeitung von PDF -Dateien finden Sie in einem weiteren Tutorial von mir. Vorbereitung Der Kern liegt in der Verwendung von externem Modul PYPDF2. Installieren Sie es zunächst mit PIP: pip ist p

Dieses Tutorial zeigt, wie man Redis Caching nutzt, um die Leistung von Python -Anwendungen zu steigern, insbesondere innerhalb eines Django -Frameworks. Wir werden Redis -Installation, Django -Konfiguration und Leistungsvergleiche abdecken, um den Vorteil hervorzuheben

Die natürliche Sprachverarbeitung (NLP) ist die automatische oder semi-automatische Verarbeitung der menschlichen Sprache. NLP ist eng mit der Linguistik verwandt und hat Verbindungen zur Forschung in kognitiven Wissenschaft, Psychologie, Physiologie und Mathematik. In der Informatik

Dieser Artikel vergleicht TensorFlow und Pytorch für Deep Learning. Es beschreibt die beteiligten Schritte: Datenvorbereitung, Modellbildung, Schulung, Bewertung und Bereitstellung. Wichtige Unterschiede zwischen den Frameworks, insbesondere bezüglich des rechnerischen Graps


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

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

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

Dreamweaver CS6
Visuelle Webentwicklungstools
