Tabeldetektion og informationsudtrækning ved hjælp af Deep Learning PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Tabeldetektion og informationsudtræk ved hjælp af Deep Learning


Introduktion til tabeludtræk

Mængden af ​​data, der indsamles, stiger drastisk dag for dag med et stigende antal applikationer, software og online platforme.

For at håndtere/få adgang til disse enorme data produktivt, er det nødvendigt at udvikle værdifulde informationsudvindingsværktøjer.

Et af de underområder, der kræver opmærksomhed i feltet Informationsekstraktion, er udtrækning af tabeller fra billeder eller påvisning af tabeldata fra formularer, PDF'er og dokumenter.

Bordudtræk er opgaven med at detektere og dekomponere tabeloplysninger i et dokument.

Tabel OCR - Nanonetter udtrækker tabeldata fra et billede!
Tabel OCR - Nanonetter udtrækker tabeldata fra et billede!

Forestil dig, at du har masser af dokumenter med tabeldata, som du skal udtrække til videre behandling. Konventionelt kan du kopiere dem manuelt (på et papir) eller lægge dem i Excel-ark.

Men med tabel OCR-software kan du automatisk detektere tabeller og udtrække alle tabeldata fra dokumenter på én gang. Dette sparer meget tid og omarbejde.

I denne artikel vil vi først se på, hvordan Nanonets automatisk kan udtrække tabeller fra billeder eller dokumenter. Vi vil derefter dække nogle populære DL-teknikker til at opdage og udtrække tabeller i dokumenter.


Ønsker du at udtrække tabeldata fra fakturaer, kvitteringer eller andre typer dokumenter? Tjek Nanonets' PDF bordudtrækker at udtrække tabeldata. Planlæg en demo for at lære mere om automatisering bordudtræk.


Indholdsfortegnelse

Uddrag tabel fra billede med Nanonets Table OCR

  • Tilmeld dig for en gratis Nanonets-konto

    • Upload billeder/filer til Nanonets Table OCR-model
    • Nanonetter registrerer og udtrækker automatisk alle tabeldata
    • Rediger og gennemgå dataene (hvis påkrævet)
    • Eksporter de behandlede data som Excel, csv eller JSON

Udtræk tabel fra billede med nanonetter

Ønsker du at skrabe data fra PDF dokumenter, konverter PDF-tabel til Excel or automatisere bordudtræk? Finde ud af hvordan Nanonetter PDF-skraber or PDF-parser kan give din virksomhed mulighed for at blive mere produktiv.


Nanonets Table OCR API

Tabel OCR med nanonetter
Tabel OCR med nanonetter

Nanonets OCR API giver dig mulighed for nemt at bygge OCR-modeller. Du behøver ikke bekymre dig om at forbehandle dine billeder eller bekymre dig om matchende skabeloner eller bygge regelbaserede motorer for at øge nøjagtigheden af ​​din OCR-model.

Du kan uploade dine data, annotere dem, indstille modellen til at træne og vente på at få forudsigelser gennem en browserbaseret brugergrænseflade uden at skrive en enkelt kodelinje, bekymre dig om GPU'er eller finde de rigtige arkitekturer til din tabeldetektion ved hjælp af deep learning-modeller.

Du kan også tilegne dig JSON-svarene fra hver forudsigelse for at integrere den med dine egne systemer og bygge maskinlæringsdrevne apps, der er bygget på avancerede algoritmer og en stærk infrastruktur.

https://nanonets.com/documentation/


Beskæftiger din virksomhed sig med data eller tekstgenkendelse i digitale dokumenter, PDF'er eller billeder? Har du spekuleret på, hvordan man udtrækker tabeldata, udtræk tekst fra billeder , udtrække data fra PDF or Uddrag tekst fra PDF præcist og effektivt?


Hvem vil finde bordudtrækning nyttig

Som diskuteret i det foregående afsnit, bruges tabeller ofte til at repræsentere data i et rent format. Vi kan se dem så ofte på tværs af flere områder, lige fra at organisere vores arbejde ved at strukturere data på tværs af tabeller til at opbevare virksomheders enorme aktiver. Der er mange organisationer, der skal håndtere millioner af borde hver dag. For at lette sådanne besværlige opgaver med at gøre alt manuelt, er vi nødt til at ty til hurtigere teknikker. Lad os diskutere et par brugssager, hvor udtræk af tabeller kan være afgørende:

Tabeldetektion og informationsudtrækning ved hjælp af Deep Learning PlatoBlockchain Data Intelligence. Lodret søgning. Ai.
Kilde: Patrick Tomasso, Unsplash

Cases til personlig brug

bordudtræk proces kan også være nyttig for små personlige brugssager. Nogle gange fanger vi dokumenter på mobiltelefonen og kopierer dem senere til vores computere. I stedet for at bruge denne proces kan vi direkte fange dokumenterne og gemme dem som redigerbare formater i vores brugerdefinerede skabeloner. Nedenfor er et par use cases om, hvordan vi kan tilpasse bordudsugning i vores personlige rutine –

