Wykrywanie tabel i wyodrębnianie informacji przy użyciu głębokiego uczenia

Węzeł źródłowy: 1325422

Wprowadzenie do wyodrębniania tabel

Ilość gromadzonych danych drastycznie wzrasta z dnia na dzień wraz z rosnącą liczbą aplikacji, oprogramowania i platform internetowych.

Aby wydajnie obsługiwać te ogromne dane lub uzyskiwać do nich dostęp, konieczne jest opracowanie cennych narzędzi do ekstrakcji informacji.

Jednym z obszarów, które wymagają uwagi w polu Wyodrębnianie informacji, jest wyodrębnianie tabel z obrazów lub wykrywanie danych tabelarycznych z formularzy, plików PDF i dokumentów.

Ekstrakcja tabeli to zadanie polegające na wykrywaniu i rozkładaniu informacji z tabeli w dokumencie.

Table OCR - Nanonets wydobywające dane tabeli z obrazu!
Table OCR – Nanonety wydobywające dane z tabeli z obrazu!

Wyobraź sobie, że masz wiele dokumentów z danymi tabelarycznymi, które musisz wyodrębnić w celu dalszego przetwarzania. Zwykle można je skopiować ręcznie (na papierze) lub załadować do arkuszy Excela.

Jednak dzięki oprogramowaniu do OCR tabel można automatycznie wykrywać tabele i wyodrębniać wszystkie dane tabelaryczne z dokumentów za jednym razem. Oszczędza to dużo czasu i przeróbek.

W tym artykule najpierw przyjrzymy się, w jaki sposób Nanonets może automatycznie wyodrębniać tabele z obrazów lub dokumentów. Następnie omówimy kilka popularnych technik DL służących do wykrywania i wyodrębniania tabel w dokumentach.


Chcesz wyodrębnić dane tabelaryczne z faktur, paragonów lub innego rodzaju dokumentu? Sprawdź Nanonety Ekstraktor tabeli PDF aby wyodrębnić dane tabelaryczne. Zaplanuj demo aby dowiedzieć się więcej o automatyzacji ekstrakcja stołu.


Spis treści

Wyodrębnij tabelę z obrazu za pomocą OCR tabeli Nanonets

  • Zapisz się za darmowe konto Nanonets

    • Prześlij obrazy/pliki do modelu Nanonets Table OCR
    • Nanonets automatycznie wykrywa i wyodrębnia wszystkie dane tabelaryczne
    • Edytuj i przejrzyj dane (w razie potrzeby)
    • Eksportuj przetworzone dane jako Excel, csv lub JSON

Wyodrębnij tabelę z obrazu za pomocą nanonetów

Chcesz zeskrobać dane z PDF dokumenty, przekonwertować tabelę PDF do programu Excel or zautomatyzuj ekstrakcję stołu? Dowiedzieć się jak Nanonet Skrobak do plików PDF or Parser PDF może zwiększyć produktywność Twojej firmy.


Nanonet Table OCR API

Tabela OCR z nanonetami
Tabela OCR z nanonetami

Połączenia Nanonet OCR API pozwala z łatwością budować modele OCR. Nie musisz martwić się o wstępne przetwarzanie swoich obrazów, dopasowywanie szablonów lub budowanie silników opartych na regułach, aby zwiększyć dokładność modelu OCR.

Możesz przesłać swoje dane, opisać je, ustawić model na trenowanie i czekać na uzyskanie prognoz za pośrednictwem interfejsu użytkownika opartego na przeglądarce bez pisania ani jednej linii kodu, martwienia się o procesory graficzne lub znajdowania odpowiednich architektur do wykrywania tabel przy użyciu modeli uczenia głębokiego.

Możesz także pozyskać odpowiedzi JSON każdej prognozy, aby zintegrować ją z własnymi systemami i zbudować aplikacje oparte na uczeniu maszynowym, oparte na najnowocześniejszych algorytmach i silnej infrastrukturze.

https://nanonets.com/documentation/


Czy Twoja firma zajmuje się rozpoznawaniem danych lub tekstu w dokumentach cyfrowych, plikach PDF lub obrazach? Czy zastanawiałeś się, jak wyodrębnić dane tabelaryczne, wyodrębnij tekst z obrazów , wyodrębnij dane z pliku PDF or wyodrębnij tekst z pliku PDF dokładnie i skutecznie?


Kto uzna wyodrębnianie tabeli za przydatne

Jak omówiono w poprzedniej sekcji, tabele są często używane do przedstawiania danych w czystym formacie. Tak często widzimy je w kilku obszarach, od organizowania naszej pracy przez porządkowanie danych w tabelach po przechowywanie ogromnych zasobów firm. Istnieje wiele organizacji, które każdego dnia mają do czynienia z milionami stolików. Aby ułatwić tak żmudne zadania polegające na wykonywaniu wszystkiego ręcznie, musimy uciekać się do szybszych technik. Omówmy kilka przypadków użycia, w których wyciąganie stołów może być niezbędna:

Źródło: Patryk Tomasso, Odsplash

Osobiste przypadki użycia

