Automating Receipt Digitization with OCR and Deep Learning PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Automatizarea digitalizării încasărilor cu OCR și învățare profundă

Automatizarea digitalizării încasărilor cu OCR și învățare profundă

Want to automate data extraction from receipts? Check out Nanonets' pre-trained Chitanță OCR or construiește-ți propriul customized receipt OCR. You can also programează o demonstrație to learn more about our AP use cases!


Chitanță OCR or receipt digitization addresses the challenge of automatically extracting information from a  receipt. In this article, I cover the theory behind receipt digitization and implement an end-to-end pipeline using OpenCV and Tesseract. I also review a few important papers that do Receipt Digitization using Deep Learning.

Ce este digitizarea chitanțelor?

Chitanțele conțin informațiile necesare pentru ca schimburile comerciale să aibă loc între companii și o mare parte din acestea sunt pe hârtie sau în formate semi-structurate, cum ar fi PDF-uri și imagini de hârtie/copii pe hârtie. Pentru a gestiona eficient aceste informații, companiile extrag și stochează informațiile relevante conținute în aceste documente. În mod tradițional, acest lucru a fost realizat prin extragerea manuală a informațiilor relevante și introducerea lor într-o bază de date, care este un proces care necesită forță de muncă și costisitor.

Digitalizarea chitanței abordează provocarea de a extrage automat informații dintr-o chitanță.

Extragerea informațiilor cheie din chitanțe și conversia acestora în documente structurate poate servi multor aplicații și servicii, cum ar fi arhivarea eficientă, indexarea rapidă și analiza documentelor. Aceștia joacă roluri esențiale în eficientizarea proceselor intensive în documente și în automatizarea biroului în multe domenii financiare, contabile și fiscale.

Automatizarea digitalizării încasărilor cu OCR și învățare profundă

Need a robust chitanță OCR or scanner de chitanțe to extract data from receipts? Check out Nanonets receipt OCR API!


Cui va găsi utilă digitizarea chitanțelor?

Iată câteva domenii în care digitizarea chitanțelor poate avea un impact enorm:

Automatizarea conturilor de plăti și creanțe

Calcularea manuală a conturilor de plătit (AP) și a conturilor de încasat (AR) este costisitoare, consumatoare de timp și poate duce la confuzii între manageri, clienți și furnizori. Cu digitizarea, companiile pot elimina aceste dezavantaje și pot avea mai multe avantaje – Transparență sporită, Analiza datelor, Capital de lucru îmbunătățit și urmărire mai ușoară.

Optimizarea lanțului de aprovizionare

Lanțurile de aprovizionare sunt coloana vertebrală a bunei funcționări a multor companii. Gestionarea sarcinilor, a fluxurilor de informații și a fluxurilor de produse este cheia pentru asigurarea controlului complet al aprovizionării și producției. Acest lucru este esențial pentru ca organizațiile să respecte termenele de livrare și să controleze costurile de producție.

Companiile care prosperă cu adevărat în zilele noastre au ceva semnificativ în comun: un lanț de aprovizionare digitizat. 89% dintre companii with digital supply chains receive perfect orders from international suppliers, ensuring on-time delivery. One of the key elements of realising the next generation digital Supply Chain 4.0, is automating data capturing and management and a lot of this data is the form of receipts and facturi.  Manual entry of receipts acts as a bottleneck across the supply chain and leads to unnecessary delays. If this receipt processing is digitized it can lead to substantial gains in time and efficiency.


Ai în minte o problemă OCR? Doriți să digitalizați facturi, PDF-uri sau plăcuțe de înmatriculare? Du-te la Nanoneți și construiește gratuit modele OCR!


De ce este o problemă dificilă?

Digitalizarea chitanțelor este dificilă, deoarece chitanțele au multe variații și sunt uneori de calitate scăzută. Scanarea chitanțelor introduce, de asemenea, mai multe artefacte în copia noastră digitală. Aceste artefacte ridică multe provocări de lizibilitate.