Scanning af dokumenter til telefon: Vi tager ofte billeder af vigtige tabeller på telefonen og gemmer dem, men med tabeludtræksteknikken kan vi fange billederne af tabellerne og gemme dem direkte i et tabelformat, enten i excel eller google sheets. Med dette behøver vi ikke søge efter billeder eller kopiere tabelindholdet til nye filer, i stedet kan vi direkte bruge de importerede tabeller og begynde at arbejde på den udpakkede information.

Dokumenter til HTML: På websider finder vi masser af information præsenteret ved hjælp af tabeller. De hjælper os med at sammenligne med dataene og giver os en hurtig note om tallene på en organiseret måde. Ved at bruge tabeludtrækningsprocessen kan vi scanne PDF-dokumenter eller JPG/PNG-billeder og indlæse oplysningerne direkte i et brugerdefineret selvdesignet tabelformat. Vi kan yderligere skrive scripts for at tilføje yderligere tabeller baseret på de eksisterende tabeller, og derved digitalisere informationen. Dette hjælper os med at redigere indholdet og fremskynder lagringsprocessen.


Industrielle anvendelsestilfælde

Der er adskillige industrier over hele kloden, der kører enormt på papirarbejde og dokumentation, især i bank- og forsikringssektoren. Fra opbevaring af kunders detaljer til pleje af kundernes behov er borde meget brugt. Denne information sendes igen som et dokument (hard copy) til forskellige filialer for godkendelser, hvor fejlkommunikation nogle gange kan føre til fejl, mens der hentes information fra tabeller. I stedet gør brug af automatisering her vores liv meget lettere. Når de første data er fanget og godkendt, kan vi direkte scanne disse dokumenter til tabeller og arbejde videre med de digitaliserede data. Endsige reduktion af tidsforbrug og fejl, så kan vi give kunderne besked om tidspunkt og sted, hvor oplysningerne behandles. Dette sikrer derfor pålideligheden af ​​data og forenkler vores måde at håndtere operationer på. Lad os nu se på de andre mulige brugssager:

Kvalitet Control: Kvalitetskontrol er en af ​​de kerneydelser, som topindustrierne leverer. Det sker normalt internt og for interessenterne. Som en del af dette er der en masse feedback-formularer, der indsamles fra forbrugere for at udtrække feedback om den leverede service. I industrisektorer bruger de tabeller til at notere daglige tjeklister og noter for at se, hvordan produktionslinjerne fungerer. Alle disse kan dokumenteres på et enkelt sted ved hjælp af bordudtræk med lethed.

Spor over aktiver: I fremstillingsindustrien bruger folk hårdkodede tabeller til at holde styr på fremstillede enheder som stål, jern, plast osv. Hvert fremstillet emne er mærket med et unikt nummer, hvori de bruger tabeller til at holde styr på varer, der fremstilles og leveres hver dag. Automatisering kan hjælpe med at spare en masse tid og aktiver i form af fejlplaceringer eller datainkonsistens.


Business use cases

Der er flere erhvervsindustrier, der kører på excel-ark og offline formularer. Men på et tidspunkt er det svært at søge gennem disse ark og formularer. Hvis vi manuelt indtaster disse tabeller, er det tidskrævende, og chancen for at data indtastes forkert vil være stor. Derfor er tabeludtræk et bedre alternativ til at løse forretningsbrugstilfælde, da sådanne nedenfor er få.

Faktura Automation: Der er mange små og store industrier, hvis fakturaer genereres stadig i tabelformater. Disse giver ikke korrekt sikrede skatteopgørelser. For at overvinde sådanne forhindringer kan vi bruge tabeludtræk til at konvertere alle fakturaer til et redigerbart format og derved opgradere dem til en nyere version.

Formautomatisering: Onlineformularer forstyrrer denne gennemprøvede metode ved at hjælpe virksomheder med at indsamle de oplysninger, de har brug for, og samtidig forbinde dem med andre softwareplatforme, der er indbygget i deres arbejdsgang. Udover at reducere behovet for manuel dataindtastning (med automatiseret dataindtastning) og opfølgende e-mails, kan bordudtrækning eliminere omkostningerne ved at printe, sende, opbevare, organisere og ødelægge de traditionelle papiralternativer.


Har du et OCR-problem i tankerne? Vil gerne digitalisere fakturaer, PDF'er eller nummerplader? Gå over til Nanonetter og byg OCR-modeller gratis!


Dyb læring i aktion

Deep learning er en del af den bredere familie af maskinlæringsmetoder baseret på kunstige neurale netværk.

