Automatizza le immagini delle fatture con OCI Vision e OCI Generative AI
Introduzione
Le aziende ricevono spesso migliaia di fatture in formati non strutturati come immagini scansionate o PDF provenienti da fornitori e fornitori di servizi. L'estrazione manuale dei dati da queste fatture, ad esempio il numero di fattura, il nome del cliente, gli articoli acquistati e l'importo totale, è un processo dispendioso in termini di tempo e soggetto a errori.
Questi ritardi nell'elaborazione non solo influiscono sui cicli di contabilità fornitori e sulla visibilità dei flussi di cassa, ma introducono anche colli di bottiglia in termini di conformità, audit e reporting.
Questa esercitazione descrive come implementare una pipeline automatizzata che monitora un bucket in Oracle Cloud Infrastructure (OCI) per le immagini delle fatture in entrata, estrae il contenuto testuale utilizzando OCI Vision e quindi applica OCI Generative AI (LLM) per estrarre dati fiscali strutturati come numero di fattura, cliente e elenco di articoli.
I servizi OCI utilizzati in questa esercitazione sono:
Servizio | Scopo |
---|---|
OCI Vision | Esegue OCR sulle immagini delle fatture caricate. |
AI generativa OCI | Estrae i dati JSON strutturati dal testo OCR raw utilizzando prompt con poche immagini. |
Memorizzazione degli oggetti OCI | Memorizza le immagini delle fatture di input e i risultati JSON di output. |
Obiettivi
-
Automatizza l'inclusione delle fatture dallo storage degli oggetti OCI.
-
Estrai dati strutturati da documenti scansionati semistrutturati.
-
Integra il riconoscimento ottico dei caratteri (OCR) e l'LLM in pipeline in tempo reale utilizzando i servizi AI OCI.
Prerequisiti
-
Un account OCI con accesso a:
-
OCI Vision
-
AI generativa OCI
-
Memorizzazione degli oggetti OCI
-
-
3.10
Python o versione successiva. -
Un bucket per le immagini di input (ad esempio,
input-bucket
) e un altro per i file di output (ad esempio,output-bucket
). -
Scaricare i seguenti file:
Task 1: Configurare i pacchetti Python
-
Eseguire il file
requirements.txt
utilizzando il comando seguente.pip install -r requirements.txt
-
Eseguire lo script Python (
main.py
). -
Caricare le immagini delle fatture (ad esempio,
.png
,.jpg
) nel bucket di input. -
Attendere che l'immagine venga elaborata e che il file JSON estratto venga salvato nel bucket di output.
Task 2: Comprendere il codice
-
Configurazione caricamento:
with open("./config", "r") as f: config_data = json.load(f)
Questo codice carica tutti i valori di configurazione richiesti, ad esempio lo spazio di nomi, i nomi bucket, l'ID compartimento e l'endpoint LLM.
Immettere i parametri di configurazione nel file
config
.{ "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" }
-
Inizializza client OCI:
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)
Questo codice imposta i client SDK OCI per accedere ai servizi OCI Object Storage e OCI Vision. Per ulteriori informazioni, vedere OCI Vision.
-
Inizializza LLM:
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}, )
Questo codice inizializza il modello OCI Generative AI per la comprensione del linguaggio naturale e la conversione da testo a struttura.
-
Prompt pochi screenshot:
few_shot_examples = [ ... ] instruction = """ You are a fiscal data extractor. ... """
Questo codice utilizza l'apprendimento con poche immagini fornendo un esempio di output previsto in modo che il modello impari come estrarre campi strutturati come
number of invoice
,customer
,location
eitems
. -
OCR con 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
Questa funzione:
- Invia l'immagine a OCI Vision.
- Richieste di rilevamento del testo.
- Restituisce il testo raw estratto.
-
Estrazione dei dati con 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() }
Questa funzione:
- Combina istruzioni, esempi con poche immagini e testo OCR.
- Prepara i dati OCR restituiti da OCI Vision.
- Lo invia all'AI generativa OCI.
- Riceve campi JSON strutturati (come stringa).
- OCI Vision supporta l'OCR portoghese (è possibile utilizzare
language="POR"
anziché"ENG"
).
-
Salva output nello storage degli oggetti OCI:
def save_output(result, file_name): ...
Questo codice carica il risultato strutturato nel bucket di output utilizzando il nome file originale con estensione
.json
. -
Loop principale - Monitor e processo:
def monitor_bucket(): ...
Principale routine che:
- Monitora il bucket di input ogni 30 secondi.
- Rileva nuovi file
.png
,.jpg
e.jpeg
. - Esegue OCR, LLM e carica in sequenza.
- Mantiene traccia dei file già elaborati in memoria.
-
Punto di accesso:
if __name__ == "__main__": monitor_bucket()
Questo codice avvia l'osservatore del bucket e inizia a elaborare automaticamente le fatture.
Task 3: Esecuzione del codice
Eseguire il codice utilizzando il comando seguente.
python main.py
Task 4: Suggerimenti test
-
Utilizza fatture reali o fittizie con linee di prodotti leggibili e nome cliente.
-
Caricare più immagini nel bucket di input in sequenza per visualizzare l'elaborazione automatica.
-
Eseguire il login a OCI Console, andare a Storage degli oggetti per verificare i risultati in entrambi i bucket.
Nota: in questa esercitazione, il campione utilizzato è una fattura brasiliana per illustrare la complessità degli attributi e della disposizione e la modalità di creazione del prompt per risolvere questo caso.
Task 5: Visualizza output previsto
Per ogni immagine della fattura caricata, esaminare il file del bucket di output elaborato. Viene generato un file .json
corrispondente con contenuto strutturato come mostrato nell'immagine seguente.
Nota:
- OCI Vision supporta l'OCR portoghese (è possibile utilizzare
language="POR"
anziché"ENG"
).- Il prompt LLM può essere modificato per estrarre altri campi quali
CNPJ
,quantidade
,data de emissão
e così via.- Prendere in considerazione la possibilità di rendere persistente
processed_files
con un database o un file per rendere il processo tollerante agli errori.- Questo processo può essere utilizzato con il caso d'uso: Crea un agente AI con il server del protocollo di comunicazione multi-agente per la risoluzione delle fatture come immagine di fattura pre-elaborata. La fattura è una fattura di devoluzione del cliente della società. I campi Cliente e Ubicazione vengono acquisiti dall'autore della fattura.
Collegamenti correlati
Conferme
- Autore - Cristiano Hoshikawa (Oracle LAD A - Solution Engineer del team)
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti di formazione gratuiti sul canale YouTube di Oracle Learning. Inoltre, visitare education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.
Per la documentazione del prodotto, visitare Oracle Help Center.
Automate Invoice Images with OCI Vision and OCI Generative AI
G39785-01
Copyright ©2025, Oracle and/or its affiliates.