Automatizarea digitalizării încasărilor cu OCR și învățare profundă

Iată o listă cu câteva lucruri care fac dificilă rezolvarea problemei

  • Text scris de mână
  • Fonturi mici
  • Imagini zgomotoase
  • Imagini decolorate
  • Mișcarea și agitarea camerei
  • Filigrane
  • ridurile
  • Text estompat

O conductă tradițională de digitalizare a chitanțelor

O conductă tipică pentru acest tip de abordare end-to-end implică:

  • preprocesare
  • Recunoaștere optică a caracterelor
  • Extragerea informațiilor
  • Depozitare date
Automatizarea digitalizării încasărilor cu OCR și învățare profundă

Să ne scufundăm mai adânc în fiecare parte a conductei. Primul pas al procesului este preprocesarea.

preprocesare

Majoritatea bonurilor scanate sunt zgomotoase și au artefacte și astfel pentru ca OCR și sistemele de extragere a informațiilor să funcționeze bine, este necesară preprocesarea bonurilor. Metodele obișnuite de preprocesare includ: scalarea de gri, limitarea (binarizarea) și eliminarea zgomotului.

Grayscale este pur și simplu convertirea unei imagini RGB într-o imagine în tonuri de gri.

Îndepărtarea zgomotului implică de obicei eliminarea zgomotului de sare și piper sau a zgomotului gaussian.

Majoritatea motoarelor OCR funcționează bine pe imaginile alb-negru. Acest lucru poate fi realizat prin thresholding, care este alocarea valorilor pixelilor în raport cu valoarea pragului furnizată. Fiecare valoare de pixel este comparată cu valoarea pragului. Dacă valoarea pixelului este mai mică decât pragul, aceasta este setată la 0, în caz contrar, este setată la o valoare maximă (în general 255).

OpenCV provides various thresholding options – Simple Thresholding, Adaptive Thresholding

Automatizarea digitalizării încasărilor cu OCR și învățare profundă

Recunoaștere optică a caracterelor

Următorul pas în conductă este OCR. Este folosit pentru a citi text din imagini, cum ar fi un document scanat sau o imagine. Această tehnologie este folosită pentru a converti, practic, orice fel de imagini care conțin text scris (dactilografiat, scris de mână sau tipărit) în date text care pot fi citite de mașină.. OCR implică 2 pași – detectarea textului și recunoașterea textului.

Automatizarea digitalizării încasărilor cu OCR și învățare profundă

Există o serie de abordări ale OCR. Abordarea convențională computer Vision este de a

  • Folosind filtre pentru a separa caracterele de fundal
  • Aplicați detectarea conturului pentru a recunoaște caracterele filtrate
  • Utilizați clasificarea magilor pentru a identifica personajele

Aplicarea filtrelor și a clasificării imaginilor este destul de simplă (gândiți-vă la Clasificarea MNIST folosind SVN), dar potrivirea contururilor este o problemă foarte dificilă și necesită mult efort manual și nu este generalizabilă.

Urmează abordările Deep Learning. Deep Learning generalizează foarte bine. Una dintre cele mai populare abordări pentru detectarea textului este EAST. EAST (Detector eficient de text al scenei) este o abordare simplă, dar puternică pentru detectarea textului. Rețeaua EAST este de fapt o versiune a binecunoscutului U-Net, care este bună pentru detectarea caracteristicilor de diferite dimensiuni.

Automatizarea digitalizării încasărilor cu OCR și învățare profundă

CRNN și STN-OCR (Spatial Transformer Networks) sunt alte lucrări populare care efectuează OCR.

Extragerea informațiilor

Cea mai comună abordare a problemei extragerii informațiilor este bazată pe reguli, unde regulile sunt scrise după OCR pentru a extrage informațiile necesare. Aceasta este o abordare puternică și precisă, dar necesită să scrieți noi reguli sau șabloane pentru un nou tip de document.

