Rilevamento di tabelle ed estrazione di informazioni utilizzando il Deep Learning PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Rilevamento tabelle ed estrazione di informazioni tramite Deep Learning


Introduzione all'estrazione di tabelle

La quantità di dati raccolti sta aumentando drasticamente di giorno in giorno con un numero crescente di applicazioni, software e piattaforme online.

Per gestire/accedere a questi enormi dati in modo produttivo, è necessario sviluppare preziosi strumenti di estrazione delle informazioni.

Una delle sottoaree che richiede attenzione nel campo Estrazione delle informazioni è l'estrazione di tabelle da immagini o il rilevamento di dati tabulari da moduli, PDF e documenti.

Estrazione da tavolo è il compito di rilevare e scomporre le informazioni della tabella in un documento.

Table OCR - Nanonet che estraggono i dati della tabella da un'immagine!
Table OCR – Nanonet che estraggono i dati della tabella da un'immagine!

Immagina di avere molti documenti con dati tabulari che devi estrarre per un'ulteriore elaborazione. Convenzionalmente, puoi copiarli manualmente (su carta) o caricarli in fogli excel.

Tuttavia, con il software Table OCR, puoi rilevare automaticamente le tabelle ed estrarre tutti i dati tabulari dai documenti in una volta sola. Ciò consente di risparmiare un sacco di tempo e rielaborare.

In questo articolo, esamineremo prima come Nanonets può estrarre automaticamente tabelle da immagini o documenti. Tratteremo quindi alcune tecniche DL popolari per rilevare ed estrarre tabelle nei documenti.


Vuoi estrarre dati tabulari da fatture, scontrini o qualsiasi altro tipo di documento? Dai un'occhiata a Nanonet Estrattore di tabelle PDF per estrarre dati tabulari. Pianificare una demo per saperne di più sull'automazione estrazione da tavolo.


Sommario

Estrai la tabella dall'immagine con l'OCR della tabella Nanonets

  • Iscriviti adesso per un account Nanonets gratuito

    • Carica immagini/file sul modello Nanonets Table OCR
    • Nanonets rileva ed estrae automaticamente tutti i dati tabulari
    • Modifica e rivedi i dati (se richiesto)
    • Esporta i dati elaborati come Excel, csv o JSON

Estrai la tabella dall'immagine con Nanonets

Vuoi raschiare i dati dal PDF documenti, convertire la tabella PDF in Excel or automatizzare l'estrazione della tabella? Scoprire come Nanonet Raschietto PDF or Analizzatore PDF può potenziare la tua attività per essere più produttiva.


API OCR tabella nanonet

Table OCR con Nanonet
Table OCR con Nanonet

Il API OCR di nanoneti ti permette di costruire facilmente modelli OCR. Non devi preoccuparti di pre-elaborare le tue immagini o preoccuparti di abbinare modelli o costruire motori basati su regole per aumentare l'accuratezza del tuo modello OCR.

Puoi caricare i tuoi dati, annotarli, impostare il modello da addestrare e attendere di ricevere previsioni tramite un'interfaccia utente basata su browser senza scrivere una singola riga di codice, preoccuparti delle GPU o trovare le architetture giuste per il rilevamento delle tabelle utilizzando modelli di deep learning.

Puoi anche acquisire le risposte JSON di ogni previsione per integrarla con i tuoi sistemi e creare app basate sull'apprendimento automatico basate su algoritmi all'avanguardia e una solida infrastruttura.

https://nanonets.com/documentation/


La tua azienda si occupa di riconoscimento di dati o testo in documenti digitali, PDF o immagini? Ti sei chiesto come estrarre i dati tabulari, estrarre il testo dalle immagini , estrarre i dati dal PDF or estrai il testo da PDF in modo accurato ed efficiente?


Chi troverà utile l'estrazione da tavolo

Come discusso nella sezione precedente, le tabelle vengono utilizzate frequentemente per rappresentare i dati in un formato pulito. Possiamo vederli così spesso in diverse aree, dall'organizzazione del nostro lavoro alla strutturazione dei dati su tabelle all'archiviazione di enormi risorse di aziende. Ci sono molte organizzazioni che hanno a che fare con milioni di tavoli ogni giorno. Per facilitare tali laboriosi compiti di fare tutto manualmente, dobbiamo ricorrere a tecniche più veloci. Discutiamo alcuni casi d'uso in cui estrazione di tabelle può essere essenziale:

Rilevamento di tabelle ed estrazione di informazioni utilizzando il Deep Learning PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
Fonte: Patrizio Tomasso, Spruzza

Casi d'uso personali

Il estrazione da tavolo può essere utile anche per piccoli casi di utilizzo personale. A volte acquisiamo documenti sul telefono cellulare e successivamente li copiamo sui nostri computer. Invece di utilizzare questo processo, possiamo acquisire direttamente i documenti e salvarli come formati modificabili nei nostri modelli personalizzati. Di seguito sono riportati alcuni casi d'uso su come possiamo inserire l'estrazione della tabella nella nostra routine personale:

Scansione di documenti sul telefono: Spesso catturiamo al telefono le immagini di importanti tabelle e le salviamo, ma con la tecnica di estrazione delle tabelle, possiamo catturare le immagini delle tabelle e archiviarle direttamente in un formato tabulare, in fogli Excel o Google. Con questo, non abbiamo bisogno di cercare immagini o copiare il contenuto della tabella in nessun nuovo file, invece, possiamo usare direttamente le tabelle importate e iniziare a lavorare sulle informazioni estratte.