Połączenia ekstrakcja stołu proces może być pomocny również w małych osobistych przypadkach. Czasami przechwytujemy dokumenty na telefonie komórkowym, a później kopiujemy je na nasze komputery. Zamiast korzystać z tego procesu, możemy bezpośrednio przechwytywać dokumenty i zapisywać je jako edytowalne formaty w naszych niestandardowych szablonach. Poniżej znajduje się kilka przypadków użycia, które opisują, w jaki sposób możemy dopasować ekstrakcję tabeli do naszej osobistej rutyny –

Skanowanie dokumentów do telefonu: Często robimy zdjęcia ważnych tabel na telefonie i zapisujemy je, ale dzięki technice ekstrakcji tabel możemy przechwytywać obrazy tabel i przechowywać je bezpośrednio w formacie tabelarycznym, w Excelu lub arkuszach Google. Dzięki temu nie musimy wyszukiwać obrazów ani kopiować zawartości tabeli do żadnych nowych plików, zamiast tego możemy bezpośrednio korzystać z zaimportowanych tabel i rozpocząć pracę nad wyodrębnionymi informacjami.

Dokumenty do HTML: Na stronach internetowych znajdujemy mnóstwo informacji przedstawionych za pomocą tabel. Pomagają nam w porównaniu z danymi i dają nam szybką notatkę na temat liczb w zorganizowany sposób. Korzystając z procesu wyodrębniania tabeli, możemy skanować dokumenty PDF lub obrazy JPG / PNG i ładować informacje bezpośrednio do niestandardowego, samodzielnie zaprojektowanego formatu tabeli. Możemy dalej pisać skrypty, aby dodawać dodatkowe tabele na podstawie istniejących tabel, a tym samym digitalizować informacje. Pomaga nam to w edycji treści i przyspiesza proces przechowywania.


Przemysłowe zastosowania

Na całym świecie istnieje kilka branż, które w dużym stopniu korzystają z formalności i dokumentacji, zwłaszcza w sektorach bankowym i ubezpieczeniowym. Stoły są szeroko stosowane, od przechowywania danych klientów po zaspokajanie potrzeb klientów. Ta informacja jest ponownie przekazywana jako dokument (wersja papierowa) do różnych oddziałów w celu uzyskania zatwierdzenia, przy czym czasami nieporozumienia mogą prowadzić do błędów podczas pobierania informacji z tabel. Zamiast tego korzystanie z automatyzacji znacznie ułatwia nam życie. Po przechwyceniu i zatwierdzeniu wstępnych danych możemy bezpośrednio zeskanować te dokumenty do tabel i dalej pracować nad zdigitalizowanymi danymi. Nie mówiąc już o zmniejszeniu zużycia czasu i błędów, możemy powiadomić klientów o czasie i miejscu przetwarzania informacji. Zapewnia to zatem wiarygodność danych i upraszcza sposób radzenia sobie z operacjami. Spójrzmy teraz na inne możliwe przypadki użycia:

Kontrola jakości: Kontrola jakości jest jedną z podstawowych usług świadczonych przez czołowe branże. Zwykle odbywa się to na miejscu i dla interesariuszy. W ramach tego istnieje wiele formularzy opinii, które są zbierane od konsumentów w celu uzyskania informacji zwrotnych na temat świadczonej usługi. W sektorach przemysłowych używają tabel do sporządzania codziennych list kontrolnych i notatek, aby zobaczyć, jak działają linie produkcyjne. Wszystko to można łatwo udokumentować w jednym miejscu za pomocą ekstrakcji tabeli.

Śledzenie aktywów: W przemyśle wytwórczym ludzie używają zakodowanych na stałe tabel, aby śledzić wytwarzane jednostki, takie jak stal, żelazo, plastik itp. Każdy wyprodukowany przedmiot jest oznaczony unikalnym numerem, w którym używają tabel do śledzenia przedmiotów wytwarzanych i dostarczanych każdego dnia. Automatyzacja może pomóc zaoszczędzić dużo czasu i zasobów związanych z błędami w rozmieszczeniu lub niespójnością danych.


Biznesowe przypadki użycia

Istnieje kilka branż biznesowych, które działają na arkuszach programu Excel i formularzach offline. Ale w pewnym momencie przeszukiwanie tych arkuszy i formularzy jest trudne. Jeśli ręcznie wprowadzamy te tabele, jest to czasochłonne, a szansa na niepoprawne wprowadzenie danych będzie duża. Dlatego ekstrakcja tabeli jest lepszą alternatywą do rozwiązywania biznesowych przypadków użycia, ponieważ takich poniżej jest niewiele.

Faktura Automatyka: Istnieje wiele małych i dużych gałęzi przemysłu, których: faktury są nadal generowane w formatach tabelarycznych. Nie dostarczają one odpowiednio zabezpieczonych zeznań podatkowych. Aby pokonać takie przeszkody, możemy użyć ekstrakcji tabeli do konwersji wszystkich faktury do formatu edytowalnego, a tym samym zaktualizuj je do nowszej wersji.