Several rule-based factură analysis systems exist in literature.

  • Intellix de la DocuWare necesită un șablon adnotat cu câmpuri relevante.
  • SmartFix folosește reguli de configurare special concepute pentru fiecare șablon

Metodele bazate pe reguli se bazează în mare măsură pe regulile șablonului predefinite pentru a extrage informații din aspecte specifice ale facturii

O abordare care a devenit foarte comună în ultimii ani este utilizarea unui cadru standard de detectare a obiectelor precum YOLO, Faster R-CNN pentru a recunoaște câmpurile. Deci, în loc de detectarea textului pur, recunoașterea câmpului și detectarea textului sunt efectuate simultan. Acest lucru face ca conducta să fie mai mică (Detecție text → Recunoaștere → Extracție la detectare → Recunoaștere). Nu este nevoie să scrieți reguli, deoarece detectorul de obiecte învață să recunoască aceste câmpuri.

Dump de date

Odată ce ați extras informațiile, descărcarea datelor se poate face după cum cere cazul nostru de utilizare. Adesea, un format JSON pentru a stoca informațiile câmpurilor este convenabil. Aceste fișiere JSON pot fi convertite cu ușurință în fișiere XML, foi Excel, fișiere CSV sau fișiere text simplu, în funcție de cine dorește să lucreze cu datele și cum.

Receipt Digitization using Tesseract

Acum că avem o idee despre conductă, să o implementăm pe un exemplu de chitanță. Aceasta este chitanța cu care vom lucra. Scopul nostru la final este să extragem numele restaurantului, articolele achiziționate cu cantitatea și costul lor, data achiziției și totalul.

Automatizarea digitalizării încasărilor cu OCR și învățare profundă

preprocesare

Deoarece chitanța noastră este deja în tonuri de gri și nu există mult zgomot, voi face doar pragul aplicând un prag de 210. Puteți modifica valoarea pentru a obține rezultatul corect. Prea mai puțin și vei pierde multe. Prea aproape de 255 va face totul negru.

Mai întâi va trebui să instalăm OpenCV.

pip install opencv-python

Iată codul pentru prag.

import cv2
import numpy as np
from matplotlib import pyplot as plt # Read the image
img = cv2.imread('receipt.jpg',0)
# Simple thresholding
ret,thresh1 = cv2.threshold(img,210,255,cv2.THRESH_BINARY)
cv2.imshow(thresh1,’gray’)

Așa arată rezultatul.

Automatizarea digitalizării încasărilor cu OCR și învățare profundă

Detectarea textului

Pentru detectarea textului, voi folosi o bibliotecă open-source numită Tesseract. Este biblioteca OCR definitivă și a fost dezvoltată de Google din 2006. Cea mai recentă versiune a Tesseract (v4) acceptă OCR bazat pe învățare profundă, care este semnificativ mai precis. Motorul OCR de bază în sine utilizează o rețea de memorie pe termen scurt (LSTM).

Mai întâi, să instalăm cea mai recentă versiune de Tesseract.

Pentru ubuntu

sudo apt install tesseract-ocr

Pentru macOS

brew install tesseract --HEAD

Pentru Windows, puteți descărca fișierele binare de aici pagină

Verificați versiunea tesseract.

tesseract -v

Rezultat -

tesseract 4.0.0-beta.3
leptonica-1.76.0
libjpeg 9c : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.11
Found AVX512BW
Found AVX512F
Found AVX2
Found AVX
Found SSE

Instalați-vă legăturile Tesseract + Python

Acum că avem binarul Tesseract instalat, acum trebuie să instalăm legăturile Tesseract + Python, astfel încât scripturile noastre Python să poată comunica cu Tesseract. De asemenea, trebuie să instalăm pachetul în limba germană, deoarece chitanța este în germană.

pip install pytesseract
sudo apt-get install tesseract-ocr-deu

Now that we’ve installed Tesseract let’s start detecting the text boxes.Tesseract has in built functionality to detect text boxes.