Neuralt netværk er en ramme, der genkender de underliggende relationer i de givne data gennem en proces, der efterligner den måde, den menneskelige hjerne fungerer på. De har forskellige kunstige lag, som dataene passerer igennem, hvor de lærer om funktioner. Der er forskellige arkitekturer som Convolution NN'er, Recurrent NN'er, Autoencoders, Generative Adversarial NN'er til at behandle forskellige slags data. Disse er komplekse, men afbilder høj ydeevne til at tackle problemer i realtid. Lad os nu se nærmere på den forskning, der er blevet udført i tabelekstraktionsfeltet ved hjælp af neurale netværk, og lad os også gennemgå dem kort.


TableNet

Papir: TableNet: Deep Learning-model til end-to-end tabeldetektion og tabeldataudtræk fra scannede dokumentbilleder

Introduktion: TableNet er en moderne deep learning-arkitektur, der blev foreslået af et team fra TCS Research år i år 2019. Hovedmotivationen var at udtrække information fra scannede tabeller gennem mobiltelefoner eller kameraer.

De foreslog en løsning, der inkluderer nøjagtig detektion af tabelområdet i et billede og efterfølgende detektering og udtrækning af information fra rækkerne og kolonnerne i den detekterede tabel.

datasæt: Det anvendte datasæt var Marmot. Den har 2000 sider i PDF-format, som blev samlet med de tilsvarende grundsandheder. Dette inkluderer også kinesiske sider. Link - http://www.icst.pku.edu.cn/cpdp/sjzy/index.htm

Arkitektur: Arkitekturen er baseret på Long et al., en encoder-dekoder-model til semantisk segmentering. Det samme encoder/decoder-netværk bruges som FCN-arkitekturen til tabelekstraktion. Billederne er forbehandlet og ændret ved hjælp af Tesseract OCR.

Modellen er udledt i to faser ved at udsætte input for dyb læringsteknikker. I den første fase har de brugt vægten af ​​et fortrænet VGG-19 netværk. De har erstattet de fuldt forbundne lag i det brugte VGG-netværk med 1×1 Convolutional-lag. Alle foldningslagene efterfølges af ReLU-aktiveringen og et dropout-lag med sandsynlighed 0.8. De kalder den anden fase som det afkodede netværk, der består af to grene. Dette er ifølge intuitionen om, at kolonneregionen er en delmængde af tabelregionen. Således kan det enkelte kodningsnetværk frafiltrere de aktive områder med bedre nøjagtighed ved at bruge funktioner i både tabel- og kolonneområder. Outputtet fra det første netværk distribueres til de to grene. I den første gren anvendes to foldningsoperationer, og det endelige funktionskort opskaleres for at opfylde de originale billeddimensioner. I den anden gren til detektering af søjler er der et ekstra foldningslag med en ReLU-aktiveringsfunktion og et dropout-lag med samme udfaldssandsynlighed som nævnt før. Funktionskortene er up-samplet ved hjælp af foldede foldninger efter et (1×1) foldningslag. Nedenfor er et billede af arkitekturen:

Tabeldetektion og informationsudtrækning ved hjælp af Deep Learning PlatoBlockchain Data Intelligence. Lodret søgning. Ai.
Arkitekturen af ​​TableNet

Udgange: Efter at dokumenterne er behandlet ved hjælp af modellen, genereres maskerne af tabeller og kolonner. Disse masker bruges til at bortfiltrere tabellen og dens kolonneområder fra billedet. Nu ved at bruge Tesseract OCR, udvindes informationen fra de segmenterede regioner. Nedenfor er et billede, der viser de masker, der er genereret og senere udtrukket fra tabellerne:

Tabeldetektion og informationsudtrækning ved hjælp af Deep Learning PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

De foreslog også den samme model, der er finjusteret med ICDAR, som klarede sig bedre end den originale model. Recall, Precision og F1-score for den finjusterede model er henholdsvis 0.9628, 0.9697, 0.9662. Den originale model har de registrerede metrics på 0.9621, 0.9547, 0.9583 i samme rækkefølge. Lad os nu dykke ned i endnu en arkitektur.


DeepDeSRT

Papir: DeepDeSRT: Deep Learning til registrering og strukturgenkendelse af tabeller i dokumentbilleder

Introduktion: DeepDeSRT er en neural netværksramme, der bruges til at opdage og forstå tabellerne i dokumenterne eller billederne. Den har to løsninger som nævnt i titlen:

  1. Det præsenterer en deep learning-baseret løsning til tabeldetektering i dokumentbilleder.
  2. Den foreslår en ny dyb læringsbaseret tilgang til tabelstrukturgenkendelse, dvs. identifikation af rækker, kolonner og cellepositioner i de detekterede tabeller.

Den foreslåede model er fuldstændig databaseret, den kræver ikke heuristik eller metadata af dokumenterne eller billederne. En væsentlig fordel med hensyn til træningen er, at de ikke brugte store træningsdatasæt, i stedet brugte de konceptet transfer learning og domænetilpasning til både tabeldetektion og tabelstrukturgenkendelse.