Automatyzacja formularzy: Formularze online zakłócają tę wypróbowaną i sprawdzoną metodę, pomagając firmom zbierać potrzebne informacje i jednocześnie łącząc je z innymi platformami oprogramowania wbudowanymi w ich przepływ pracy. Oprócz zmniejszenia potrzeby ręcznego wprowadzania danych (z automatyczne wprowadzanie danych) i e-maili uzupełniających, ekstrakcja tabeli może wyeliminować koszty drukowania, wysyłania, przechowywania, organizowania i niszczenia tradycyjnych papierowych alternatyw.


Masz na myśli problem z OCR? Chcesz zdigitalizować faktury, PDFy czy tablice rejestracyjne? Udaj się do Nanonet i buduj modele OCR za darmo!


Deep Learning w akcji

Głębokie uczenie jest częścią szerszej rodziny metod uczenia maszynowego opartych na sztucznych sieciach neuronowych.

Sieć neuronowa to struktura, która rozpoznaje podstawowe relacje w danych za pomocą procesu naśladującego sposób działania ludzkiego mózgu. Mają różne sztuczne warstwy, przez które przechodzą dane, gdzie uczą się o cechach. Istnieją różne architektury, takie jak Convolution NN, Recurrent NN, Autoencoders, Generative Adversarial NNs do przetwarzania różnych rodzajów danych. Są one złożone, ale przedstawiają wysoką wydajność umożliwiającą rozwiązywanie problemów w czasie rzeczywistym. Przyjrzyjmy się teraz badaniom przeprowadzonym w dziedzinie ekstrakcji tabel przy użyciu sieci neuronowych, a także przejrzyjmy je pokrótce.


Sieć tabel

Papier: TableNet: Model Deep Learning do kompleksowego wykrywania tabel i ekstrakcji danych tabelarycznych ze skanowanych obrazów dokumentów

Wstęp: TableNet to nowoczesna architektura głębokiego uczenia, która została zaproponowana przez zespół z TCS Research w roku 2019. Główną motywacją było wydobycie informacji ze zeskanowanych tabel za pomocą telefonów komórkowych lub aparatów fotograficznych.

Zaproponowali rozwiązanie, które obejmuje dokładne wykrywanie obszaru tabelarycznego na obrazie, a następnie wykrywanie i wydobywanie informacji z wierszy i kolumn wykrytej tabeli.

Zestaw danych: Użyty zbiór danych to Marmot. Ma 2000 stron w formacie PDF, które zostały zebrane z odpowiednimi prawdami podstawowymi. Dotyczy to również chińskich stron. Link - http://www.icst.pku.edu.cn/cpdp/sjzy/index.htm

architektura: Architektura oparta jest na Long et al., modelu kodera-dekodera do segmentacji semantycznej. Ta sama sieć kodera/dekodera jest używana jako architektura FCN do wyodrębniania tabel. Obrazy są wstępnie przetwarzane i modyfikowane za pomocą Tesseract OCR.

Model jest tworzony w dwóch fazach poprzez poddanie danych wejściowych technikom głębokiego uczenia. W pierwszej fazie wykorzystali wagi wstępnie wytrenowanej sieci VGG-19. Zastąpili w pełni połączone warstwy używanej sieci VGG warstwami konwolucyjnymi 1 × 1. Po wszystkich warstwach splotowych następuje aktywacja ReLU i warstwa odpadania z prawdopodobieństwem 0.8. Nazywają drugą fazę jako zdekodowaną sieć, która składa się z dwóch odgałęzień. Jest to zgodne z intuicją, że region kolumny jest podzbiorem obszaru tabeli. W ten sposób pojedyncza sieć kodująca może odfiltrować aktywne regiony z lepszą dokładnością, wykorzystując cechy zarówno regionów tabel, jak i kolumn. Dane wyjściowe z pierwszej sieci są dystrybuowane do dwóch oddziałów. W pierwszej gałęzi są stosowane dwie operacje splotu, a ostateczna mapa cech jest przeskalowywana w celu uzyskania oryginalnych wymiarów obrazu. W drugiej gałęzi do wykrywania kolumn znajduje się dodatkowa warstwa splotu z funkcją aktywacji ReLU i warstwa zaniku z takim samym prawdopodobieństwem odpadnięcia, jak wspomniano wcześniej. Mapy cech są próbkowane w górę przy użyciu zwojów frakcjonalnie kroczących po warstwie splotu (1 × 1). Poniżej znajduje się obraz architektury:

Architektura TableNet

Wyjścia: Po przetworzeniu dokumentów za pomocą modelu generowane są maski tabel i kolumn. Maski te służą do odfiltrowywania tabeli i jej regionów kolumn z obrazu. Teraz przy użyciu Tesseract OCR informacje są pobierane z segmentowanych regionów. Poniżej znajduje się obraz przedstawiający maski, które są generowane i później wyodrębniane z tabel:

Zaproponowali również ten sam model, który został dopracowany za pomocą ICDAR, który działał lepiej niż oryginalny model. Recall, Precision i F1-Score precyzyjnie dostrojonego modelu to odpowiednio 0.9628, 0.9697, 0.9662. Oryginalny model ma zapisane metryki 0.9621, 0.9547, 0.9583 w tej samej kolejności. Zanurzmy się teraz w jeszcze jedną architekturę.


GłębokieDeSRT

Papier: DeepDeSRT: Deep Learning do wykrywania i rozpoznawania struktury tabel w obrazach dokumentów