import pytesseract
from pytesseract import Output
import cv2 img = cv2.imread('receipt.jpg')
d = pytesseract.image_to_data(img, output_type=Output.DICT)
n_boxes = len(d['level'])
for i in range(n_boxes): (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i]) img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2) cv2.imshow(img,'img')

Iată rezultatul codului de detectare a textului.

Automatizarea digitalizării încasărilor cu OCR și învățare profundă

Recunoașterea textului

Vom Tesseract pentru a efectua OCR. Tesseract 4 utilizează o abordare de învățare profundă care are performanțe semnificativ mai bune decât majoritatea altor implementări open-source.

Iată codul de recunoaștere a textului. Deși este o căptușeală foarte simplă, există multe care merg sub capotă.

extracted_text = pytesseract.image_to_string(img, lang = 'deu')

Iată rezultatul brut.

'BerghotelnGrosse Scheideggn3818 GrindelwaldnFamilie R.MüllernnRech.Nr. 4572 30.07.2007/13:29: 17nBar Tisch 7/01n2xLatte Macchiato &ä 4.50 CHF 9,00n1xGloki a 5.00 CH 5.00n1xSchweinschnitzel ä 22.00 CHF 22.00nIxChässpätz 1 a 18.50 CHF 18.50nnTotal: CHF 54.50nnIncl. 7.6% MwSt 54.50 CHF: 3.85nnEntspricht in Euro 36.33 EURnEs bediente Sie: UrsulannMwSt Nr. : 430 234nTel.: 033 853 67 16nFax.: 033 853 67 19nE-mail: grossescheidegs@b luewin. ch'

Iată rezultatul formatat

Berghotel
Grosse Scheidegg
3818 Grindelwald
Familie R.Müller Rech.Nr. 4572 30.07.2007/13:29: 17
Bar Tisch 7/01
2xLatte Macchiato &ä 4.50 CHF 9,00
1xGloki a 5.00 CH 5.00
1xSchweinschnitzel ä 22.00 CHF 22.00
IxChässpätz 1 a 18.50 CHF 18.50 Total: CHF 54.50 Incl. 7.6% MwSt 54.50 CHF: 3.85 Entspricht in Euro 36.33 EUR
Es bediente Sie: Ursula MwSt Nr. : 430 234
Tel.: 033 853 67 16
Fax.: 033 853 67 19
E-mail: grossescheidegs@b luewin. ch

Necesitatea de a digitiza documente, chitanțe sau facturi dar prea leneș să codific? Du-te la Nanoneți și construiește gratuit modele OCR!


Extragerea informațiilor

După cum am menționat mai devreme, cel mai comun mod de extragere a informațiilor este o abordare bazată pe reguli.

Toate chitanțele de la acest hotel vor urma o structură fixă ​​și informațiile apar pe rânduri diferite. Acest lucru se reflectă în rezultatul OCR, unde liniile noi sunt reprezentate prin „n”. Folosind acestea, să scriem un set de reguli pentru a extrage informații. Acest set de reguli poate fi aplicat oricărei chitanțe de la acest hotel, deoarece vor urma același format.

Automatizarea digitalizării încasărilor cu OCR și învățare profundă

Voi extrage numele restaurantului, data tranzacției, articolele cumpărate, cantitatea acestora, costurile totale pe articol și suma totală folosind comenzi simple python și expresii regulate.

Acesta este un dicționar în care voi stoca informațiile extrase.

receipt _ocr = {}

Primul pas este extragerea numelui Restaurantului. Locația numelui restaurantului va fi constantă în toate chitanțele și aceasta este în primele 2 rânduri. Să folosim asta pentru a crea o regulă.

splits = extracted_text.splitlines()
restaurant_name = splits[0] + '' + splits[1]

În continuare, extragem data tranzacției. Date regex este destul de simplu.