datasæt: Det anvendte datasæt er et ICDAR 2013 tabelkonkurrencedatasæt, der indeholder 67 dokumenter med i alt 238 sider.

Arkitektur:

  • Tabel Detektion Den foreslåede model brugte Fast RCNN som den grundlæggende ramme til at detektere tabellerne. Arkitekturen er opdelt i to forskellige dele. I den første del genererede de regionsforslag baseret på inputbilledet af et såkaldt regionsforslagsnetværk (RPN). I den anden del klassificerede de regionerne ved hjælp af Fast-RCNN. For at bakke op om denne arkitektur brugte de ZFNet og vægten af ​​VGG-16.
  • Strukturgenkendelse Efter at en tabel er blevet opdaget, og dens placering er kendt af systemet, er den næste udfordring i at forstå dens indhold at genkende og lokalisere rækkerne og kolonnerne, der udgør tabellens fysiske struktur. Derfor har de brugt et fuldt tilsluttet netværk med vægten af ​​VGG-16, der udtrækker information fra rækkerne og kolonnerne. Nedenfor er output fra DeepDeSRT:

Udgange:

Tabeldetektion og informationsudtrækning ved hjælp af Deep Learning PlatoBlockchain Data Intelligence. Lodret søgning. Ai.
Output af tabeldetektion
Tabeldetektion og informationsudtrækning ved hjælp af Deep Learning PlatoBlockchain Data Intelligence. Lodret søgning. Ai.
Output af strukturgenkendelse [6]

Evalueringsresultater afslører, at DeepDeSRT udkonkurrerer state-of-the-art metoder til tabeldetektion og strukturgenkendelse og opnår F1-mål på henholdsvis 96.77% og 91.44% for tabeldetektion og strukturgenkendelse indtil 2015.


Graf neurale netværk

Papir: Gentænkning af tabelgenkendelse ved hjælp af grafneurale netværk

Introduktion: I denne forskning foreslog forfatterne fra Deep Learning Laboratory, National Center of Artificial Intelligence (NCAI) Graph Neural Networks til at udtrække information fra tabeller. De hævdede, at grafnetværk er et mere naturligt valg for disse problemer og udforskede yderligere to gradient-baserede grafneurale netværk.

Denne foreslåede model kombinerer fordelene ved begge, konvolutionelle neurale netværk til visuel funktionsudtrækning og grafnetværk til at håndtere problemstrukturen.

datasæt: Forfatterne foreslog et nyt stort syntetisk genereret datasæt på 0.5 millioner tabeller opdelt i fire kategorier.

  1. Billeder er almindelige billeder uden sammensmeltning og med herskende linjer
  2. Billeder har forskellige kanttyper, inklusive lejlighedsvis fravær af herskende linjer
  3. Introducerer celle- og kolonnefletning
  4. Kameraet tog billeder med den lineære perspektivtransformation

Arkitektur: De brugte et lavvandet foldningsnetværk, som genererer de respektive foldningsfunktioner. Hvis de rumlige dimensioner af outputfunktionerne ikke er de samme som inputbilledet, indsamler de positioner, der er lineært nedskaleret afhængigt af forholdet mellem input- og outputdimensionerne og sender dem til et interaktionsnetværk, der har to grafnetværk kendt som DGCNN og GravNet. Parametrene for grafnetværket er de samme som det originale CNN. I sidste ende har de brugt en runtime-parsampling til at klassificere det indhold, der udvindes, som internt brugte den Monte Carlo-baserede algoritme. Nedenfor er udgangene:

Udgange:

Tabeldetektion og informationsudtrækning ved hjælp af Deep Learning PlatoBlockchain Data Intelligence. Lodret søgning. Ai.
Output genereret af Graph Neural Networks

Nedenfor er de tabulerede nøjagtighedstal, der genereres af netværkene for fire kategorier af netværket som præsenteret i datasæt sektion:

Tabeldetektion og informationsudtrækning ved hjælp af Deep Learning PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

CGAN'er og genetiske algoritmer

Papir: Udtrækning af tabeller fra dokumenter ved hjælp af betingede generative kontradiktoriske netværk og genetiske algoritmer

Introduktion: I denne forskning brugte forfatterne en top-down-tilgang i stedet for at bruge en bottom-up-tilgang (integration af linjer i celler, rækker eller kolonner).

I denne metode, ved hjælp af et generativt modstridende netværk, kortlagde de tabelbilledet til en standardiseret 'skelet' tabelform. Denne skelettabel angiver de omtrentlige række- og kolonnekanter uden tabelindholdet. Dernæst tilpasser de gengivelserne af kandidat latente tabelstrukturer til skeletstrukturen ved hjælp af et afstandsmål optimeret af en genetisk algoritme.