Documenti in HTML: Nelle pagine Web, troviamo un sacco di informazioni presentate utilizzando le tabelle. Ci aiutano in confronto con i dati e ci danno una breve nota sui numeri in modo organizzato. Usando il processo di estrazione della tabella, possiamo scansionare documenti PDF o immagini JPG / PNG e caricare le informazioni direttamente in un formato di tabella personalizzato. Possiamo inoltre scrivere script per aggiungere ulteriori tabelle basate sulle tabelle esistenti e quindi digitalizzare le informazioni. Questo ci aiuta a modificare il contenuto e accelera il processo di archiviazione.


Casi di utilizzo industriale

Esistono diverse industrie in tutto il mondo che si occupano enormemente di scartoffie e documentazione, in particolare nei settori bancario e assicurativo. Dall'archiviazione dei dettagli dei clienti alle esigenze dei clienti, le tabelle sono ampiamente utilizzate. Queste informazioni vengono nuovamente trasmesse come documento (copia cartacea) a diversi rami per le approvazioni, in cui a volte una cattiva comunicazione può portare a errori mentre si acquisiscono informazioni dalle tabelle. Invece, usando l'automazione qui, ci semplifica la vita. Una volta acquisiti e approvati i dati iniziali, possiamo scansionare direttamente quei documenti in tabelle e lavorare ulteriormente sui dati digitalizzati. Per non parlare della riduzione dei tempi e dei guasti, siamo in grado di comunicare ai clienti l'orario e il luogo in cui le informazioni vengono elaborate. Ciò, pertanto, garantisce l'affidabilità dei dati e semplifica il nostro modo di affrontare le operazioni. Diamo ora un'occhiata agli altri possibili casi d'uso:

Controllo di qualità: Il controllo di qualità è uno dei servizi di base offerti dalle migliori industrie. Di solito è fatto internamente e per gli stakeholder. Come parte di questo, ci sono molti moduli di feedback che vengono raccolti dai consumatori per estrarre feedback sul servizio fornito. Nei settori industriali, usano le tabelle per annotare liste di controllo e note giornaliere per vedere come funzionano le linee di produzione. Tutti questi possono essere documentati in un unico posto usando l'estrazione della tabella con facilità.

Traccia delle attività: Nelle industrie manifatturiere, le persone usano tabelle hardcoded per tenere traccia delle entità prodotte come acciaio, ferro, plastica, ecc. Ogni articolo prodotto è etichettato con un numero univoco in cui usa le tabelle per tenere traccia degli articoli prodotti e consegnati ogni giorno. L'automazione può aiutare a risparmiare molto tempo e risorse in termini di errori di posizionamento o incoerenza dei dati.


Casi di utilizzo aziendale

Esistono diverse industrie che funzionano su fogli Excel e moduli offline. Ma ad un certo punto nel tempo, è difficile cercare tra questi fogli e questi moduli. Se stiamo inserendo manualmente queste tabelle è un dispendio di tempo e la probabilità che i dati inseriti in modo errato sarà elevata. Quindi l'estrazione della tabella è un'alternativa migliore per risolvere i casi di utilizzo aziendale in quanto tali di seguito sono pochi.

Fattura Automazione: Ci sono molte industrie su piccola e grande scala di cui fatture sono ancora generati in formati tabulari. Questi non forniscono dichiarazioni fiscali adeguatamente protette. Per superare tali ostacoli, possiamo utilizzare l'estrazione della tabella per convertire tutto fatture in un formato modificabile e quindi aggiornarli a una versione più recente.

Automazione del modulo: I moduli online stanno interrompendo questo metodo collaudato aiutando le aziende a raccogliere le informazioni di cui hanno bisogno e collegandole contemporaneamente ad altre piattaforme software integrate nel loro flusso di lavoro. Oltre a ridurre la necessità di inserimento manuale dei dati (con inserimento automatizzato dei dati) ed e-mail di follow-up, l'estrazione della tabella può eliminare i costi di stampa, spedizione, archiviazione, organizzazione e distruzione delle tradizionali alternative di carta.


Hai un problema con l'OCR in mente? Vuoi digitalizzare fatture, PDF o targhe? Vai a nanonet e costruisci modelli OCR gratis!


Apprendimento profondo in azione

L'apprendimento profondo fa parte della più ampia famiglia di metodi di apprendimento automatico basati su reti neurali artificiali.

La rete neurale è una struttura che riconosce le relazioni sottostanti nei dati dati attraverso un processo che imita il modo in cui opera il cervello umano. Hanno diversi livelli artificiali attraverso i quali passano i dati, dove apprendono le funzionalità. Esistono diverse architetture come NN di convoluzione, NN ricorrenti, Autoencoders, NN generativi dell'avversario per elaborare diversi tipi di dati. Questi sono complessi ma rappresentano alte prestazioni per affrontare i problemi in tempo reale. Diamo ora un'occhiata alla ricerca che è stata effettuata nel campo dell'estrazione della tabella usando Neural Networks e anche, esaminiamoli in breve.


TableNet

Carta di stampa: TableNet: modello di deep learning per il rilevamento di tabelle end-to-end e l'estrazione di dati tabulari da immagini di documenti scansionati