import re
# regex for date. The pattern in the receipt is in 30.07.2007 in DD:MM:YYYY date_pattern = r'(0[1-9]|[12][0-9]|3[01])[.](0[1-9]|1[012])[.](19|20)dd'
date = re.search(date_pattern, extracted_text).group()
receipt_ocr['date'] = date
print(date)

Rezultat -

‘30.10.2007’

Apoi extragem toate informațiile legate de articole și cost.

The items contain a CHF which is the swiss franc. Let's detect all occurrences of CHF. Now we can detect lines by recognizing the characters between 2 n and containing a CHF.  I’m detecting the total here also.

# get lines with chf
lines_with_chf = []
for line in splits: if re.search(r'CHF',line): lines_with_chf.append(line) print(lines_with_chf)

Rezultat -

2xLatte Macchiato &ä 4.50 CHF 9,00
1xSchweinschnitzel ä 22.00 CHF 22.00
IxChässpätz 1 a 18.50 CHF 18.50
Total: CHF 54.50
Incl. 7.6% MwSt 54.50 CHF: 3.85

Dacă observați, Tesseract a omis un articol deoarece a detectat CH în loc de CHF. Voi acoperi provocările sistemelor OCR tradiționale în secțiunea următoare.

# get items, total, ignore Incl
items = []
for line in lines_with_chf: print(line) if re.search(r'Incl',line): continue if re.search(r'Total', line): total = line else: items.append(line) # Get Name, quantity and cost all_items = {}
for item in items: details = item.split() quantity_name = details[0] quantity = quantity_name.split('x')[0] name = quantity_name.split('x')[1] cost = details[-1] all_items[name] = {'quantity':quantity, 'cost':cost} total = total.split('CHF')[-1] # Store the results in the dict
receipt_ocr['items'] = all_items
receipt_ocr[‘total’] = total import json receipt_json = json.dumps(receipt_ocr)
print(receipt_json)

Imprimarea ieșirii noastre JSON -

{'date': '30.07.2007', 'items': {'Chässpätz': {'cost': '18.50', 'quantity': 'I'}, 'Latte': {'cost': '9,00', 'quantity': '2'}, 'Schweinschnitzel': {'cost': '22.00', 'quantity': '1'}}, 'total': ' 54.50'}

Toate informațiile cheie au fost extrase și aruncate în receipt_json..

Probleme cu abordarea convențională

Deși am extras informațiile, conducta de mai sus ratează câteva lucruri și este sub optimă. Pentru fiecare chitanță nouă trebuie să scriem un nou set de reguli și, prin urmare, nu este scalabil.

Ar putea exista o mulțime de variații în aspecte, dimensiuni de font și fonturi, documente scrise de mână etc. Diferențele de layout vor afecta abordările bazate pe reguli și acestea trebuie luate în considerare, ceea ce devine foarte obositor. Diferențele de font și dimensiunea fontului fac dificilă recunoașterea și extragerea informațiilor.

De ce este mai bună o conductă de învățare profundă end-to-end?

Una dintre cele mai mari probleme ale abordării standard este lipsa generalizării. Abordările bazate pe reguli nu se pot generaliza și trebuie scrise reguli noi pentru orice șablon nou. De asemenea, orice modificări sau variații ale unui șablon existent trebuie luate în considerare.

O abordare Deep Learning va putea învăța aceste reguli și va putea generaliza cu ușurință diferite aspecte, cu condiția să le avem în setul nostru de date de antrenament.

Învățare profundă și extragerea informațiilor

Aici trec în revistă câteva lucrări care folosesc abordări end-to-end de Deep Learning.

DRĂGUȚĂ

CUTIE: A învăța să înțelegi documentele cu Extractorul de informații text universal convoluțional

Această lucrare propune o metodă de extragere a informațiilor cheie bazată pe învățare, cu cerințe limitate de resurse umane. Combină informațiile din sensul semantic și din distribuția spațială a textelor din documente. Modelul propus, Convolutional Universal Text Information Extractor (CUTIE), aplică rețele neuronale convoluționale pe texte grid în care textele sunt încorporate ca caracteristici cu conotații semantice.