datasæt: Forfatterne brugte deres eget datasæt, der har 4000 tabeller.

Arkitektur: Den foreslåede model består af to dele. I den første del abstraheres inputbillederne til skelettabeller ved hjælp af et betinget generativt adversarielt neuralt netværk. Et GAN har igen to netværk, generatoren som genererer tilfældige prøver og diskriminator som fortæller om de genererede billeder er falske eller originale. Generator G er et encoder-decoder-netværk, hvor et inputbillede sendes gennem en række progressivt downsampling-lag indtil et flaskehals-lag, hvor processen vendes. For at videregive tilstrækkelig information til afkodningslagene anvendes en U-Net arkitektur med overspringsforbindelser, og der tilføjes en overspringsforbindelse mellem lag i og n − i via sammenkædning, hvor n er det samlede antal lag, og i er lagnummeret. i encoderen. En PatchGAN-arkitektur bruges til diskriminatoren D. Dette straffer output-billedstrukturen på skalaen af ​​patches. Disse producerer output som et skeletbord.

I den anden del optimerer de tilpasningen af ​​kandidatens latente datastrukturer til det genererede skeletbillede ved hjælp af et mål for afstanden mellem hver kandidat og skelettet. Sådan udtrækkes teksten inde i billederne. Nedenfor er et billede, der viser arkitekturen:

Tabeldetektion og informationsudtrækning ved hjælp af Deep Learning PlatoBlockchain Data Intelligence. Lodret søgning. Ai.
Generel skematisk af fremgangsmåden

Produktion: De estimerede tabelstrukturer evalueres ved at sammenligne – Række- og kolonnenummer, Øverste venstre hjørneposition, Rækkehøjder og kolonnebredder

Den genetiske algoritme gav 95.5% nøjagtighed rækkevis og 96.7% nøjagtighed kolonnevis, mens information blev udtrukket fra tabellerne.

Tabeldetektion og informationsudtrækning ved hjælp af Deep Learning PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Behov for at digitalisere dokumenter, kvitteringer or fakturaer men for doven til at kode? Gå over til Nanonetter og byg OCR-modeller gratis!


[Kode] Traditionelle tilgange

I dette afsnit lærer vi processen med, hvordan man udtrækker information fra tabeller ved hjælp af Deep Learning og OpenCV. Du kan tænke på denne forklaring som en introduktion, men at bygge state-of-the-art modeller kræver en masse erfaring og øvelse. Dette vil hjælpe dig med at forstå det grundlæggende i, hvordan vi kan træne computere med forskellige mulige tilgange og algoritmer.

For at forstå problemet på en mere præcis måde, definerer vi nogle grundlæggende termer, som vil blive brugt gennem artiklen:

  • tekst: indeholder en streng og fem attributter (øverst, venstre, bredde, højde, skrifttype)
  • Line (linje): indeholder tekstobjekter, som antages at være på samme linje i den originale fil
  • Enkelt linje: linjeobjekt med kun ét tekstobjekt.
  • Multi-line: linjeobjekt med mere end ét tekstobjekt.
  • Multi-line Bloker: et sæt kontinuerlige multi-line objekter.
  • Række: Vandrette blokke i tabellen
  • Kolonne: Lodrette blokke i tabellen
  • Cell: skæringspunktet mellem en række og kolonne
  • Celle – polstring: den indre polstring eller rummet inde i cellen.

Tabeldetektion med OpenCV

Vi vil bruge traditionelle computervisionsteknikker til at udtrække information fra de scannede tabeller. Her er vores pipeline; vi indfanger først dataene (tabellerne, hvorfra vi skal udtrække informationen) ved hjælp af normale kameraer, og derefter ved hjælp af computersyn, vil vi prøve at finde grænser, kanter og celler. Vi vil bruge forskellige filtre og konturer, og vi vil fremhæve tabellernes kernetræk.

Vi skal bruge et billede af et bord. Vi kan fange dette på en telefon eller bruge et hvilket som helst eksisterende billede. Nedenfor er kodestykket,

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

Her har vi indlæst det samme billedbillede to variabler siden vi skal bruge table_image_contour når vi tegner vores detekterede konturer på det indlæste billede. Nedenfor er billedet af tabellen, som vi bruger i vores program:

Tabeldetektion og informationsudtrækning ved hjælp af Deep Learning PlatoBlockchain Data Intelligence. Lodret søgning. Ai.
Billede af bordet

Vi skal bruge en teknik kaldet Omvendt billedtærskelværdi hvilket forbedrer dataene i det givne billede.

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

Et andet vigtigt forbehandlingstrin er billedudvidelse. Dilatation er en simpel matematisk operation, der anvendes på binære billeder (sort og hvid), som gradvist forstørrer grænserne for områder af forgrundspixel (dvs hvide pixels, typisk).

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