Introduzione: TableNet è un'architettura moderna di deep learning che è stata proposta da un team dell'anno di ricerca TCS nell'anno 2019. La motivazione principale era estrarre informazioni dai tavoli scansionati tramite telefoni cellulari o telecamere.

Hanno proposto una soluzione che include il rilevamento accurato della regione tabulare all'interno di un'immagine e successivamente il rilevamento e l'estrazione di informazioni dalle righe e dalle colonne della tabella rilevata.

dataset: Il set di dati utilizzato era Marmot. Ha 2000 pagine in formato PDF che sono state raccolte con le corrispondenti verità fondamentali. Ciò include anche le pagine cinesi. Collegamento - http://www.icst.pku.edu.cn/cpdp/sjzy/index.htm

architettura: L'architettura si basa su Long et al., un modello codificatore-decodificatore per la segmentazione semantica. La stessa rete di codificatori/decodificatori viene utilizzata come architettura FCN per l'estrazione delle tabelle. Le immagini vengono preelaborate e modificate utilizzando il Tesseract OCR.

Il modello viene derivato in due fasi sottoponendo l'input a tecniche di deep learning. Nella prima fase, hanno utilizzato i pesi di una rete VGG-19 pre-addestrata. Hanno sostituito i livelli completamente connessi della rete VGG utilizzata con livelli convoluzionali 1 × 1. Tutti gli strati convoluzionali sono seguiti dall'attivazione di ReLU e uno strato di dropout di probabilità 0.8. Chiamano la seconda fase come la rete decodificata che consiste di due rami. Ciò è secondo l'intuizione che la regione della colonna è un sottoinsieme della regione della tabella. Pertanto, la singola rete di codifica può filtrare le regioni attive con maggiore precisione utilizzando le caratteristiche delle regioni di tabella e di colonna. L'output della prima rete viene distribuito ai due rami. Nel primo ramo, vengono applicate due operazioni di convoluzione e la mappa di feature finale viene ingrandita per soddisfare le dimensioni dell'immagine originale. Nell'altro ramo per il rilevamento delle colonne, c'è un ulteriore livello di convoluzione con una funzione di attivazione ReLU e un livello di esclusione con la stessa probabilità di caduta di cui sopra. Le mappe delle caratteristiche vengono sovracampionate utilizzando convoluzioni frazionate dopo uno strato di convoluzione (1 × 1). Di seguito un'immagine dell'architettura:

Rilevamento di tabelle ed estrazione di informazioni utilizzando il Deep Learning PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
L'architettura di TableNet

Uscite: Dopo che i documenti sono stati elaborati utilizzando il modello, vengono generate le maschere di tabelle e colonne. Queste maschere vengono utilizzate per filtrare la tabella e le sue regioni di colonna dall'immagine. Ora utilizzando l'OCR Tesseract, le informazioni vengono estratte dalle regioni segmentate. Di seguito un'immagine che mostra le maschere generate e successivamente estratte dalle tabelle:

Rilevamento di tabelle ed estrazione di informazioni utilizzando il Deep Learning PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Hanno anche proposto lo stesso modello che è stato messo a punto con ICDAR che ha funzionato meglio del modello originale. Il punteggio di richiamo, precisione e F1 del modello perfezionato sono rispettivamente 0.9628, 0.9697, 0.9662. Il modello originale ha le metriche registrate di 0.9621, 0.9547, 0.9583 nello stesso ordine. Passiamo ora ad un'altra architettura.


DeepDeSRT

Carta di stampa: DeepDeSRT: Deep Learning per il rilevamento e il riconoscimento di strutture di tabelle in immagini di documenti

Introduzione: DeepDeSRT è un framework di reti neurali che viene utilizzato per rilevare e comprendere le tabelle nei documenti o nelle immagini. Ha due soluzioni come menzionato nel titolo:

  1. Presenta una soluzione basata sull'apprendimento approfondito per il rilevamento di tabelle nelle immagini dei documenti.
  2. Propone un nuovo approccio basato sul deep learning per il riconoscimento della struttura della tabella, ovvero l'identificazione di righe, colonne e posizioni delle celle nelle tabelle rilevate.

Il modello proposto è completamente basato sui dati, non richiede euristiche o metadati di documenti o immagini. Un vantaggio principale rispetto alla formazione è che non hanno utilizzato set di dati di formazione di grandi dimensioni, ma hanno utilizzato il concetto di apprendimento del trasferimento e adattamento del dominio sia per il rilevamento delle tabelle sia per il riconoscimento della struttura delle tabelle.

dataset: Il set di dati utilizzato è un set di dati del concorso di tavolo ICDAR 2013 contenente 67 documenti con 238 pagine complessive.

architettura:

  • Rilevamento della tabella Il modello proposto utilizzava Fast RCNN come framework di base per il rilevamento delle tabelle. L'architettura è suddivisa in due parti diverse. Nella prima parte, hanno generato proposte regionali basate sull'immagine di input da una cosiddetta rete di proposte regionali (RPN). Nella seconda parte, hanno classificato le regioni usando Fast-RCNN. Per sostenere questa architettura, hanno usato Rete ZF e i pesi di VGG-16.
  • Riconoscimento della struttura Dopo che una tabella è stata rilevata correttamente e la sua posizione è nota al sistema, la prossima sfida nella comprensione del suo contenuto è riconoscere e localizzare le righe e le colonne che compongono la struttura fisica della tabella. Quindi hanno utilizzato una rete completamente connessa con i pesi di VGG-16 che estrae informazioni dalle righe e dalle colonne. Di seguito sono riportati gli output di DeepDeSRT:

Uscite:

Rilevamento di tabelle ed estrazione di informazioni utilizzando il Deep Learning PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
Uscite di rilevamento tabella
Rilevamento di tabelle ed estrazione di informazioni utilizzando il Deep Learning PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
Risultati del riconoscimento della struttura [6]

I risultati della valutazione rivelano che DeepDeSRT supera i metodi all'avanguardia per il rilevamento delle tabelle e il riconoscimento della struttura e raggiunge misure F1 del 96.77% e 91.44% per il rilevamento delle tabelle e il riconoscimento della struttura, rispettivamente fino al 2015.


Grafici di reti neurali

Carta di stampa: Ripensare il riconoscimento delle tabelle usando Graph Neural Networks

Introduzione: In questa ricerca, gli autori del Deep Learning Laboratory, National Center of Artificial Intelligence (NCAI) hanno proposto Graph Neural Networks per estrarre informazioni dalle tabelle. Hanno sostenuto che le reti grafiche sono una scelta più naturale per questi problemi e hanno ulteriormente esplorato due reti neuronali basate su gradiente.

Questo modello proposto combina i vantaggi di entrambe le reti neurali convoluzionali per l'estrazione delle caratteristiche visive e le reti grafiche per gestire la struttura del problema.

dataset: Gli autori hanno proposto un nuovo ampio set di dati generati sinteticamente di 0.5 milioni di tabelle divise in quattro categorie.

  1. Le immagini sono semplici immagini senza fusione e con linee guida
  2. Le immagini hanno tipi di bordi diversi tra cui l'assenza occasionale di linee guida
  3. Introduce l'unione di celle e colonne
  4. La fotocamera ha acquisito immagini con la trasformazione della prospettiva lineare

architettura: Hanno usato una rete convoluzionale poco profonda che genera le rispettive caratteristiche convoluzionali. Se le dimensioni spaziali delle caratteristiche di output non sono le stesse dell'immagine di input, raccolgono posizioni che sono ridimensionate linearmente in base al rapporto tra le dimensioni di input e output e le inviano a una rete di interazione che ha due reti grafiche note come DGCNN e GravNet. I parametri della rete grafica sono gli stessi della CNN originale. Alla fine, hanno utilizzato un campionamento di coppie di runtime per classificare il contenuto estratto che utilizzava internamente l'algoritmo basato su Monte Carlo. Di seguito sono riportati gli output:

Uscite:

Rilevamento di tabelle ed estrazione di informazioni utilizzando il Deep Learning PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
Output generati da Graph Neural Networks

Di seguito sono riportati i numeri di precisione tabulati che sono generati dalle reti per quattro categorie della rete, come presentato in dataset sezione:

Rilevamento di tabelle ed estrazione di informazioni utilizzando il Deep Learning PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

CGAN e algoritmi genetici

Carta di stampa: Estrazione di tabelle da documenti mediante reti contraddittorie generative condizionali e algoritmi genetici

Introduzione: In questa ricerca, gli autori hanno usato un approccio top-down invece di utilizzare un approccio bottom-up (integrazione di linee in celle, righe o colonne).

In questo metodo, usando una rete generativa contraddittoria, hanno mappato l'immagine della tabella in una forma di tabella standardizzata "scheletro". Questa tabella scheletro indica i bordi approssimativi di riga e colonna senza il contenuto della tabella. Successivamente, adattano i rendering delle strutture della tabella latente candidate alla struttura dello scheletro utilizzando una misura della distanza ottimizzata da un algoritmo genetico.

dataset: Gli autori hanno utilizzato il proprio set di dati con 4000 tabelle.

architettura: Il modello proposto è composto da due parti. Nella prima parte, le immagini di input sono astratte in tabelle scheletriche usando una rete neurale contraddittoria generativa condizionale. Un GAN ha di nuovo due reti, il generatore che genera campioni casuali e un discriminatore che dice se le immagini generate sono false o originali. Il generatore G è una rete encoder-decodificatore in cui un'immagine di input viene fatta passare attraverso una serie di livelli progressivamente di downsampling fino a uno strato di collo di bottiglia in cui il processo è invertito. Per passare informazioni sufficienti ai livelli di decodifica, viene utilizzata un'architettura U-Net con connessioni skip e una connessione skip viene aggiunta tra i livelli i e n - i tramite concatenazione, dove n è il numero totale di layer e i è il numero del layer nell'encoder. Un'architettura PatchGAN viene utilizzata per il discriminatore D. Ciò penalizza la struttura dell'immagine di output alla scala delle patch. Questi producono l'output come una tabella scheletro.

Nella seconda parte, ottimizzano l'adattamento delle strutture di dati latenti candidate all'immagine scheletro generata usando una misura della distanza tra ciascun candidato e lo scheletro. Ecco come viene estratto il testo all'interno delle immagini. Di seguito un'immagine che raffigura l'architettura:

Rilevamento di tabelle ed estrazione di informazioni utilizzando il Deep Learning PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
Schema generale dell'approccio

Uscita: Le strutture delle tabelle stimate vengono valutate confrontando: Numero di riga e colonna, posizione nell'angolo in alto a sinistra, altezza delle file e larghezza delle colonne