Wstęp: DeepDeSRT to struktura sieci neuronowej, która służy do wykrywania i rozumienia tabel w dokumentach lub obrazach. Ma dwa rozwiązania wymienione w tytule:

  1. Przedstawia rozwiązanie oparte na głębokim uczeniu się do wykrywania tabel w obrazach dokumentów.
  2. Proponuje nowatorskie, oparte na głębokim uczeniu podejście do rozpoznawania struktury tabel, tj. Identyfikowanie wierszy, kolumn i pozycji komórek w wykrytych tabelach.

Proponowany model jest całkowicie oparty na danych, nie wymaga heurystyki ani metadanych dokumentów czy obrazów. Jedną z głównych zalet w odniesieniu do szkolenia jest to, że nie używali dużych zbiorów danych szkoleniowych, zamiast tego wykorzystali koncepcję uczenia transferu i adaptacji domeny zarówno do wykrywania tabel, jak i rozpoznawania struktury tabel.

Zestaw danych: Zastosowany zbiór danych to zbiór danych dotyczących zawodów tabelarycznych ICDAR 2013, zawierający 67 dokumentów o łącznej liczbie 238 stron.

architektura:

  • Wykrywanie tabeli Zaproponowany model wykorzystywał Fast RCNN jako podstawową strukturę wykrywania tabel. Architektura jest podzielona na dwie różne części. W pierwszej części wygenerowali propozycje regionów na podstawie obrazu wejściowego z tak zwanej sieci propozycji regionów (RPN). W drugiej części sklasyfikowali regiony za pomocą Fast-RCNN. Aby wesprzeć tę architekturę, użyli ZFNet i ciężary VGG-16.
  • Rozpoznawanie struktury Po pomyślnym wykryciu tabeli i ustaleniu jej lokalizacji systemowi, kolejnym wyzwaniem w zrozumieniu jej zawartości jest rozpoznanie i zlokalizowanie wierszy i kolumn, które tworzą fizyczną strukturę tabeli. Dlatego wykorzystali w pełni połączoną sieć o wadze VGG-16, która wydobywa informacje z wierszy i kolumn. Poniżej znajdują się wyniki DeepDeSRT:

wyjścia:

Wyniki wykrywania tabeli
Wyniki rozpoznania struktury [6]

Wyniki oceny pokazują, że DeepDeSRT przewyższa najnowocześniejsze metody wykrywania tabel i rozpoznawania struktur i osiąga wartości F1 na poziomie 96.77% i 91.44% odpowiednio do wykrywania stołu i rozpoznawania struktury do 2015 roku.


Grafuj sieci neuronowe

Papier: Ponowne przemyślenie rozpoznawania tabel przy użyciu graficznych sieci neuronowych

Wstęp: W tym badaniu autorzy z Deep Learning Laboratory, National Center of Artificial Intelligence (NCAI) zaproponowali Graph Neural Networks do wyodrębniania informacji z tabel. Twierdzili, że sieci grafowe są bardziej naturalnym wyborem dla tych problemów i dalej badali dwie oparte na gradiencie grafowe sieci neuronowe.

Ten proponowany model łączy zalety zarówno konwolucyjnych sieci neuronowych do wizualnej ekstrakcji cech, jak i sieci grafowych do radzenia sobie ze strukturą problemu.

Zestaw danych: Autorzy zaproponowali nowy duży, generowany syntetycznie zestaw danych zawierający 0.5 miliona tabel podzielonych na cztery kategorie.

  1. Obrazy to zwykłe obrazy bez łączenia i z liniami liniowymi
  2. Obrazy mają różne typy obramowań, w tym sporadyczny brak linii liniowych
  3. Wprowadza scalanie komórek i kolumn
  4. Kamera uchwyciła obrazy z liniową transformacją perspektywy

architektura: Użyli płytkiej sieci splotowej, która generuje odpowiednie cechy konwolucyjne. Jeśli wymiary przestrzenne elementów wyjściowych nie są takie same jak obrazu wejściowego, zbierają pozycje, które są skalowane liniowo w dół w zależności od stosunku między wymiarami wejściowymi i wyjściowymi, i wysyłają je do sieci interakcji, która ma dwie sieci grafów zwanych DGCNN i GravNet. Parametry sieci grafowej są takie same, jak oryginalnego CNN. W końcu wykorzystali próbkowanie par w czasie wykonywania, aby sklasyfikować wyodrębnioną zawartość, która wewnętrznie wykorzystała algorytm oparty na Monte Carlo. Poniżej znajdują się wyniki:

Wyjścia:

Wyniki generowane przez Graph Neural Networks

Poniżej znajdują się tabelaryczne liczby dokładności generowane przez sieci dla czterech kategorii sieci, jak przedstawiono w Dataset sekcja:


CGAN i algorytmy genetyczne

Papier: Wyodrębnianie tabel z dokumentów za pomocą warunkowych generatywnych sieci kontradyktoryjnych i algorytmów genetycznych

Wstęp: W tych badaniach autorzy zastosowali podejście odgórne zamiast oddolnego (integracja linii w komórki, wiersze lub kolumny).