I OpenCV bruger vi metoden, find konturer for at få konturerne i det nuværende billede. Denne metode tager tre argumenter, det første er det udvidede billede (billedet, der bruges til at generere det udvidede billede er table_image_contour – findContours-metoden understøtter kun binære billeder), det andet er cv2.RETR_TREE som fortæller os at bruge konturhentningstilstanden, den tredje er  cv2.CHAIN_APPROX_SIMPLE som er konturtilnærmelsestilstanden. Det find konturer udpakker to værdier, og derfor tilføjer vi en variabel mere med navnet hierarki. Når billederne er indlejret, udstråler konturer indbyrdes afhængighed. For at repræsentere sådanne relationer bruges hierarki.

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

Konturerne markerer, hvor nøjagtigt data er til stede i billedet. Nu itererer vi over konturlisten, som vi beregnede i det foregående trin, og beregner koordinaterne for de rektangulære kasser som observeret i det originale billede ved hjælp af metoden,  cv2.boundingRect. I den sidste iteration satte vi disse kasser på det originale billede table_image ved hjælp af metoden, 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) 

Dette er vores sidste skridt. Her bruger vi metoden navngivet Window at gengive vores tabel med det ekstraherede indhold og konturer indlejret på det. Nedenfor er kodestykket:

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

Tabeldetektion og informationsudtrækning ved hjælp af Deep Learning PlatoBlockchain Data Intelligence. Lodret søgning. Ai.
Udgange

Skift værdien af ​​y til 300 i ovenstående kodestykke, dette vil være dit output:

Tabeldetektion og informationsudtrækning ved hjælp af Deep Learning PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Når du har udtrukket tabellerne, kan du køre hver konturafskæring gennem tesseract OCR-motoren, som du kan finde selvstudiet til link.. Når vi har kasser med hver tekst, kan vi gruppere dem baseret på deres x- og y-koordinater for at udlede, hvilken tilsvarende række og kolonne de tilhører.

Udover dette er der mulighed for at bruge PDFMiner til at omdanne dine pdf-dokumenter til HTML-filer, som vi kan parse ved hjælp af regulære udtryk for endelig at få vores tabeller. Sådan kan du gøre det.


PDFMiner og Regex-parsing

For at udtrække information fra mindre dokumenter tager det tid at konfigurere dybe læringsmodeller eller skrive computervisionsalgoritmer. I stedet kan vi bruge regulære udtryk i Python til udtrække tekst fra PDF-dokumenterne. Husk også, at denne teknik ikke virker til billeder. Vi kan kun bruge dette til at udtrække information fra HTML-filer eller PDF-dokumenter. Dette skyldes, at når du bruger et regulært udtryk, skal du matche indholdet med kilden og udtrække information. Med billeder vil du ikke være i stand til at matche teksten, og de regulære udtryk vil mislykkes. Lad os nu arbejde med et simpelt PDF-dokument og udtrække information fra tabellerne i det. Nedenfor er billedet:

Tabeldetektion og informationsudtrækning ved hjælp af Deep Learning PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

I det første trin indlæser vi PDF'en i vores program. Når det er gjort, konverterer vi PDF'en til HTML, så vi direkte kan bruge regulære udtryk og derved udtrække indhold fra tabellerne. Til dette er det modul vi bruger pdfminer. Dette hjælper med at læse indhold fra PDF og konvertere det til en HTML-fil.

Nedenfor er kodestykket:

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

Kodekreditter: zevross

Vi importerede en masse moduler inklusive Regular Expression og PDF-relaterede biblioteker. I metoden convert_pdf_to_html, vi sender stien til PDF-filen, som skal konverteres til en HTML-fil. Outputtet af metoden vil være en HTML-streng som vist nedenfor:

'<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>' 

Regulært udtryk er en af ​​de sværeste og sejeste programmeringsteknikker, der bruges til mønstertilpasning. Disse bruges i vid udstrækning i flere applikationer, f.eks. til kodeformatering, web-skrabning og valideringsformål. Før vi begynder at udtrække indhold fra vores HTML-tabeller, lad os hurtigt lære et par ting om regulære udtryk.

Dette bibliotek giver forskellige indbyggede metoder til at matche og søge efter mønstre. Nedenfor er et par stykker:

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)

Tegn/udtryk, du normalt ser i regulære udtryk, omfatter:

  • [AZ] - et stort bogstav
  • d - ciffer
  • w - ordtegn (bogstaver, cifre og understregninger)
  • s - mellemrum (mellemrum, tabulatorer og mellemrum)

For nu at finde ud af et bestemt mønster i HTML, bruger vi regulære udtryk og skriver derefter mønstre i overensstemmelse hermed. Vi opdeler først dataene sådan, at adresseklumperne er adskilt i separate blokke i overensstemmelse med programnavnet (ANGELS CAMP, APPLE VALLEY osv.):

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…