L'algoritmo genetico ha fornito un'accuratezza del 95.5% in ordine di riga e un'accuratezza del 96.7% in colonna mentre estraeva informazioni dalle tabelle.

Rilevamento di tabelle ed estrazione di informazioni utilizzando il Deep Learning PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Necessità di digitalizzare documenti, ricevute or fatture ma troppo pigro per programmare? Vai a nanonet e costruisci modelli OCR gratis!


[Codice] Approcci tradizionali

In questa sezione, impareremo come estrarre informazioni dalle tabelle usando Deep Learning e OpenCV. Puoi considerare questa spiegazione come un'introduzione, tuttavia, la costruzione di modelli all'avanguardia richiederà molta esperienza e pratica. Questo ti aiuterà a comprendere i fondamenti di come possiamo addestrare i computer con vari possibili approcci e algoritmi.

Per comprendere il problema in modo più preciso, definiamo alcuni termini di base, che verranno utilizzati in tutto l'articolo:

  • Testo: contiene una stringa e cinque attributi (in alto, a sinistra, larghezza, altezza, carattere)
  • linea: contiene oggetti di testo che si presume siano sulla stessa riga del file originale
  • Linea singola: oggetto linea con un solo oggetto di testo.
  • Multi-linea: oggetto linea con più di un oggetto testo.
  • Multi-linea Bloccare: un insieme di oggetti multilinea continui.
  • Riga: Blocchi orizzontali nella tabella
  • Colonna: Blocchi verticali nella tabella
  • Cella: l'intersezione di una riga e una colonna
  • Cella: imbottitura: l'imbottitura interna o lo spazio all'interno della cella.

Rilevamento della tabella con OpenCV

Useremo le tradizionali tecniche di visione artificiale per estrarre informazioni dalle tabelle scansionate. Ecco la nostra pipeline; inizialmente acquisiamo i dati (le tabelle da cui è necessario estrarre le informazioni) utilizzando normali fotocamere e quindi utilizzando la visione artificiale, proveremo a trovare bordi, bordi e celle. Useremo diversi filtri e contorni e metteremo in evidenza le caratteristiche principali delle tabelle.

Avremo bisogno di un'immagine di un tavolo. Possiamo acquisirlo su un telefono o usare qualsiasi immagine esistente. Di seguito è riportato lo snippet di codice,

file = r’table.png’
table_image_contour = cv2.imread(file, 0)
table_image = cv2.imread(file)

Qui, abbiamo caricato la stessa immagine dell'immagine due variabili poiché useremo il tabella_immagine_contorno quando si disegnano i contorni rilevati sull'immagine caricata. Di seguito l'immagine della tabella che stiamo usando nel nostro programma:

Rilevamento di tabelle ed estrazione di informazioni utilizzando il Deep Learning PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
Immagine del tavolo

Useremo una tecnica chiamata Soglia immagine inversa che migliora i dati presenti nell'immagine data.

ret, thresh_value = cv2.threshold( table_image_contour, 180, 255, cv2.THRESH_BINARY_INV)

Un altro importante passo di preelaborazione è dilatazione dell'immagine. La dilatazione è una semplice operazione matematica applicata alle immagini binarie (bianco e nero) che allarga gradualmente i confini delle regioni dei pixel di primo piano (vale a dire pixel bianchi, in genere).

kernel = np.ones((5,5),np.uint8)
dilated_value = cv2.dilate(thresh_value,kernel,iterations = 1)

In OpenCV, usiamo il metodo, trovaContorni per ottenere i contorni nella presente immagine. Questo metodo richiede tre argomenti, il primo è l'immagine dilatata (l'immagine che viene utilizzata per generare l'immagine dilatata è table_image_contour - il metodo findContours supporta solo immagini binarie), il secondo è il cv2.RETR_ALBERO che ci dice di usare la modalità di recupero del contorno, il terzo è il  cv2.CHAIN_APPROX_SEMPLICE che è la modalità di approssimazione del contorno. Il trovaContorni decomprime due valori, quindi aggiungeremo un'altra variabile denominata gerarchia. Quando le immagini sono nidificate, i contorni trasudano interdipendenza. Per rappresentare tali relazioni, viene utilizzata la gerarchia.