W tej metodzie, używając generatywnej sieci kontradyktoryjnej, zmapowali obraz tabeli na znormalizowaną „szkieletową” formę tabeli. Ta tabela szkieletowa oznacza przybliżone obramowania wierszy i kolumn bez zawartości tabeli. Następnie dopasowują renderowanie kandydujących struktur ukrytych tabel do struktury szkieletu za pomocą miary odległości zoptymalizowanej przez algorytm genetyczny.

Zestaw danych: Autorzy wykorzystali własny zbiór danych zawierający 4000 tabel.

architektura: Proponowany model składa się z dwóch części. W pierwszej części obrazy wejściowe są abstrakcyjne w tabelach szkieletu przy użyciu warunkowej generatywnej przeciwnej sieci neuronowej. GAN ma znowu dwie sieci, generator, który generuje losowe próbki i dyskryminator, który mówi, czy wygenerowane obrazy są fałszywe, czy oryginalne. Generator G jest siecią kodera-dekodera, w której obraz wejściowy jest przepuszczany przez serię warstw stopniowo zmniejszających próbkowanie, aż do warstwy wąskiego gardła, w której proces jest odwracany. Aby przekazać wystarczającą ilość informacji do warstw dekodujących, używana jest architektura U-Net z połączeniami pomijanymi, a połączenie pomijane jest dodawane między warstwami i oraz n - i poprzez konkatenację, gdzie n to całkowita liczba warstw, a i to numer warstwy w koderze. W dyskryminatorze D. zastosowano architekturę PatchGAN. To powoduje ukaranie struktury obrazu wyjściowego w skali poprawek. Dają wynik w postaci tabeli szkieletu.

W drugiej części optymalizują dopasowanie potencjalnych utajonych struktur danych do wygenerowanego obrazu szkieletu przy użyciu miary odległości między każdym kandydatem a szkieletem. W ten sposób wyodrębniany jest tekst z obrazów. Poniżej obrazek przedstawiający architekturę:

Ogólny schemat podejścia

Wydajność: Szacowane struktury tabel są oceniane przez porównanie - Numer wiersza i kolumny, położenie w lewym górnym rogu, wysokość wierszy i szerokość kolumn

Algorytm genetyczny dał 95.5% dokładności w wierszach i 96.7% w kolumnach podczas wyodrębniania informacji z tabel.


Konieczność digitalizacji dokumentów, wpływy or faktury ale zbyt leniwy, by kodować? Udaj się do Nanonet i buduj modele OCR za darmo!


[Kod] Podejścia tradycyjne

W tej sekcji nauczymy się, jak wyodrębniać informacje z tabel przy użyciu funkcji Deep Learning i OpenCV. Możesz potraktować to wyjaśnienie jako wprowadzenie, jednak budowanie najnowocześniejszych modeli będzie wymagało dużego doświadczenia i praktyki. Pomoże Ci to zrozumieć podstawy tego, jak możemy szkolić komputery przy użyciu różnych możliwych podejść i algorytmów.

Aby dokładniej zrozumieć problem, zdefiniujemy kilka podstawowych terminów, które będą używane w całym artykule:

  • Tekst: zawiera ciąg i pięć atrybutów (górny, lewy, szerokość, wysokość, czcionka)
  • Linia: zawiera obiekty tekstowe, które przypuszczalnie znajdują się w tej samej linii w oryginalnym pliku
  • Pojedyncza linia: obiekt liniowy zawierający tylko jeden obiekt tekstowy.
  • Wiele linii: obiekt liniowy z więcej niż jednym obiektem tekstowym.
  • Wiele linii Blokować: zestaw ciągłych obiektów wieloliniowych.
  • Rząd: Poziome bloki w tabeli
  • Kolumna: Bloki pionowe w tabeli
  • Komórka: przecięcie wiersza i kolumny
  • Cell - Padding: wewnętrzna wyściółka lub przestrzeń wewnątrz komórki.

Wykrywanie tabel za pomocą OpenCV

Użyjemy tradycyjnych technik widzenia komputerowego, aby wydobyć informacje ze zeskanowanych tabel. Oto nasz rurociąg; początkowo przechwytujemy dane (tabele, z których musimy wyodrębnić informacje) za pomocą zwykłych kamer, a następnie za pomocą wizji komputerowej spróbujemy znaleźć granice, krawędzie i komórki. Użyjemy różnych filtrów i konturów oraz podkreślimy główne cechy tabel.

Będziemy potrzebować obrazu stołu. Możemy to uchwycić telefonem lub użyć dowolnego istniejącego obrazu. Poniżej znajduje się fragment kodu,

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

Tutaj załadowaliśmy ten sam image image dwie zmienne, ponieważ będziemy używać table_image_contour podczas rysowania wykrytych konturów na załadowanym obrazie. Poniżej obraz tabeli, której używamy w naszym programie:

Obraz stołu

Zastosujemy technikę zwaną Odwrotne progowanie obrazu który wzmacnia dane obecne na danym obrazie.

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

Kolejnym ważnym krokiem wstępnego przetwarzania jest dylatacja obrazu. Dylatacja to prosta operacja matematyczna stosowana do obrazów binarnych (czarno-białych), która stopniowo powiększa granice obszarów pikseli pierwszego planu (tj. zazwyczaj białe piksele).

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