Automatizarea digitalizării încasărilor cu OCR și învățare profundă

Modelul propus, abordează problema extragerii informațiilor cheie prin

  • Mai întâi creând texte grid cu cele propuse metoda de cartografiere pozițională a grilei. Pentru a genera datele grilei pentru rețeaua neuronală convoluțională, imaginea documentului scanat este procesată de un motor OCR pentru a achiziționa textele și pozițiile lor absolute/relative. Textele sunt mapate de la imaginea originală a documentului scanat la grila țintă, astfel încât grila mapată păstrează relația spațială inițială între texte, dar mai potrivită pentru a fi utilizată ca intrare pentru rețeaua neuronală convoluțională.
  • Apoi se aplica modelul CUTIE pe textele grilate. Informația semantică bogată este codificată din textele grid chiar la stadiul de început al rețelei neuronale convoluționale cu un strat de încorporare a cuvintelor.

CUTIE permite analiza simultană atât a informațiilor semantice, cât și a informațiilor spațiale ale textelor din imaginea documentului scanat și poate ajunge la un nou rezultat de ultimă generație pentru extragerea informațiilor cheie.

Model CUTIE

Au 2 modele CUTIE-A si CUTIE-B. CUTIE-A propus este o rețea neuronală convoluțională de mare capacitate care fuzionează caracteristicile cu rezoluție multiplă fără a pierde caracteristicile de înaltă rezoluție. CUTIE-B este o rețea convoluțională cu convoluție atroasă pentru lărgirea câmpului vizual și modulul Atrous Spatial Pyramid Pooling (ASPP) pentru a captura contexte multi-scale. Atât CUTIE-A, cât și CUITE-B desfășoară procesul de codificare a sensului semantic cu un strat de încorporare a cuvintelor în stadiul de început.

Sarcina lui CUTIE seamănă cu sarcina de segmentare semantică. Grila mapată conține puncte de date împrăștiate (tokens text) în contrast cu imaginile răspândite cu pixeli. Textele cheie mapate pozițional în grilă sunt fie apropiate, fie îndepărtate unele de altele, datorită diferitelor tipuri de aspecte ale documentelor. Prin urmare, încorporarea capacității de procesare a contextului multi-scală aduce beneficii rețelei.

Setul de date

Metoda propusă este evaluată pe baza provocării de citire robustă ICDAR 2019 pe setul de date SROIE și este, de asemenea, pe un set de date auto-construit cu 3 tipuri de imagini de document scanate.

Setul de date ICDAR 2019 SROIE este utilizat care conține 1000 de imagini întregi de chitanță scanate. Fiecare imagine de chitanță conține aproximativ patru câmpuri de text cheie, cum ar fi numele mărfurilor, prețul unitar, data și costul total. Textul adnotat în setul de date constă în principal din cifre și caractere englezești.

Setul de date auto-construit conține 4 de documente de chitanțe spaniole scanate, adnotate, inclusiv chitanțe de taxi, chitanțe de divertisment pentru mese (ME) și chitanțe de hotel, cu 484 clase diferite de informații cheie.

REZULTATE

Performanța generală este evaluată utilizând precizia medie (AP – și măsurată în termeni de precizie pe clasă în cele 9 clase) și precizia medie soft (softAP), unde predicția unei clase de informații cheie este determinată ca fiind corectă dacă adevăruri de teren pozitive sunt corect prezise chiar dacă unele fals pozitive sunt incluse în predicția finală. analiza comună a AP și softAP oferă o mai bună înțelegere a performanței modelului.

Puteți vedea rezultatele în tabelul de mai jos.

Automatizarea digitalizării încasărilor cu OCR și învățare profundă

GCN-uri pentru VRD-uri

Convoluție grafică pentru extragerea informațiilor multimodale din documente bogate vizual