contours, hierarchy = cv2.findContours( dilated_value, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

I contorni indicano dove sono esattamente presenti i dati nell'immagine. Ora, passiamo all'elenco dei contorni che abbiamo calcolato nel passaggio precedente e calcoliamo le coordinate delle scatole rettangolari come osservato nell'immagine originale usando il metodo,  cv2.boundingRect. Nell'ultima iterazione, abbiamo messo quelle caselle sull'immagine originale table_image usando il metodo, cv2.rectangle ().

for cnt in contours: x, y, w, h = cv2.boundingRect(cnt) # bounding the images if y < 50: table_image = cv2.rectangle(table_image, (x, y), (x + w, y + h), (0, 0, 255), 1) 

Questo è il nostro ultimo passo. Qui usiamo il metodo nomeFinestra per rendere la nostra tabella con il contenuto estratto e contorni incorporati su di essa. Di seguito è riportato lo snippet di codice:

plt.imshow(table_image)
plt.show()
cv2.namedWindow('detecttable', cv2.WINDOW_NORMAL)

Rilevamento di tabelle ed estrazione di informazioni utilizzando il Deep Learning PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
Uscite

Modifica il valore di y in 300 nello snippet di codice sopra riportato, questo sarà il tuo output:

Rilevamento di tabelle ed estrazione di informazioni utilizzando il Deep Learning PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Dopo aver estratto le tabelle, è possibile eseguire ogni ritaglio di contorno tramite il motore OCR tesseract, il cui tutorial è disponibile qui. Una volta che abbiamo delle caselle di ogni testo, possiamo raggrupparle in base alle loro coordinate xey per ricavare la riga e la colonna corrispondenti a cui appartengono.

Oltre a questo, c'è la possibilità di usare PDFMiner per trasformare i tuoi documenti pdf in file HTML che possiamo analizzare usando espressioni regolari per ottenere finalmente le nostre tabelle. Ecco come puoi farlo.


Analisi PDFMiner e Regex

Per estrarre informazioni da documenti più piccoli, è necessario configurare modelli di deep learning o scrivere algoritmi di visione artificiale. Invece, possiamo usare espressioni regolari in Python per estrai il testo dai documenti PDF. Inoltre, ricorda che questa tecnica non funziona per le immagini. Possiamo usarlo solo per estrarre informazioni da file HTML o documenti PDF. Questo perché, quando utilizzi un'espressione regolare, dovrai abbinare il contenuto alla fonte ed estrarre le informazioni. Con le immagini, non sarai in grado di abbinare il testo e le espressioni regolari falliranno. Ora lavoriamo con un semplice documento PDF ed estraiamo informazioni dalle tabelle in esso contenute. Di seguito l'immagine:

Rilevamento di tabelle ed estrazione di informazioni utilizzando il Deep Learning PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Nel primo passaggio, carichiamo il PDF nel nostro programma. Fatto ciò, convertiamo il PDF in HTML in modo da poter utilizzare direttamente le espressioni regolari e quindi estrarre il contenuto dalle tabelle. Per questo, il modulo che usiamo è pdfminer. Questo aiuta a leggere il contenuto da PDF e convertirlo in un file HTML.

Di seguito è riportato lo snippet di codice:

from pdfminer.pdfinterp import PDFResourceManager from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.converter import HTMLConverter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from cStringIO import StringIO
import re def convert_pdf_to_html(path): rsrcmgr = PDFResourceManager() retstr = StringIO() codec = 'utf-8' laparams = LAParams() device = HTMLConverter(rsrcmgr, retstr, codec=codec, laparams=laparams) fp = file(path, 'rb') interpreter = PDFPageInterpreter(rsrcmgr, device) password = "" maxpages = 0 #is for all caching = True pagenos=set() for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages,password=password,caching=caching, check_extractable=True): interpreter.process_page(page) fp.close() device.close() str = retstr.getvalue() retstr.close() return str

Crediti codice: zevross

Abbiamo importato molti moduli, inclusi librerie di espressioni regolari e PDF. Nel metodo converti_pdf_to_html, inviamo il percorso del file PDF che deve essere convertito in un file HTML. L'output del metodo sarà una stringa HTML come mostrato di seguito:

'<span style="font-family: XZVLBD+GaramondPremrPro-LtDisp; font-size:12px">Changing Echoesn<br>7632 Pool Station Roadn<br>Angels Camp, CA 95222n<br>(209) 785-3667n<br>Intake: (800) 633-7066n<br>SA </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> TX DT BU </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> RS RL OP PH </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> CO CJ n<br></span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> SF PI </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> AH SPn<br></span></div>' 

L'espressione regolare è una delle tecniche di programmazione più complicate e interessanti utilizzate per il pattern matching. Questi sono ampiamente utilizzati in diverse applicazioni, ad esempio, per la formattazione del codice, lo scraping Web e la convalida. Prima di iniziare a estrarre contenuti dalle nostre tabelle HTML, impariamo rapidamente alcune cose sulle espressioni regolari.

Questa libreria fornisce vari metodi integrati per abbinare e cercare modelli. Di seguito sono riportati alcuni:

import re # Match the pattern in the string
re.match(pattern, string) # Search for a pattern in a string
re.search(pattern, string) # Finds all the pattern in a string
re.findall(pattern, string) # Splits string based on the occurrence of pattern
re.split(pattern, string, [maxsplit=0] # Search for the pattern and replace it with the given string
re.sub(pattern, replace, string)

I personaggi / espressioni che di solito vedi nelle espressioni regolari includono:

  • [AZ] - qualsiasi lettera maiuscola
  • d - cifra
  • w - carattere della parola (lettere, cifre e trattini bassi)
  • s - spazi bianchi (spazi, tabulazioni e spazi bianchi)

Ora per scoprire un particolare modello in HTML, usiamo le espressioni regolari e quindi scriviamo i modelli di conseguenza. Abbiamo prima diviso i dati in modo tale che i blocchi di indirizzi siano separati in blocchi separati in base al nome del programma (ANGELS CAMP, APPLE VALLEY, ecc.):

pattern = '(?<=<span style="font-family: XZVLBD+GaramondPremrPro-LtDisp; font-size:12px">)(.*?)(?=<br></span></div>)' for programinfo in re.finditer(pattern, biginputstring, re.DOTALL): do looping stuff…

Successivamente, troviamo il nome del programma, la città, lo stato e il CAP che seguono sempre lo stesso schema (testo, virgola, lettere maiuscole a due cifre, 5 numeri (o 5 numeri trattino quattro numeri) - questi sono presenti nel file PDF che abbiamo considerato come input). Controlla il seguente snippet di codice:

# To identify the program name
programname = re.search('^(?!<br>).*(?=\n)', programinfo.group(0))
# since some programs have odd characters in the name we need to escape
programname = re.escape(programname) citystatezip =re.search('(?<=>)([a-zA-Zs]+, [a-zA-Zs]{2} d{5,10})(?=\n)', programinfo.group(0))
mainphone =re.search('(?<=<br>)(d{3}) d{3}-d{4}x{0,1}d{0,}(?=\n)', programinfo.group(0))
altphones = re.findall('(?<=<br>)[a-zA-Zs]+: (d{3}) d{3}-d{4}x{0,1}d{0,}(?=\n)(?=\n)', programinfo.group(0)) 

Questo è un semplice esempio che spiega come estraiamo le informazioni dai file PDF usando un'espressione regolare. Dopo aver estratto tutte le informazioni richieste, cariciamo questi dati in un file CSV.

def createDirectory(instring, outpath, split_program_pattern): i = 1 with open(outpath, 'wb') as csvfile: filewriter = csv.writer(csvfile, delimiter=',' , quotechar='"', quoting=csv.QUOTE_MINIMAL) # write the header row filewriter.writerow(['programname', 'address', 'addressxtra1', 'addressxtra2', 'city', 'state', 'zip', 'phone', 'altphone', 'codes']) # cycle through the programs for programinfo in re.finditer(split_program_pattern, instring, re.DOTALL): print i i=i+1 # pull out the pieces programname = getresult(re.search('^(?!<br>).*(?=\n)', programinfo.group(0))) programname = re.escape(programname) # some facilities have odd characters in the name

Quindi questo è un semplice esempio che spiega come puoi spingere il tuo HTML estratto in un file CSV. Per prima cosa creiamo un file CSV, troviamo tutti i nostri attributi e inseriamo uno alla volta nelle rispettive colonne. Di seguito è riportato uno screenshot:

Rilevamento di tabelle ed estrazione di informazioni utilizzando il Deep Learning PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
Schermata degli elementi estratti dalle tabelle utilizzando le espressioni regolari

A volte, le tecniche sopra discusse sembrano complicate e pongono sfide ai programmatori se tutte le tabelle sono nidificate e complesse. Qui, la scelta di un CV o un modello di apprendimento profondo consente di risparmiare molto tempo. Vediamo quali inconvenienti e sfide ostacolano l'uso di questi metodi tradizionali.


Sfide con i metodi tradizionali

In questa sezione, impareremo in modo approfondito su dove i processi di estrazione della tabella potrebbero fallire e comprenderemo ulteriormente i modi per superare questi ostacoli usando i moderni metodi nati dal Deep Learning. Questo processo però non è un gioco da ragazzi. Il motivo è che le tabelle di solito non rimangono costanti. Hanno strutture diverse per rappresentare i dati e i dati all'interno delle tabelle possono essere multi-linguistici con vari stili di formattazione (stile, colore, dimensione e altezza del carattere). Quindi per costruire un modello solido, si dovrebbe essere consapevoli di tutte queste sfide. Di solito, questo processo comprende tre passaggi: rilevamento, estrazione e conversione della tabella. Identifichiamo i problemi in tutte le fasi, uno per uno:


Rilevamento della tabella

In questa fase, identifichiamo dove sono presenti esattamente le tabelle nell'input dato. L'input può essere di qualsiasi formato, come immagini, documenti PDF / Word e talvolta video. Utilizziamo tecniche e algoritmi diversi per rilevare le tabelle, sia per linee che per coordinate. In alcuni casi, potremmo incontrare tabelle senza bordi, dove dobbiamo optare per metodi diversi. Oltre a questi, ecco alcune altre sfide:

  • Trasformazione dell'immagine: La trasformazione delle immagini è un passaggio fondamentale nel rilevamento delle etichette. Ciò include il miglioramento dei dati e dei bordi presenti nella tabella. Dobbiamo scegliere algoritmi di preelaborazione adeguati in base ai dati presentati nella tabella. Ad esempio, quando lavoriamo con le immagini, dobbiamo applicare i rilevatori di soglia e dei bordi. Questo passaggio di trasformazione ci aiuta a trovare il contenuto in modo più preciso. In alcuni casi, i contorni potrebbero andare storti e gli algoritmi non riescono a migliorare l'immagine. Quindi, scegliere i giusti passaggi di trasformazione dell'immagine e la preelaborazione è cruciale.
  • Qualità dell'immagine: Quando eseguiamo la scansione delle tabelle per l'estrazione delle informazioni, dobbiamo assicurarci che questi documenti vengano scansionati in ambienti più luminosi che garantiscano immagini di buona qualità. Quando le condizioni di illuminazione sono scarse, gli algoritmi CV e DL potrebbero non rilevare le tabelle negli ingressi dati. Se stiamo utilizzando il deep learning, dobbiamo assicurarci che il set di dati sia coerente e abbia un buon set di immagini standard. Se usiamo questi modelli su tavoli presenti in vecchie carte stropicciate, allora prima dobbiamo preelaborare ed eliminare il rumore in quelle immagini.
  • Varietà di layout e modelli strutturali: Tutti i tavoli non sono unici. Una cella può estendersi su più celle, sia verticalmente che orizzontalmente, e combinazioni di celle spanning possono creare un vasto numero di variazioni strutturali. Inoltre, alcuni enfatizzano le funzionalità del testo e le righe della tabella possono influire sul modo in cui la struttura della tabella viene compresa. Ad esempio, le linee orizzontali o il testo in grassetto possono enfatizzare più intestazioni della tabella. La struttura della tabella definisce visivamente le relazioni tra le celle. Le relazioni visive nelle tabelle rendono difficile trovare computazionalmente le celle correlate ed estrarre informazioni da esse. Quindi è importante costruire algoritmi che siano robusti nella gestione di diverse strutture di tabelle.
  • Imbottitura cellulare, margini, bordi: Questi sono gli elementi essenziali di qualsiasi tabella: imbottiture, margini e bordi non saranno sempre gli stessi. Alcune tabelle hanno molto riempimento all'interno delle celle e altre no. L'utilizzo di immagini di buona qualità e le fasi di pre-elaborazione aiuteranno il processo di estrazione della tabella a funzionare senza problemi.

Estrazione da tavolo

Questa è la fase in cui le informazioni vengono estratte dopo l'identificazione delle tabelle. Esistono molti fattori relativi alla struttura del contenuto e al contenuto presente nella tabella. Quindi è importante capire tutte le sfide prima di costruire un algoritmo.

  • Contenuto denso: Il contenuto delle celle può essere numerico o testuale. Tuttavia, il contenuto testuale è generalmente denso, contenente brevi pezzi di testo ambigui con l'uso di acronimi e abbreviazioni. Per comprendere le tabelle, è necessario chiarire il testo e ampliare abbreviazioni e acronimi.
  • Diversi tipi di carattere e formati: I caratteri sono generalmente di diversi stili, colori e altezze. Dobbiamo assicurarci che siano generici e facili da identificare. Poche famiglie di caratteri, specialmente quelle che cadono in corsivo o scritte a mano, sono un po 'difficili da estrarre. Quindi l'uso di un buon carattere e una corretta formattazione aiuta l'algoritmo a identificare le informazioni in modo più accurato.
  • PDF di pagine multiple e interruzioni di pagina: La riga di testo nelle tabelle è sensibile a una soglia predefinita. Inoltre, quando si estendono le celle su più pagine, diventa difficile identificare le tabelle. In una pagina con più tabelle, è difficile distinguere tabelle diverse l'una dall'altra. È difficile lavorare con tavoli sparsi e irregolari. Pertanto, le linee guida grafiche e il layout del contenuto dovrebbero essere usati insieme come fonti importanti per individuare le regioni della tabella.

Conversione tabella

L'ultima fase include la conversione delle informazioni estratte dalle tabelle per la loro compilazione come documento modificabile, in Excel o utilizzando altri software. Impariamo alcune sfide.

  • Imposta layout: Quando vengono estratti diversi formati di tabelle dai documenti scansionati, è necessario disporre di un layout di tabella appropriato per inserire il contenuto. A volte, l'algoritmo non riesce a estrarre le informazioni dalle celle. Quindi, anche la progettazione di un layout corretto è altrettanto importante.
  • Varietà di modelli di presentazione del valore: I valori nelle celle possono essere presentati utilizzando diversi schemi di rappresentazione sintattica. Considera il testo nella tabella come 6 ± 2. L'algoritmo potrebbe non riuscire a convertire quella particolare informazione. Quindi l'estrazione di valori numerici richiede la conoscenza di possibili schemi di presentazione.
  • Rappresentazione per la visualizzazione: La maggior parte dei formati di rappresentazione per le tabelle, come i linguaggi di markup in cui è possibile descrivere le tabelle, sono progettati per la visualizzazione. Pertanto, è difficile elaborare automaticamente le tabelle.

Queste sono le sfide che affrontiamo durante il processo di estrazione della tabella usando tecniche tradizionali. Ora vediamo come superarli con l'aiuto del Deep Learning. È ampiamente studiato in vari settori.



Necessità di digitalizzare documenti, ricevute o fatture ma troppo pigro per programmare? Vai a nanonet e costruisci modelli OCR gratis!


Sommario

In questo articolo, abbiamo esaminato in dettaglio l'estrazione di informazioni dalle tabelle. Abbiamo visto come le moderne tecnologie come Deep Learning e Computer Vision possono automatizzare attività banali costruendo algoritmi robusti per produrre risultati accurati. Nelle sezioni iniziali, abbiamo appreso il ruolo dell'estrazione delle tabelle nel facilitare le attività degli individui, delle industrie e dei settori aziendali e abbiamo anche esaminato casi d'uso sull'estrazione di tabelle da PDF/HTML, automazione dei moduli, fattura Automazione, ecc. Abbiamo codificato un algoritmo utilizzando Computer Vision per trovare la posizione delle informazioni nelle tabelle utilizzando tecniche di soglia, dilatazione e rilevamento del contorno. Abbiamo discusso delle sfide che potremmo incontrare durante i processi di rilevamento, estrazione e conversione delle tabelle quando utilizziamo le tecniche convenzionali e abbiamo affermato come il deep learning può aiutarci a superare questi problemi. Infine, abbiamo esaminato alcune architetture di reti neurali e abbiamo compreso i loro modi per ottenere l'estrazione di tabelle in base ai dati di addestramento forniti.



Aggiornare:
‌ Aggiunto altro materiale di lettura sui diversi approcci nel rilevamento delle tabelle e nell'estrazione di informazioni utilizzando il deep learning.

Timestamp:

Di più da AI e apprendimento automatico