W OpenCV używamy metody, znajdźKontury aby uzyskać kontury na obecnym obrazie. Ta metoda przyjmuje trzy argumenty, pierwszy to rozszerzony obraz (obraz używany do generowania rozszerzonego obrazu to table_image_contour - metoda findContours obsługuje tylko obrazy binarne), drugi to cv2.RETR_TREE który mówi nam, aby użyć trybu pobierania konturów, trzeci to  cv2.CHAIN_APPROX_SIMPLE który jest trybem przybliżania konturu. Plik znajdźKontury rozpakowuje dwie wartości, dlatego dodamy jeszcze jedną zmienną o nazwie hierarchia. Kiedy obrazy są zagnieżdżone, kontury emanują współzależnością. Do reprezentowania takich relacji używana jest hierarchia.

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

Kontury oznaczają dokładne miejsce, w którym na obrazie znajdują się dane. Teraz iterujemy po liście konturów, którą obliczyliśmy w poprzednim kroku i obliczamy współrzędne prostokątnych prostokątów, jak zaobserwowano na oryginalnym obrazie, używając metody,  cv2.boundingRect. W ostatniej iteracji umieściliśmy te pola na oryginalnym obrazie table_image za pomocą metody, 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) 

To jest nasz ostatni krok. Tutaj używamy metody nazwaneWindow renderować naszą tabelę z wyodrębnioną zawartością i osadzonymi na niej konturami. Poniżej znajduje się fragment kodu:

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

Wyjścia

Zmień wartość y na 300 w powyższym fragmencie kodu, to będzie wynik:

Po wyodrębnieniu tabel możesz uruchomić każdy kadr konturu za pomocą silnika Tesseract OCR, którego samouczek można znaleźć tutaj. Gdy mamy już pola każdego tekstu, możemy je zgrupować na podstawie ich współrzędnych x i y, aby określić, do którego odpowiedniego wiersza i kolumny należą.

Poza tym istnieje możliwość użycia PDFMiner do przekształcenia dokumentów PDF w pliki HTML, które możemy analizować za pomocą wyrażeń regularnych, aby w końcu uzyskać nasze tabele. Oto jak możesz to zrobić.


Analiza PDFMiner i Regex

Aby wyodrębnić informacje z mniejszych dokumentów, potrzeba czasu na skonfigurowanie modeli głębokiego uczenia lub napisanie algorytmów widzenia komputerowego. Zamiast tego możemy użyć wyrażeń regularnych w Pythonie, aby wyodrębnij tekst z dokumentów PDF. Pamiętaj też, że ta technika nie działa w przypadku obrazów. Możemy to wykorzystać tylko do wyodrębnienia informacji z plików HTML lub dokumentów PDF. Dzieje się tak, ponieważ gdy używasz wyrażenia regularnego, musisz dopasować zawartość do źródła i wyodrębnić informacje. W przypadku obrazów nie będziesz w stanie dopasować tekstu, a wyrażenia regularne zakończą się niepowodzeniem. Przejdźmy teraz do prostego dokumentu PDF i wyodrębnijmy informacje z zawartych w nim tabel. Poniżej znajduje się obraz:

W pierwszym kroku ładujemy plik PDF do naszego programu. Gdy to zrobisz, konwertujemy plik PDF na HTML, abyśmy mogli bezpośrednio używać wyrażeń regularnych, a tym samym wyodrębniać zawartość z tabel. W tym celu używamy modułu pdfminer. Pomaga to w czytaniu treści z PDF i konwertowaniu ich na plik HTML.

Poniżej znajduje się fragment kodu:

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

Kredyty kodu: zevross

Zaimportowaliśmy wiele modułów, w tym biblioteki związane z wyrażeniami regularnymi i plikami PDF. W metodzie konwertuj_pdf_na_html, wysyłamy ścieżkę do pliku PDF, który ma zostać przekonwertowany na plik HTML. Wynik metody będzie ciągiem HTML, jak pokazano poniżej:

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

Wyrażenia regularne to jedna z najtrudniejszych i najfajniejszych technik programowania używanych do dopasowywania wzorców. Są one szeroko stosowane w kilku aplikacjach, powiedzmy, do formatowania kodu, skrobania stron internetowych i walidacji. Zanim zaczniemy wyodrębniać zawartość z naszych tabel HTML, szybko nauczmy się kilku rzeczy o wyrażeniach regularnych.

Ta biblioteka zapewnia różne wbudowane metody dopasowywania i wyszukiwania wzorców. Poniżej kilka z nich:

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)

Znaki / wyrażenia, które zwykle widzisz w wyrażeniach regularnych, obejmują:

  • [AZ] - dowolna wielka litera
  • d - cyfra
  • w - znak słowa (litery, cyfry i podkreślenia)
  • s - białe znaki (spacje, tabulatory i białe znaki)

Teraz, aby znaleźć określony wzorzec w HTML, używamy wyrażeń regularnych, a następnie odpowiednio piszemy wzorce. Najpierw dzielimy dane w taki sposób, aby fragmenty adresów były segregowane na oddzielne bloki zgodnie z nazwą programu (OBÓZ ANIOŁÓW, DOLINA JABŁEK, itp.):

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…

