Heim >Technologie-Peripheriegeräte >KI >Paligemma 2 Mix: Ein Leitfaden mit Demo OCR -Projekt
Paligemma 2 Mix ist ein von Google entwickeltes multimodales KI -Modell. Es handelt sich um eine verbesserte Version des Paligemma Vision Language Model (VLM), das erweiterte Funktionen aus dem Siglip Vision -Modell und Gemma 2 -Sprachmodellen integriert.
In diesem Tutorial erkläre ich, wie man den Paligemma 2-Mix verwendet, um einen AI-angetriebenen Billscanner und Ausgabenanalysator zu erstellen, der:
in der Lage ist,:Während unser Fokus auf dem Erstellen eines finanziellen Insights -Tools liegt, können Sie das, was Sie in diesem Blog lernen, andere Anwendungsfälle von Paligemma 2 -Mix wie Bildsegmentierung, Objekterkennung und Beantwortung von Fragen verwenden.
Paligemma 2 Mix ist ein erweitertes Vision-Sprach-Modell (VLM), das sowohl Bilder als auch Text als Eingabe verarbeitet und textbasierte Ausgänge generiert. Es ist für eine Vielzahl multimodaler KI -Aufgaben ausgelegt, während mehrere Sprachen unterstützt werden.
Paligemma 2 wurde für eine Vielzahl von auf Visionsprachlustern, einschließlich Bild- und Kurzvideosende, visuelle Fragenbeantwortung, optische Charaktererkennung (OCR), Objekterkennung und Segmentierung entwickelt.
.
Quelle der im Diagramm verwendeten Bilder: Google
Projektübersicht: Billscanner und Ausgabenanalysator mit Paligemma 2 Mix
Lassen Sie uns die Hauptschritte skizzieren, die wir unternehmen werden:Bevor wir beginnen, stellen wir sicher, dass die folgenden Tools und Bibliotheken installiert sind:
Führen Sie die folgenden Befehle aus, um die erforderlichen Abhängigkeiten zu installieren:
pip install gradio -U bitsandbytes -U transformers -q
Sobald die obigen Abhängigkeiten installiert sind, führen Sie die folgenden Importbefehle aus:
import gradio as gr import torch import pandas as pd import matplotlib.pyplot as plt from transformers import PaliGemmaForConditionalGeneration, PaliGemmaProcessor, BitsAndBytesConfig from transformers import BitsAndBytesConfig from PIL import Image import re
Wir konfigurieren und laden das Paligemma 2 -Mixmodell mit Quantisierung, um die Leistung zu optimieren. Für diese Demo verwenden wir das 10B -Parametermodell mit 448 x 448 Eingangsbildauflösung. Sie benötigen ein Minimum von T4 GPU mit 40 GB Speicher (Colab -Konfiguration), um dieses Modell auszuführen.
device = "cuda" if torch.cuda.is_available() else "cpu" # Model setup model_id = "google/paligemma2-10b-mix-448" bnb_config = BitsAndBytesConfig( load_in_8bit=True, # Change to load_in_4bit=True for even lower memory usage llm_int8_threshold=6.0, ) # Load model with quantization model = PaliGemmaForConditionalGeneration.from_pretrained( model_id, quantization_config=bnb_config ).eval() # Load processor processor = PaliGemmaProcessor.from_pretrained(model_id) # Print success message print("Model and processor loaded successfully!")
BitsandBytes Quantisierung hilft bei der Verringerung des Speicherverbrauchs gleichzeitig die Leistung und ermöglicht es, große Modelle für begrenzte GPU -Ressourcen durchzuführen. In dieser Implementierung verwenden wir die 4-Bit-Quantisierung, um die Speichereffizienz weiter zu optimieren.
Wir laden das Modell mit der Paligemmaforconditionalgenerationsklasse aus der Transformers -Bibliothek, indem Sie die Modell -ID und die Quantisierungskonfiguration übergeben. In ähnlicher Weise laden wir den Prozessor, der die Eingänge in Tensoren vorbereitet, bevor wir sie an das Modell übergeben.
Sobald die Modellscherben geladen sind, verarbeiten wir die Bilder, bevor wir sie an das Modell weitergeben, um die Kompatibilität des Bildformates aufrechtzuerhalten und Gleichmäßigkeit zu gewinnen. Wir konvertieren Bilder in das RGB -Format:
def ensure_rgb(image: Image.Image) -> Image.Image: if image.mode != "RGB": image = image.convert("RGB") return image
Jetzt sind unsere Bilder bereit für die Schlussfolgerung.
Jetzt richten wir die Hauptfunktion für die Ausführung von Inferenz mit dem Modell ein. Diese Funktion nimmt Inputbilder und Fragen auf, integriert sie in Eingabeaufforderungen und übergibt sie über den Prozessor für Inferenz an das Modell.
def ask_model(image: Image.Image, question: str) -> str: prompt = f"<image> answer en {question}" inputs = processor(text=prompt, images=image, return_tensors="pt").to(device) with torch.inference_mode(): generated_ids = model.generate( **inputs, max_new_tokens=50, do_sample=False ) result = processor.batch_decode(generated_ids, skip_special_tokens=True) return result[0].strip()
Jetzt, da wir die Hauptfunktion bereit haben, werden wir als nächstes daran arbeiten, die Schlüsselparameter aus dem Bild zu extrahieren - in unserem Fall sind dies die Gesamtmenge und die Kategorie der Ware.
pip install gradio -U bitsandbytes -U transformers -q
Die Funktion extract_total_amount () verarbeitet ein Bild, um die Gesamtmenge aus einer Quittung mit OCR zu extrahieren. Es konstruiert eine Abfrage (Frage), die das Modell anweist, nur numerische Werte zu extrahieren, und ruft dann die Funktion Ask_Model () auf, um eine Antwort aus dem Modell zu generieren.
import gradio as gr import torch import pandas as pd import matplotlib.pyplot as plt from transformers import PaliGemmaForConditionalGeneration, PaliGemmaProcessor, BitsAndBytesConfig from transformers import BitsAndBytesConfig from PIL import Image import re
Die Funktion categorize_goods () klassifiziert die Art von Waren in einem Bild, indem das Modell mit einer vordefinierten Frage auflistet, mögliche Kategorien: Lebensmittelgeschäft, Kleidung, Elektronik oder andere. Die Funktion Ask_Model () verarbeitet dann das Bild und gibt eine Textantwort zurück. Wenn die verarbeitete Antwort einer der vordefinierten gültigen Kategorien entspricht, wird diese Kategorie zurückgegeben - andernfalls werden sie standardmäßig in die Kategorie "Andere" eingestuft.
Wir haben alle wichtigen Funktionen bereit, also analysieren wir die Ausgänge.
device = "cuda" if torch.cuda.is_available() else "cpu" # Model setup model_id = "google/paligemma2-10b-mix-448" bnb_config = BitsAndBytesConfig( load_in_8bit=True, # Change to load_in_4bit=True for even lower memory usage llm_int8_threshold=6.0, ) # Load model with quantization model = PaliGemmaForConditionalGeneration.from_pretrained( model_id, quantization_config=bnb_config ).eval() # Load processor processor = PaliGemmaProcessor.from_pretrained(model_id) # Print success message print("Model and processor loaded successfully!")
Die obige Funktion erstellt ein Kreisdiagramm zur Visualisierung der Ausgabenverteilung über verschiedene Kategorien hinweg. Wenn keine gültigen Ausgabendaten vorhanden sind, generiert sie eine leere Figur mit einer Meldung, die "keine Ausgabendaten" angibt. Andernfalls erstellt es ein Kreisdiagramm mit Kategoriebezeichnungen und Prozentwerten, um eine proportionale und gut ausgerichtete Visualisierung zu gewährleisten.
Wir haben normalerweise mehrere Rechnungen zu analysieren. Erstellen wir also eine Funktion, um alle unsere Rechnungen gleichzeitig zu verarbeiten.
def ensure_rgb(image: Image.Image) -> Image.Image: if image.mode != "RGB": image = image.convert("RGB") return image
Für die Analyse mehrerer Rechnungen gleichzeitig führen wir die folgenden Schritte aus:
Schritt 7: Erstellen Sie die Gradio -Schnittstelle
def ask_model(image: Image.Image, question: str) -> str: prompt = f"<image> answer en {question}" inputs = processor(text=prompt, images=image, return_tensors="pt").to(device) with torch.inference_mode(): generated_ids = model.generate( **inputs, max_new_tokens=50, do_sample=False ) result = processor.batch_decode(generated_ids, skip_special_tokens=True) return result[0].strip()Jetzt haben wir alle wichtigen Logikfunktionen. Als nächstes arbeiten wir daran, eine interaktive Benutzeroberfläche mit Gradio zu bauen.
Der obige Code erstellt eine strukturierte UI mit einem Datei -Uploader für mehrere Bilder und eine Schaltfläche Senden, um die Verarbeitung auszulösen. Bei der Einreichung werden in einer Galerie hochgeladene Billbilder angezeigt, extrahierte Daten in einer Tabelle angezeigt, die Gesamtausgaben werden im Text zusammengefasst und ein Kreisdiagramm für Ausgabenverteilungen erstellt.
Die Funktion verbindet Benutzereingänge mit der Funktion process_multiple_bills () und stellt die nahtlose Datenextraktion und Visualisierung sicher. Schließlich startet die Demo.launch () -Funktion die Gradio-App für Echtzeitinteraktion.
Ich habe diese Demo auch mit zwei bildbasierten Rechnungen (Amazon Shopping-Rechnung) ausprobiert und die folgenden Ergebnisse erzielt.
HINWEIS: VLMS fällt es schwierig, Zahlen zu extrahieren, was manchmal zu falschen Ergebnissen führen kann. Zum Beispiel hat es den falschen Gesamtbetrag für die zweite Rechnung unten extrahiert. Dies ist durch die Verwendung größerer Modelle oder einfach die vorhandenen Einstimmen korrigierbar.
In diesem Tutorial haben wir einen KI-angetriebenen Multiple-Bill-Scanner mit einem Paligemma 2-Mix erstellt, mit dem wir unsere Ausgaben aus Quittungen extrahieren und kategorisieren können. Wir haben Paligemma 2 Mixs Vision-Sprache-Funktionen für OCR und Klassifizierung verwendet, um die Ausgabenerkenntnisse mühelos zu analysieren. Ich ermutige Sie, dieses Tutorial an Ihren eigenen Anwendungsfall anzupassen.
Das obige ist der detaillierte Inhalt vonPaligemma 2 Mix: Ein Leitfaden mit Demo OCR -Projekt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!