Senere finder vi programnavn, by, stat og postnummer, som altid følger det samme mønster (tekst, komma, tocifrede store bogstaver, 5 tal (eller 5 tal bindestreger fire tal) – disse findes i PDF-filen, som vi betragtede som input). Tjek følgende kodestykke:

# 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)) 

Dette er et simpelt eksempel, der forklarer, hvordan vi udtrækker information fra PDF-filer ved hjælp af et regulært udtryk. Efter at have udtrukket alle de nødvendige oplysninger, indlæser vi disse data i en CSV-fil.

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

Så dette er et simpelt eksempel, der forklarer, hvordan du kan skubbe din udpakkede HTML ind i en CSV-fil. Først opretter vi en CSV-fil, finder alle vores attributter og skubber én efter én ind i deres respektive kolonner. Nedenfor er et skærmbillede:

Tabeldetektion og informationsudtrækning ved hjælp af Deep Learning PlatoBlockchain Data Intelligence. Lodret søgning. Ai.
Skærmbillede af de elementer, der er udtrukket fra tabeller ved hjælp af regulære udtryk

Til tider virker de ovenfor diskuterede teknikker komplicerede og udgør udfordringer for programmørerne, hvis tabellerne overhovedet er indlejrede og komplekse. Her sparer man meget tid ved at vælge CV eller Deep learning-model. Lad os se, hvilke ulemper og udfordringer der hindrer brugen af ​​disse traditionelle metoder.


Udfordringer med traditionelle metoder

I dette afsnit lærer vi i dybden om, hvor tabeludtrækningsprocesserne kan fejle, og vi vil yderligere forstå måderne til at overvinde disse forhindringer ved hjælp af moderne metoder, der er født ud af Deep Learning. Denne proces er dog ikke en kagegang. Årsagen er, at tabeller normalt ikke forbliver konstante hele vejen igennem. De har forskellige strukturer til at repræsentere dataene, og dataene i tabeller kan være flersprogede med forskellige formateringsstile (skrifttype, farve, skriftstørrelse og højde). For at bygge en robust model bør man derfor være opmærksom på alle disse udfordringer. Normalt omfatter denne proces tre trin: tabeldetektion, ekstraktion og konvertering. Lad os identificere problemerne i alle faser, én efter én:


Tabel Detektion

I denne fase identificerer vi, hvor præcis tabellerne er til stede i det givne input. Inputtet kan være af ethvert format, såsom billeder, PDF/Word-dokumenter og nogle gange videoer. Vi bruger forskellige teknikker og algoritmer til at detektere tabellerne, enten ved linjer eller ved koordinater. I nogle tilfælde kan vi støde på tabeller uden grænser overhovedet, hvor vi er nødt til at vælge forskellige metoder. Udover disse er her et par andre udfordringer:

  • Billedtransformation: Billedtransformation er et primært trin i detektering af etiketter. Dette omfatter forbedring af de data og grænser, der findes i tabellen. Vi er nødt til at vælge korrekte forbehandlingsalgoritmer baseret på dataene præsenteret i tabellen. Når vi for eksempel arbejder med billeder, skal vi anvende tærskelværdi- og kantdetektorer. Dette transformationstrin hjælper os med at finde indholdet mere præcist. I nogle tilfælde kan konturerne gå galt, og algoritmerne formår ikke at forbedre billedet. Derfor er det afgørende at vælge de rigtige billedtransformationstrin og forbehandling.
  • Billede kvalitet: Når vi scanner tabeller til informationsudtrækning, skal vi sikre os, at disse dokumenter scannes i lysere omgivelser, hvilket sikrer billeder af god kvalitet. Når lysforholdene er dårlige, kan CV- og DL-algoritmerne muligvis ikke registrere tabeller i de givne input. Hvis vi bruger deep learning, skal vi sikre, at datasættet er konsistent og har et godt sæt standardbilleder. Hvis vi bruger disse modeller på borde, der findes i gammelt krøllet papir, skal vi først forbehandle og eliminere støjen i disse billeder.
  • Forskellige strukturelle layouts og skabeloner: Alle borde er ikke unikke. En celle kan strække sig over flere celler, enten lodret eller vandret, og kombinationer af spændende celler kan skabe et stort antal strukturelle variationer. Nogle fremhæver også træk ved tekst, og tabellinjer kan påvirke den måde, tabellens struktur forstås på. For eksempel kan vandrette linjer eller fed tekst fremhæve flere overskrifter i tabellen. Tabellens struktur definerer visuelt relationerne mellem celler. Visuelle relationer i tabeller gør det vanskeligt beregningsmæssigt at finde de relaterede celler og udtrække information fra dem. Derfor er det vigtigt at bygge algoritmer, der er robuste til at håndtere forskellige strukturer af tabeller.
  • Cellepolstring, margener, kanter: Dette er det væsentlige ved ethvert bord - polstringer, marginer og kanter vil ikke altid være de samme. Nogle tabeller har meget polstring inde i celler, og nogle har ikke. Brug af billeder af god kvalitet og forbehandlingstrin vil hjælpe med at udtrække tabellen med at køre problemfrit.