Această lucrare prezintă un model bazat pe convoluția grafică pentru a combina informațiile textuale și vizuale prezentate în documente Visually Rich (VRD). Înglobările de grafice sunt antrenate pentru a rezuma contextul unui segment de text din document și, în continuare, sunt combinate cu încorporarea de text pentru extragerea de entități.

În această lucrare ei numesc un document un VRD și voi rămâne cu el.

Fiecare document este modelat ca un grafic al segmentelor de text, unde fiecare segment de text este compus din poziția segmentului și textul din interiorul acestuia. Graficul este compus din noduri care reprezintă segmente de text și margini care reprezintă dependențe vizuale, cum ar fi formele relative și distanța, între două noduri.

Automatizarea digitalizării încasărilor cu OCR și învățare profundă

Înglobările grafice produse de convoluția graficului rezumă contextul unui segment de text din document, care sunt în continuare combinate cu înglobare de text pentru extragerea entităților folosind un model standard BiLSTM-CRF.

Model

Modelul codifică mai întâi fiecare segment de text din document în încorporarea graficului, folosind mai multe straturi de convoluție grafică. Încorporarea reprezintă informația din segmentul de text având în vedere contextul său vizual și textual. Contextul vizual este aspectul documentului și pozițiile relative ale segmentului individual față de alte segmente. Contextul textual este agregatul de informații text din document în ansamblu; Modelul învață să atribuie ponderi mai mari textelor din segmentele vecine. Apoi lucrarea combină înglobarea graficelor cu încorporarea textului și aplică un model standard BiLSTM-CRF pentru extragerea entităților.

Automatizarea digitalizării încasărilor cu OCR și învățare profundă

Setul de date

Two real-world datasets are used. They are ValueAdded Tax Invoices (VATI) and International Purchase Receipts (IPR). VATI consists of 3000 user-uploaded pictures and has 16 entities to exact. Example entities are the names of buyer/seller, date and tax amount. The invoices are in Chinese, and it has a fixed template since it is national standard invoice.

IPR este un set de date de 1500 de documente de chitanță scanate în limba engleză, care are 4 entități de exact (Numărul facturii, Numele furnizorului, Numele plătitorului și Suma totală). Există 146 de șabloane pentru chitanțe.

REZULTATE

Scorul F1 este utilizat pentru a evalua performanțele modelului în toate experimentele. Tabelul de mai jos are rezultatele pe 2 seturi de date.

Automatizarea digitalizării încasărilor cu OCR și învățare profundă

Linia de bază I aplică BiLSTM-CRF fiecărui segment de text, unde fiecare segment de text este o propoziție individuală.

Linia de bază II aplică modelul de etichetare segmentelor de text concatenate.

Mai rapid-RCNN + AED

Abordarea de deep learning pentru recunoașterea chitanțelor

Această lucrare prezintă o abordare de deep learning pentru recunoașterea chitanțelor scanate. Sistemul de recunoaștere are două module principale: detectarea textului bazată pe Rețeaua de propuneri de text Connectionist și recunoașterea textului bazată pe Encoder-Decoder bazat pe atenție. Sistemul a obținut 71.9% din scorul F1 pentru sarcina de detectare și recunoaștere.

Detectarea textului

Structura CTPN este similară cu Faster R-CNN, cu adăugarea stratului LSTM. Modelul de rețea constă în principal din trei părți: extragerea caracteristicilor prin VGG16, LSTM bidirecțional și regresie cu caseta de delimitare

Automatizarea digitalizării încasărilor cu OCR și învățare profundă

Recunoașterea textului

AED este utilizat pentru a recunoaște liniile de text. AED are două module principale: DenseNet pentru extragerea de caracteristici dintr-o imagine text și un LSTM combinat cu un model de atenție pentru prezicerea textului de ieșire.

Automatizarea digitalizării încasărilor cu OCR și învățare profundă

Setul de date

Se utilizează setul de date de la SROIE 2019. Ei au împărțit datele de instruire în instruire, validare și testare și au selectat aleatoriu 80% din chitanțe pentru instruire, 10% din chitanțe pentru validare și restul pentru testare. Rezultă 500 de chitanțe pentru instruire, 63 de chitanțe pentru validare și 63 pentru testare.

