Automatisieren Sie Rechnungsbilder mit OCI Vision und OCI Generative AI
Einführung
Unternehmen erhalten oft Tausende von Rechnungen in unstrukturierten Formaten als gescannte Bilder oder PDFs von Lieferanten und Dienstleistern. Das manuelle Extrahieren von Daten aus diesen Ausgangsrechnungen, wie Rechnungsnummer, Kundenname, gekaufte Artikel und Gesamtbetrag, ist ein zeitaufwendiger und fehleranfälliger Prozess.
Diese Verzögerungen bei der Verarbeitung wirken sich nicht nur auf die Kreditorenzyklen und die Transparenz des Cashflows aus, sondern führen auch zu Engpässen bei Compliance, Auditing und Reporting.
Dieses Tutorial zeigt, wie Sie eine automatisierte Pipeline implementieren, die einen Bucket in Oracle Cloud Infrastructure (OCI) auf eingehende Rechnungsimages überwacht, Textinhalte mit OCI Vision extrahiert und dann OCI Generative AI (LLM) anwendet, um strukturierte Steuerdaten wie Rechnungsnummer, Kunde und Artikelliste zu extrahieren.
In diesem Tutorial werden folgende OCI-Services verwendet:
Service | Zweck |
---|---|
OCI Vision | Führt OCR für hochgeladene Rechnungsbilder aus. |
OCI Generative AI | Extrahiert strukturierte JSON-Daten aus OCR-Rohtext mit Wenig-Schuss-Prompts. |
OCI Object Storage | Speichert eingegebene Rechnungsbilder und gibt JSON-Ergebnisse aus. |
Ziele
-
Automatisieren Sie die Rechnungsaufnahme aus OCI Object Storage.
-
Strukturierte Daten aus halbstrukturierten gescannten Dokumenten extrahieren.
-
Integrieren Sie Optical Character Recognition (OCR) und LLM mit OCI AI Services in Echtzeit-Pipelines.
Voraussetzungen
-
Ein OCI-Account mit Zugriff auf:
-
OCI Vision
-
OCI Generative AI
-
OCI Object Storage
-
-
Eine Python-
3.10
-Version oder höher. -
Ein Bucket für Eingabeimages (z.B.
input-bucket
) und ein weiterer für Ausgabedateien (z.B.output-bucket
). -
Laden Sie die folgenden Dateien herunter:
Aufgabe 1: Python-Packages konfigurieren
-
Führen Sie die Datei
requirements.txt
mit dem folgenden Befehl aus.pip install -r requirements.txt
-
Führen Sie das Python-Skript aus (
main.py
). -
Laden Sie Rechnungsbilder (z.B.
.png
,.jpg
) in den Eingabe-Bucket hoch. -
Warten Sie, bis das Image verarbeitet und die extrahierte JSON im Ausgabe-Bucket gespeichert wird.
Aufgabe 2: Code verstehen
-
Konfiguration laden:
with open("./config", "r") as f: config_data = json.load(f)
Dieser Code lädt alle erforderlichen Konfigurationswerte, wie Namespace, Bucket-Namen, Compartment-ID und LLM-Endpunkt.
Geben Sie Ihre Konfigurationsparameter in die Datei
config
ein.{ "oci_profile": "DEFAULT", "namespace": "your_namespace", "input_bucket": "input-bucket", "output_bucket": "output-bucket", "compartment_id": "ocid1.compartment.oc1..xxxx", "llm_endpoint": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com" }
-
OCI-Clients initialisieren:
oci_config = oci.config.from_file("~/.oci/config", PROFILE) object_storage = oci.object_storage.ObjectStorageClient(oci_config) ai_vision_client = oci.ai_vision.AIServiceVisionClient(oci_config)
Dieser Code richtet die OCI-SDK-Clients ein, um auf OCI Object Storage- und OCI Vision-Services zuzugreifen. Weitere Informationen finden Sie unter OCI Vision.
-
LLM initialisieren:
llm = ChatOCIGenAI( model_id="meta.llama-3.1-405b-instruct", service_endpoint=LLM_ENDPOINT, compartment_id=COMPARTMENT_ID, auth_profile=PROFILE, model_kwargs={"temperature": 0.7, "top_p": 0.75, "max_tokens": 2000}, )
Dieser Code initialisiert das OCI Generative AI-Modell für das Verständnis natürlicher Sprache und die Konvertierung von Text zu Struktur.
-
Prompt mit wenigen Schüssen:
few_shot_examples = [ ... ] instruction = """ You are a fiscal data extractor. ... """
Dieser Code verwendet Lernen mit wenigen Schüssen, indem ein Beispiel für die erwartete Ausgabe angegeben wird. Daher lernt das Modell, wie strukturierte Felder wie
number of invoice
,customer
,location
unditems
extrahiert werden. -
OCR mit OCI Vision:
def perform_ocr(file_name): print(f"📄 Performing OCR on: {file_name}") response = ai_vision_client.analyze_document( analyze_document_details=oci.ai_vision.models.AnalyzeDocumentDetails( features=[ oci.ai_vision.models.DocumentTableDetectionFeature( feature_type="TEXT_DETECTION")], document=oci.ai_vision.models.ObjectStorageDocumentDetails( source="OBJECT_STORAGE", namespace_name=NAMESPACE, bucket_name=INPUT_BUCKET, object_name=file_name), compartment_id=COMPARTMENT_ID, language="POR", document_type="INVOICE") ) print(response.data) return response.data
Diese Funktion:
- Sendet das Bild an OCI Vision.
- Fordert Texterkennung an.
- Gibt den extrahierten Rohtext zurück.
-
Datenextraktion mit LLM:
def extract_data_with_llm(ocr_result, file_name): # 🔍 Extrai texto OCR (usando a estrutura da resposta do OCI Vision) extracted_lines = [] for page in getattr(ocr_result, 'pages', []): for line in getattr(page, 'lines', []): extracted_lines.append(line.text.strip()) plain_text = "\n".join(extracted_lines) # 🧠 Monta o prompt com instrução, few-shot e texto OCR limpo prompt = instruction + "\n" + "\n".join(few_shot_examples) + f"\nInvoice text:\n{plain_text}\nExtracted fields (JSON format):" # 🔗 Chamada ao LLM response = llm([HumanMessage(content=prompt)]) # 🧪 Tenta extrair JSON puro da resposta try: content = response.content.strip() first_brace = content.find("{") last_brace = content.rfind("}") json_string = content[first_brace:last_brace + 1] parsed_json = json.loads(json_string) except Exception as e: print(f"⚠️ Erro ao extrair JSON da resposta do LLM: {e}") parsed_json = {"raw_response": response.content} return { "file": file_name, "result": parsed_json, "timestamp": datetime.utcnow().isoformat() }
Diese Funktion:
- Kombiniert Anweisungen, Beispiel mit wenigen Schüssen und OCR-Text.
- Bereitet die von OCI Vision zurückgegebenen OCR-Daten vor.
- Sendet sie an OCI Generative AI.
- Empfängt strukturierte JSON-Felder (als Zeichenfolge).
- OCI Vision unterstützt portugiesische OCR (
language="POR"
kann anstelle von"ENG"
verwendet werden).
-
Ausgabe in OCI Object Storage speichern:
def save_output(result, file_name): ...
Dieser Code lädt das strukturierte Ergebnis mit dem ursprünglichen Dateinamen mit der Erweiterung
.json
in den Ausgabe-Bucket hoch. -
Hauptschleife - Überwachen und verarbeiten:
def monitor_bucket(): ...
Hauptroutine, die:
- Überwacht den Eingabe-Bucket alle 30 Sekunden.
- Ermittelt neue
.png
-,.jpg
-,.jpeg
-Dateien. - Führt OCR, LLM und Upload nacheinander aus.
- Verfolgt bereits verarbeitete Dateien im Speicher.
-
Einstiegspunkt:
if __name__ == "__main__": monitor_bucket()
Dieser Code startet den Bucket Watcher und beginnt mit der automatischen Verarbeitung von Rechnungen.
3. Aufgabe: Code ausführen
Führen Sie den Code mit dem folgenden Befehl aus.
python main.py
Aufgabe 4: Testvorschläge
-
Verwenden Sie echte oder Dummy-Rechnungen mit lesbaren Produktlinien und Kundennamen.
-
Laden Sie mehrere Bilder im Eingabe-Bucket nacheinander hoch, um die automatisierte Verarbeitung anzuzeigen.
-
Melden Sie sich bei der OCI-Konsole an, und navigieren Sie zu Object Storage, um die Ergebnisse in beiden Buckets zu prüfen.
Hinweis: In diesem Tutorial wird als Beispiel eine brasilianische Rechnung verwendet, um die Komplexität der Attribute und Disposition zu veranschaulichen und zu veranschaulichen, wie der Prompt zur Lösung dieses Falls erstellt wurde.
Aufgabe 5: Erwartete Ausgabe anzeigen
Sehen Sie sich für jedes hochgeladene Rechnungsbild die verarbeitete Ausgabe-Bucket-Datei an. Eine entsprechende .json
-Datei wird mit strukturiertem Inhalt generiert, wie in der folgenden Abbildung dargestellt.
Hinweis:
- OCI Vision unterstützt portugiesische OCR (
language="POR"
kann anstelle von"ENG"
verwendet werden).- Der LLM-Prompt kann angepasst werden, um andere Felder wie
CNPJ
,quantidade
,data de emissão
usw. zu extrahieren.- Sie sollten
processed_files
mit einer Datenbank oder Datei persistieren, um den Prozess fehlertolerant zu machen.- Dieser Prozess kann mit dem Anwendungsfall KI-Agent mit Multi-Agent Communication Protocol Server zur Rechnungsauflösung erstellen als vorverarbeitetes Rechnungsbild verwendet werden. Die Rechnung ist eine Abweichungsrechnung des Firmenkunden. Die Felder "Kunde" und "Standort" werden vom Rechnungsersteller erfasst.
Verwandte Links
Bestätigungen
- Autor – Cristiano Hoshikawa (Oracle LAD A – Team Solution Engineer)
Weitere Lernressourcen
Sehen Sie sich weitere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um ein Oracle Learning Explorer zu werden.
Die Produktdokumentation finden Sie im Oracle Help Center.
Automate Invoice Images with OCI Vision and OCI Generative AI
G39782-01
Copyright ©2025, Oracle and/or its affiliates.