Później znajdujemy nazwę programu, miasto, stan i kod pocztowy, które zawsze mają ten sam wzorzec (tekst, przecinek, dwucyfrowe wielkie litery, 5 cyfr (lub 5 cyfr łącznik cztery cyfry) - są one obecne w pliku PDF, który uważaliśmy za dane wejściowe). Sprawdź następujący fragment kodu:

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

To jest prosty przykład wyjaśniający, w jaki sposób wyodrębniamy informacje z plików PDF za pomocą wyrażenia regularnego. Po wyodrębnieniu wszystkich wymaganych informacji ładujemy te dane do pliku 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

To jest prosty przykład wyjaśniający, w jaki sposób można wypchnąć wyodrębniony kod HTML do pliku CSV. Najpierw tworzymy plik CSV, znajdujemy wszystkie nasze atrybuty i umieszczamy jeden po drugim w odpowiednich kolumnach. Poniżej zrzut ekranu:

Zrzut ekranu przedstawiający elementy wyodrębnione z tabel przy użyciu wyrażeń regularnych

Czasami powyższe techniki wydają się skomplikowane i stanowią wyzwanie dla programistów, jeśli wszystkie tabele są zagnieżdżone i złożone. Tutaj wybór CV lub modelu uczenia głębokiego oszczędza dużo czasu. Zobaczmy, jakie wady i wyzwania utrudniają stosowanie tych tradycyjnych metod.


Wyzwania związane z tradycyjnymi metodami

W tej sekcji dowiemy się dogłębnie, gdzie procesy wyodrębniania tabel mogą się nie udać, a także poznamy sposoby pokonywania tych przeszkód przy użyciu nowoczesnych metod, które powstały w wyniku głębokiego uczenia się. Ten proces nie jest jednak burzliwy. Powodem jest to, że tabele zwykle nie są stałe przez cały czas. Mają różne struktury do reprezentowania danych, a dane w tabelach mogą być wielojęzyczne z różnymi stylami formatowania (styl czcionki, kolor, rozmiar czcionki i wysokość). Dlatego, aby zbudować solidny model, należy być świadomym wszystkich tych wyzwań. Zwykle proces ten obejmuje trzy etapy: wykrywanie, wyodrębnianie i konwersję tabeli. Zidentyfikujmy problemy we wszystkich fazach, jeden po drugim:


Wykrywanie tabeli

W tej fazie identyfikujemy, gdzie dokładnie znajdują się tabele w danym wejściu. Dane wejściowe mogą mieć dowolny format, na przykład obrazy, dokumenty PDF / Word, a czasem filmy. Używamy różnych technik i algorytmów do wykrywania tabel za pomocą linii lub współrzędnych. W niektórych przypadkach możemy napotkać tabele bez żadnych ramek, w których musimy wybrać inne metody. Oprócz tego oto kilka innych wyzwań:

  • Transformacja obrazu: Transformacja obrazu jest podstawowym krokiem w wykrywaniu etykiet. Obejmuje to ulepszenie danych i granic obecnych w tabeli. Musimy dobrać odpowiednie algorytmy przetwarzania wstępnego na podstawie danych przedstawionych w tabeli. Na przykład, gdy pracujemy z obrazami, musimy zastosować detektory progów i krawędzi. Ten krok transformacji pomaga nam dokładniej znaleźć treść. W niektórych przypadkach kontury mogą się nie udać, a algorytmy nie poprawią obrazu. Dlatego kluczowe znaczenie ma wybór odpowiednich kroków transformacji obrazu i wstępnego przetwarzania.
  • Jakość obrazu: Kiedy skanujemy tabele w celu wyodrębnienia informacji, musimy upewnić się, że te dokumenty są skanowane w jaśniejszym otoczeniu, które zapewnia dobrą jakość obrazów. Przy słabych warunkach oświetleniowych algorytmy CV i DL mogą nie wykryć tabel na danych wejściach. Jeśli korzystamy z uczenia głębokiego, musimy upewnić się, że zbiór danych jest spójny i zawiera dobry zestaw standardowych obrazów. Jeśli używamy tych modeli na stołach obecnych w starych pogniecionych papierach, to najpierw musimy wstępnie przetworzyć i wyeliminować szum na tych zdjęciach.
  • Różnorodność układów konstrukcyjnych i szablonów: Nie wszystkie stoły są unikalne. Jedna komórka może obejmować kilka komórek, w pionie lub w poziomie, a kombinacje obejmujących komórki mogą tworzyć ogromną liczbę zmian strukturalnych. Ponadto niektóre podkreślają cechy tekstu, a wiersze tabeli mogą wpływać na sposób rozumienia struktury tabeli. Na przykład poziome linie lub pogrubiony tekst mogą uwydatnić wiele nagłówków tabeli. Struktura tabeli wizualnie określa relacje między komórkami. Wizualne relacje w tabelach utrudniają obliczeniowe znalezienie powiązanych komórek i wyodrębnienie z nich informacji. Dlatego ważne jest, aby budować algorytmy, które są odporne na obsługę różnych struktur tabel.
  • Wypełnienie komórki, marginesy, obramowanie: To są podstawowe elementy każdego stołu - wyściółki, marginesy i obramowania nie zawsze będą takie same. Niektóre tabele mają dużo wypełnienia wewnątrz komórek, a inne nie. Korzystanie z obrazów dobrej jakości i etapów wstępnego przetwarzania pomoże w płynnym przebiegu procesu wyodrębniania tabeli.