REZULTATE

Pentru detectarea textului, hârtia folosește Tightness-aware Intersection-over-Union (TIoU) Pentru recunoașterea textului, hârtia a folosit F1 , Precision and Recall.

Automatizarea digitalizării încasărilor cu OCR și învățare profundă

Tabelul I arată rezultatul CTPN cu trei condiții: CTPN pe imaginile originale; preprocesare + CTPN, preprocesare + CTPN + verificare OCR. Tabelul 2 prezintă rezultatele rețelei AED.

Automatizarea digitalizării încasărilor cu OCR și învățare profundă

There's of course, an easier, more intuitive way to do this.


Need a robust chitanță OCR to extract data from receipts? Check out Nanonets receipt OCR API!


OCR cu nanonete

Update #1: We just released our chitanță OCR pre-trained model. Head over to https://app.nanonets.com and start testing!

Automatizarea digitalizării încasărilor cu OCR și învățare profundă

Nanonets API OCR vă permite să construiți modele OCR cu ușurință. Nu trebuie să vă faceți griji cu privire la preprocesarea imaginilor sau cu privire la potrivirea șabloanelor sau să construiți motoare bazate pe reguli pentru a crește acuratețea modelului dvs. OCR.

Puteți să vă încărcați datele, să le adnotați, să setați modelul să se antreneze și să așteptați să obțineți predicții printr-o interfață de utilizare bazată pe browser, fără să scrieți o singură linie de cod, să vă faceți griji pentru GPU-uri sau să găsiți arhitecturile potrivite pentru modelele dvs. de deep learning. De asemenea, puteți obține răspunsurile JSON ale fiecărei predicții pentru a le integra cu propriile sisteme și pentru a construi aplicații bazate pe învățare automată, bazate pe algoritmi de ultimă generație și pe o infrastructură puternică.

Utilizarea GUI: https://app.nanonets.com/

Puteți utiliza, de asemenea, API-ul Nanonets-OCR urmând pașii de mai jos:

Pasul 1: Clonați Repo, instalați dependențe

git clone https://github.com/NanoNets/nanonets-ocr-sample-python.git
cd nanonets-ocr-sample-python
sudo pip install requests tqdm

Pasul 2: Obțineți cheia API gratuită
Obțineți cheia API gratuită de la http://app.nanonets.com/#/keys

Automatizarea digitalizării încasărilor cu OCR și învățare profundă

Pasul 3: Setați cheia API ca o variabilă de mediu

export NANONETS_API_KEY=YOUR_API_KEY_GOES_HERE

Pasul 4: Creează un nou model

python ./code/create-model.py

Notă: Aceasta generează un MODEL_ID de care aveți nevoie pentru pasul următor

Pasul 5: Adăugați ID de model ca variabilă de mediu

export NANONETS_MODEL_ID=YOUR_MODEL_ID

Notă: veți obține YOUR_MODEL_ID din pasul anterior

Pasul 6: Încărcați datele de instruire
Datele de instruire se găsesc în images (fișiere imagine) și annotations (adnotări pentru fișierele imagine)

python ./code/upload-training.py

Pasul 7: Model de tren
După ce imaginile au fost încărcate, începeți instruirea modelului

python ./code/train-model.py

Pasul 8: Obțineți starea modelului
Modelul durează aproximativ 2 ore pentru antrenament. Veți primi un e-mail după ce modelul este instruit. Între timp verificați starea modelului

python ./code/model-state.py

Pasul 9: Faceți previziunea
Odată ce modelul este instruit. Puteți face predicții folosind modelul

python ./code/prediction.py ./images/151.jpg

Lecturi suplimentare

Actualizați:
‌ Added more reading material about latest advances in automating receipt digitization using OCR and Deep Learning.

Timestamp-ul:

Mai mult de la AI și învățarea automată