Bordudtræk

Dette er den fase, hvor informationen udtrækkes, efter at tabellerne er identificeret. Der er mange faktorer i forhold til, hvordan indholdet er opbygget, og hvilket indhold der er til stede i tabellen. Derfor er det vigtigt at forstå alle udfordringerne, før man bygger en algoritme.

  • Tæt indhold: Indholdet af cellerne kan enten være numerisk eller tekstuelt. Tekstindholdet er dog normalt tæt og indeholder tvetydige korte tekstbidder med brug af akronymer og forkortelser. For at forstå tabeller skal teksten disambigueres, og forkortelser og akronymer skal udvides.
  • Forskellige skrifttyper og formater: Skrifttyper er normalt af forskellige stilarter, farver og højder. Vi skal sikre os, at disse er generiske og nemme at identificere. Få skrifttypefamilier, især dem, der falder ind under kursiv eller håndskrevet, er lidt svære at udtrække. Derfor hjælper brug af god skrifttype og korrekt formatering algoritmen med at identificere informationen mere præcist.
  • Flere side PDF'er og sideskift: Tekstlinjen i tabeller er følsom over for en foruddefineret tærskel. Med spændende celler på tværs af flere sider bliver det også svært at identificere tabellerne. På en multi-table side er det svært at skelne forskellige tabeller fra hinanden. Sparsomme og uregelmæssige borde er svære at arbejde med. Derfor bør grafiske herskende linjer og indholdslayout bruges sammen som vigtige kilder til at finde tabelregioner.

Konvertering af tabel

Den sidste fase omfatter konvertering af de udtrukne oplysninger fra tabeller til kompilering af dem som et redigerbart dokument, enten i excel eller ved hjælp af anden software. Lad os lære om nogle få udfordringer.

  • Indstil layout: Når forskellige formater af tabeller udtrækkes fra scannede dokumenter, skal vi have et ordentligt tabellayout for at skubbe indholdet ind. Nogle gange formår algoritmen ikke at udtrække information fra cellerne. Derfor er det også lige så vigtigt at designe et korrekt layout.
  • Forskellige værdipræsentationsmønstre: Værdier i celler kan præsenteres ved hjælp af forskellige syntaktiske repræsentationsmønstre. Betragt teksten i tabellen som 6 ± 2. Algoritmen kan muligvis ikke konvertere den pågældende information. Derfor kræver udtrækning af numeriske værdier viden om mulige præsentationsmønstre.
  • Repræsentation for visualisering: De fleste af repræsentationsformaterne for tabeller, såsom markup-sprog, hvor tabeller kan beskrives, er designet til visualisering. Derfor er det udfordrende at behandle tabeller automatisk.

Det er de udfordringer, vi står over for under bordudtrækningsprocessen ved hjælp af traditionelle teknikker. Lad os nu se, hvordan man kan overvinde disse ved hjælp af Deep Learning. Det forskes bredt i forskellige sektorer.



Behov for at digitalisere dokumenter, kvitteringer el fakturaer men for doven til at kode? Gå over til Nanonetter og byg OCR-modeller gratis!


Resumé

I denne artikel har vi gennemgået detaljeret informationsudtrækning fra tabeller. Vi har set, hvordan moderne teknologier som Deep Learning og Computer Vision kan automatisere hverdagsagtige opgaver ved at bygge robuste algoritmer til at levere nøjagtige resultater. I de indledende sektioner har vi lært om tabeludtræks rolle i at lette opgaver for enkeltpersoner, industrier og erhvervssektorer, og vi har også gennemgået use cases, der uddyber at udtrække tabeller fra PDF'er/HTML, formularautomatisering, faktura Automatisering osv. Vi har kodet en algoritme ved hjælp af Computer Vision til at finde informationspositionen i tabellerne ved hjælp af tærskel-, dilatations- og konturdetektionsteknikker. Vi har diskuteret de udfordringer, vi kan stå over for under tabeldetektions-, ekstraktions- og konverteringsprocesserne, når vi bruger de konventionelle teknikker, og erklæret, hvordan dyb læring kan hjælpe os med at overvinde disse problemer. Til sidst har vi gennemgået nogle få neurale netværksarkitekturer og forstået deres måder at opnå tabeludtræk på baseret på de givne træningsdata.



Update:
‌ Tilføjet mere læsemateriale om forskellige tilgange til tabeldetektion og informationsudtrækning ved hjælp af dyb læring.

Tidsstempel:

Mere fra AI og maskinindlæring