Ekstrakcja tabeli

Jest to faza, w której informacje są wyodrębniane po zidentyfikowaniu tabel. Istnieje wiele czynników dotyczących struktury treści i zawartości tabeli. Dlatego ważne jest, aby zrozumieć wszystkie wyzwania, zanim zbudujesz algorytm.

  • Gęsta zawartość: Zawartość komórek może być numeryczna lub tekstowa. Jednak treść tekstowa jest zwykle gęsta, zawierająca niejednoznaczne krótkie fragmenty tekstu z użyciem akronimów i skrótów. Aby zrozumieć tabele, należy ujednoznacznić tekst, a także rozwinąć skróty i akronimy.
  • Różne czcionki i formaty: Czcionki mają zwykle różne style, kolory i wysokości. Musimy się upewnić, że są one ogólne i łatwe do zidentyfikowania. Niewiele rodzin czcionek, zwłaszcza tych, które są pisane kursywą lub odręcznie, jest nieco trudnych do wyodrębnienia. Dlatego użycie dobrej czcionki i odpowiedniego formatowania pomaga algorytmowi dokładniej identyfikować informacje.
  • Wielostronicowe pliki PDF i podziały stron: Wiersz tekstu w tabelach jest wrażliwy na predefiniowany próg. Również w przypadku rozpinania komórek na wielu stronach identyfikacja tabel staje się trudna. Na stronie z wieloma tabelami trudno jest odróżnić od siebie różne tabele. Rzadkie i nieregularne stoły są trudne w obróbce. Dlatego też liniowe linie graficzne i układ zawartości powinny być używane razem jako ważne źródła do określania obszarów tabeli.

Konwersja tabeli

Ostatnia faza obejmuje konwersję wyodrębnionych informacji z tabel w celu skompilowania ich w postaci edytowalnego dokumentu, w programie Excel lub przy użyciu innego oprogramowania. Poznajmy kilka wyzwań.

  • Ustaw układy: Kiedy ze skanowanych dokumentów są wyodrębniane różne formaty tabel, musimy mieć odpowiedni układ tabeli, aby wrzucić zawartość. Czasami algorytm nie wyodrębnia informacji z komórek. Stąd równie ważne jest zaprojektowanie odpowiedniego układu.
  • Różnorodne wzorce prezentacji wartości: Wartości w komórkach można przedstawiać przy użyciu różnych składniowych wzorców reprezentacji. Przyjmijmy, że tekst w tabeli wynosi 6 ± 2. Algorytm może nie przekonwertować tej konkretnej informacji. Stąd wyodrębnienie wartości liczbowych wymaga znajomości możliwych wzorców prezentacji.
  • Reprezentacja do wizualizacji: Większość formatów reprezentacji tabel, takich jak języki znaczników, w których można opisywać tabele, jest przeznaczona do wizualizacji. Dlatego trudno jest automatycznie przetwarzać tabele.

Oto wyzwania, przed którymi stoimy podczas procesu ekstrakcji stołu z wykorzystaniem tradycyjnych technik. Zobaczmy teraz, jak przezwyciężyć te problemy za pomocą Deep Learning. Jest szeroko badany w różnych sektorach.



Potrzebujesz zdigitalizować dokumenty, rachunki lub faktury ale zbyt leniwy, by kodować? Udaj się do Nanonet i buduj modele OCR za darmo!


Podsumowanie

W tym artykule szczegółowo omówiliśmy wyodrębnianie informacji z tabel. Widzieliśmy, jak nowoczesne technologie, takie jak głębokie uczenie i widzenie komputerowe, mogą zautomatyzować przyziemne zadania, tworząc niezawodne algorytmy do generowania dokładnych wyników. W początkowych sekcjach dowiedzieliśmy się o roli wyodrębniania tabel w ułatwianiu zadań osobom, branżom i sektorom biznesowym, a także przejrzeliśmy przypadki użycia dotyczące wyodrębniania tabel z plików PDF/HTML, automatyzacji formularzy, faktura Automatyzacja itp. Zakodowaliśmy algorytm przy użyciu wizji komputerowej, aby znaleźć położenie informacji w tabelach za pomocą technik progowania, dylatacji i wykrywania konturów. Omówiliśmy wyzwania, z jakimi możemy się zmierzyć podczas procesów wykrywania, ekstrakcji i konwersji tabel podczas korzystania z konwencjonalnych technik, i stwierdziliśmy, jak głębokie uczenie może nam pomóc w przezwyciężeniu tych problemów. Na koniec przejrzeliśmy kilka architektur sieci neuronowych i zrozumieliśmy ich sposoby uzyskiwania ekstrakcji tabel na podstawie danych treningowych.



aktualizacja:
‌ Dodano więcej materiałów do czytania na temat różnych podejść do wykrywania tabel i ekstrakcji informacji za pomocą uczenia głębokiego.

Znak czasu:

Więcej z AI i uczenie maszynowe