Derin Öğrenme kullanarak Tablo Algılama ve Bilgi Çıkarma

Kaynak Düğüm: 1325422

Tablo Çıkarımına Giriş

Toplanan veri miktarı, artan sayıda uygulama, yazılım ve çevrimiçi platform ile her geçen gün önemli ölçüde artmaktadır.

Bu devasa verileri verimli bir şekilde işlemek/erişmek için değerli bilgi çıkarma araçları geliştirmek gerekir.

Bilgi Çıkarma alanında dikkat edilmesi gereken alt alanlardan biri, resimlerden tabloların çıkarılması veya formlardan, PDF'lerden ve belgelerden tablo verilerinin algılanmasıdır.

Tablo Çıkarma bir belgedeki tablo bilgilerini algılama ve ayrıştırma görevidir.

Tablo OCR - Bir görüntüden tablo verilerini çıkaran nanonetler!
Tablo OCR – Bir görüntüden tablo verilerini çıkaran nanonetler!

Daha sonraki işlemler için çıkarmanız gereken tablo verileri içeren çok sayıda belgeniz olduğunu hayal edin. Geleneksel olarak, bunları manuel olarak (kağıda) kopyalayabilir veya excel sayfalarına yükleyebilirsiniz.

Ancak, tablo OCR yazılımıyla, tabloları otomatik olarak algılayabilir ve tek seferde tüm tablo verilerini belgelerden çıkarabilirsiniz. Bu, çok fazla zaman ve yeniden çalışma tasarrufu sağlar.

Bu yazıda, ilk olarak Nanonet'lerin resimlerden veya belgelerden tabloları nasıl otomatik olarak çıkarabildiğine bakacağız. Ardından, belgelerdeki tabloları algılamak ve ayıklamak için bazı popüler DL tekniklerini ele alacağız.


Faturalardan, makbuzlardan veya başka herhangi bir belge türünden tablo verilerini çıkarmak ister misiniz? Nanonets'e göz atın PDF tablo çıkarıcı tablo verilerini çıkarmak için. Bir demo planlayın otomatikleştirme hakkında daha fazla bilgi edinmek için masa çıkarma.


İçindekiler

Nanonets Table OCR ile Görüntüden Tablo Çıkarma

  • Kayıt ol ücretsiz bir Nanonets hesabı için

    • Görüntüleri/dosyaları Nanonets Table OCR modeline yükleyin
    • Nanonets, tüm tablo verilerini otomatik olarak algılar ve çıkarır
    • Verileri düzenleyin ve inceleyin (gerekirse)
    • İşlenen verileri Excel, csv veya JSON olarak dışa aktarın

Nanonetlerle Görüntüden Tablo Çıkarma

Ister verileri PDF'den kazıyın belgeler, PDF tablosunu Excel'e dönüştür or tablo çıkarmayı otomatikleştir? Bulmak Nanonetler nasıl PDF kazıyıcı or PDF ayrıştırıcı işinizin daha üretken olmasını sağlayabilir.


Nanonet Tablosu OCR API'si

Nanonet'li Tablo OCR'si
Nanonet'li Tablo OCR'si

The Nanonets OCR API'sı OCR modellerini kolaylıkla oluşturmanıza olanak tanır. OCR modelinizin doğruluğunu artırmak için resimlerinizi ön işleme veya şablonlar eşleştirme veya kural tabanlı motorlar oluşturma konusunda endişelenmenize gerek yoktur.

Verilerinizi yükleyebilir, açıklama ekleyebilir, modeli eğitecek şekilde ayarlayabilir ve tek bir kod satırı yazmadan, GPU'lar hakkında endişelenmeden veya derin öğrenme modellerini kullanarak tablo algılamanız için doğru mimarileri bulmadan tarayıcı tabanlı bir kullanıcı arabirimi aracılığıyla tahminler almak için bekleyebilirsiniz.

Ayrıca, kendi sistemlerinizle entegre etmek ve son teknoloji algoritmalar ve güçlü bir altyapı üzerine kurulu makine öğrenimi destekli uygulamalar oluşturmak için her bir tahminin JSON yanıtlarını alabilirsiniz.

https://nanonets.com/documentation/


İşletmeniz dijital belgelerde, PDF'lerde veya resimlerde veri veya metin tanıma ile ilgileniyor mu? Tablo verilerinin nasıl çıkarılacağını merak ettiniz mi? resimlerden metin çıkar , PDF'den veri al or PDF'den metin ayıkla doğru ve verimli bir şekilde?


Tablo Çıkarmayı Kimler Yararlı Bulacaktır?

Önceki bölümde tartışıldığı gibi, verileri temiz bir biçimde temsil etmek için tablolar sıklıkla kullanılır. Verileri tablolarda yapılandırarak çalışmalarımızı düzenlemekten, şirketlerin devasa varlıklarını depolamaya kadar birçok alanda bunları çok sık görebiliriz. Her gün milyonlarca tabloyla uğraşmak zorunda kalan birçok kuruluş var. Her şeyi manuel olarak yapmak gibi zahmetli işleri kolaylaştırmak için daha hızlı tekniklere başvurmamız gerekiyor. Birkaç kullanım örneğini tartışalım. tabloları ayıklamak önemli olabilir:

Kaynak: patrick tomasso, Sıçramayı kaldır

Kişisel kullanım durumları

The masa çıkarma süreç, küçük kişisel kullanım durumları için de yardımcı olabilir. Bazen belgeleri cep telefonundan yakalar ve daha sonra bilgisayarlarımıza kopyalarız. Bu işlemi kullanmak yerine, belgeleri doğrudan yakalayabilir ve özel şablonlarımızda düzenlenebilir biçimler olarak kaydedebiliriz. Aşağıda, masa çıkarma işlemini kişisel rutinimize nasıl sığdırabileceğimize dair birkaç kullanım örneği verilmiştir –

Belgeleri Telefona Tarama: Sık sık telefonda önemli tabloların görüntülerini yakalar ve kaydederiz, ancak tablo çıkarma tekniği ile tabloların görüntülerini yakalayabilir ve bunları doğrudan excel veya google sayfalarında tablo formatında saklayabiliriz. Bununla birlikte, resim aramamıza veya tablo içeriğini herhangi bir yeni dosyaya kopyalamamıza gerek kalmaz, bunun yerine doğrudan içe aktarılan tabloları kullanabilir ve çıkarılan bilgiler üzerinde çalışmaya başlayabiliriz.

HTML'ye Dokümanlar: Web sayfalarında, tablolar kullanılarak sunulan birçok bilgi buluyoruz. Verilerle karşılaştırmamızda bize yardımcı oluyorlar ve bize rakamlar hakkında organize bir şekilde hızlı bir not veriyorlar. Tablo çıkarma işlemini kullanarak, PDF belgelerini veya JPG / PNG görüntülerini tarayabilir ve bilgileri doğrudan kendi tasarladığınız özel bir tablo formatına yükleyebiliriz. Mevcut tablolara dayalı ek tablolar eklemek için komut dosyaları yazabilir ve böylece bilgileri dijitalleştirebiliriz. Bu, içeriği düzenlememize yardımcı olur ve depolama sürecini hızlandırır.


Endüstriyel kullanım durumları

Dünya genelinde, özellikle Bankacılık ve Sigortacılık sektörlerinde, büyük ölçüde evrak işleri ve dokümantasyon üzerine çalışan birkaç sektör var. Müşterilerin bilgilerini saklamaktan müşterilerin ihtiyaçlarına cevap vermeye kadar tablolar yaygın olarak kullanılmaktadır. Bu bilgiler yine onaylar için farklı şubelere bir belge (basılı kopya) olarak iletilir, burada bazen yanlış iletişim tablolardan bilgi alırken hatalara yol açabilir. Bunun yerine, burada otomasyonu kullanmak hayatımızı çok daha kolay hale getiriyor. İlk veriler yakalandıktan ve onaylandıktan sonra, bu belgeleri doğrudan tablolara tarayabilir ve dijitalleştirilmiş veriler üzerinde daha fazla çalışabiliriz. Zaman tüketiminin ve hataların azaltılması bir yana, müşterilere bilginin işlendiği zaman ve yer hakkında bildirimde bulunabiliyoruz. Bu nedenle bu, verilerin güvenilirliğini sağlar ve işlemlerle başa çıkma yöntemimizi basitleştirir. Şimdi diğer olası kullanım durumlarına bakalım:

Kalite Kontrol: Kalite kontrol, en iyi endüstrilerin sağladığı temel hizmetlerden biridir. Genellikle şirket içinde ve paydaşlar için yapılır. Bunun bir parçası olarak, sağlanan hizmet hakkında geri bildirim almak için tüketicilerden toplanan birçok geri bildirim formu vardır. Endüstriyel sektörlerde, üretim hatlarının nasıl çalıştığını görmek için günlük kontrol listelerini ve notları not almak için tablolar kullanırlar. Tüm bunlar, masa çıkarımı kullanılarak tek bir yerde kolaylıkla belgelenebilir.

Varlık Takibi: İmalat endüstrilerinde insanlar, Çelik, Demir, Plastik vb. Gibi imal edilmiş varlıkları takip etmek için kodlanmış tablolar kullanırlar. Üretilen her ürün, her gün üretilen ve teslim edilen ürünleri takip etmek için tablolar kullandıkları benzersiz bir numara ile etiketlenir. Otomasyon, yanlış yerleştirmeler veya veri tutarsızlığı açısından çok fazla zaman ve varlık tasarrufu sağlamaya yardımcı olabilir.


İş kullanım durumları

Excel sayfalarında ve çevrimdışı formlarda çalışan birkaç iş sektörü vardır. Ancak bir noktada, bu sayfaları ve formları aramak zordur. Bu tablolara manuel olarak giriyorsak, zaman alıcıdır ve yanlış girilen verilerin şansı yüksek olacaktır. Bu nedenle, tablo çıkarma, aşağıdaki gibi iş kullanım durumlarını çözmek için daha iyi bir alternatiftir.

Fatura Otomasyon: Çok sayıda küçük ve büyük ölçekli sanayi vardır. faturalar yine de tablo biçiminde oluşturulur. Bunlar, uygun şekilde güvenli vergi beyanları sağlamaz. Bu tür engellerin üstesinden gelmek için, hepsini dönüştürmek için tablo çıkarmayı kullanabiliriz. faturalar düzenlenebilir bir biçime dönüştürün ve böylece onları daha yeni bir sürüme yükseltin.

Form Otomasyonu: Çevrimiçi formlar, işletmelerin ihtiyaç duydukları bilgileri toplamasına yardımcı olarak ve aynı anda iş akışlarında yerleşik diğer yazılım platformlarına bağlayarak bu denenmiş ve doğru yöntemi bozuyor. Manuel veri girişi ihtiyacını azaltmanın yanı sıra ( otomatik veri girişi) ve takip e-postaları, tablo çıkarma, geleneksel kağıt alternatiflerini yazdırma, postalama, depolama, düzenleme ve yok etme maliyetlerini ortadan kaldırabilir.


Aklınızda bir OCR sorunu mu var? dijitalleştirmek istiyorum faturalar, PDF'ler veya plakalar? Başını aşmak Nanonetler ve OCR modellerini ücretsiz oluşturun!


Derin Öğrenme Eylemde

Derin öğrenme, yapay sinir ağlarına dayalı daha geniş makine öğrenimi yöntemleri ailesinin bir parçasıdır.

Sinir Ağı, insan beyninin çalışma şeklini taklit eden bir süreç aracılığıyla verilen verilerdeki temel ilişkileri tanıyan bir çerçevedir. Verilerin içinden geçtiği, özellikleri öğrendikleri farklı yapay katmanlara sahiptirler. Farklı veri türlerini işlemek için Evrişim NN'leri, Tekrarlayan NN'ler, Otomatik Kodlayıcılar, Üretken Karşıt NN'ler gibi farklı mimariler vardır. Bunlar karmaşıktır ancak sorunları gerçek zamanlı olarak çözmek için yüksek performans gösterir. Şimdi Sinir Ağları kullanılarak tablo çıkarma alanında yapılan araştırmalara bakalım ve kısaca gözden geçirelim.


masa ağı

Kağıt: TableNet: Uçtan uca Tablo algılama için Derin Öğrenme modeli ve Taranan Belge Görüntülerinden Tablo veri çıkarma

Giriş: TableNet, 2019 yılında TCS Araştırma yılında bir ekip tarafından önerilen modern bir derin öğrenme mimarisidir. Ana motivasyon, cep telefonları veya kameralar aracılığıyla taranmış masalardan bilgi almaktı.

Bir görüntüdeki tablo bölgesinin doğru tespitini ve ardından tespit edilen tablonun satırlarından ve sütunlarından bilgilerin tespit edilmesini ve çıkarılmasını içeren bir çözüm önerdiler.

Veri kümesi: Kullanılan veri seti Marmot'du. İlgili temel gerçeklerle birlikte toplanan PDF formatında 2000 sayfaya sahiptir. Buna Çince sayfalar da dahildir. Bağlantı - http://www.icst.pku.edu.cn/cpdp/sjzy/index.htm

Mimari: Mimari, anlamsal bölümleme için bir kodlayıcı-kod çözücü modeli olan Long ve arkadaşlarına dayanmaktadır. Tablo çıkarma için FCN mimarisi olarak aynı kodlayıcı/kod çözücü ağı kullanılır. Görüntüler önceden işlenir ve aşağıdakiler kullanılarak değiştirilir: Tesseract OCR.

Model, girdilerin derin öğrenme tekniklerine tabi tutulmasıyla iki aşamada türetilmiştir. İlk aşamada, önceden eğitilmiş bir VGG-19 Ağının ağırlıklarını kullandılar. Kullanılan VGG ağının tamamen bağlantılı katmanlarını 1 × 1 Evrişimli katmanlarla değiştirdiler. Tüm evrişimli katmanları ReLU aktivasyonu ve 0.8 olasılıklı bir bırakma katmanı izler. İkinci aşamayı iki koldan oluşan kodu çözülmüş ağ olarak adlandırırlar. Bu, sütun bölgesinin tablo bölgesinin bir alt kümesi olduğu sezgisine göredir. Böylece, tek kodlama ağı, hem tablo hem de sütun bölgelerinin özelliklerini kullanarak aktif bölgeleri daha doğru bir şekilde filtreleyebilir. İlk ağdan gelen çıktı iki kola dağıtılır. İlk dalda, iki evrişim işlemi uygulanır ve son özellik haritası, orijinal görüntü boyutlarını karşılamak için büyütülür. Sütunları tespit etmek için diğer dalda, bir ReLU aktivasyon fonksiyonuna sahip ek bir evrişim katmanı ve daha önce bahsedildiği gibi aynı bırakma olasılığına sahip bir bırakma katmanı vardır. Özellik haritaları, (1 × 1) bir evrişim katmanından sonra kesirli kademeli evrişimler kullanılarak yukarı örneklenir. Aşağıda mimarinin bir görüntüsü var:

TableNet mimarisi

Çıkışlar: Model kullanılarak belgeler işlendikten sonra tablo ve sütunların maskeleri oluşturulur. Bu maskeler, tabloyu ve sütun bölgelerini görüntüden filtrelemek için kullanılır. Şimdi Tesseract OCR kullanılarak, bilgiler bölümlere ayrılmış bölgelerden çıkarılır. Aşağıda, oluşturulan ve daha sonra tablolardan çıkarılan maskeleri gösteren bir resim bulunmaktadır:

Ayrıca, orijinal modelden daha iyi performans gösteren ICDAR ile ince ayarlanmış aynı modeli önerdiler. İnce ayarlı modelin Geri Çağırma, Hassasiyet ve F1 Puanı sırasıyla 0.9628, 0.9697, 0.9662'dir. Orijinal model aynı sırayla 0.9621, 0.9547, 0.9583 kayıtlı metriklere sahiptir. Şimdi bir mimariye daha dalalım.


DerinDeSRT

Kağıt: DeepDeSRT: Belge Görüntülerinde Tabloların Algılanması ve Yapı Tanıma için Derin Öğrenme

Giriş: DeepDeSRT, belgelerdeki veya resimlerdeki tabloları algılamak ve anlamak için kullanılan bir Sinir Ağı çerçevesidir. Başlıkta belirtildiği gibi iki çözümü vardır:

  1. Belge görüntülerinde tablo algılama için derin öğrenme tabanlı bir çözüm sunar.
  2. Tablo yapısı tanıma için, yani tespit edilen tablolardaki satırları, sütunları ve hücre konumlarını tanımlayan yeni bir derin öğrenme tabanlı yaklaşım önerir.

Önerilen model tamamen veri tabanlıdır, belge veya görüntülerin buluşsal yöntemlerini veya meta verilerini gerektirmez. Eğitimle ilgili temel avantajlardan biri, büyük eğitim veri kümeleri kullanmamaları, bunun yerine hem tablo algılama hem de tablo yapısı tanıma için transfer öğrenme ve alan uyarlaması kavramını kullanmalarıdır.

Veri kümesi: Kullanılan veri seti, toplam 2013 sayfalık 67 belge içeren bir ICDAR 238 tablo rekabet veri setidir.

Mimari:

  • Tablo Algılama Önerilen model, tabloları tespit etmek için temel çerçeve olarak Hızlı RCNN'yi kullandı. Mimari iki farklı bölüme ayrılmıştır. İlk bölümde, bir bölge teklif ağı (RPN) tarafından giriş görüntüsüne dayalı olarak bölge önerileri ürettiler. İkinci bölümde, bölgeleri Hızlı RCNN kullanarak sınıflandırdılar. Bu mimariyi desteklemek için kullandılar ZFNet ve VGG-16'nın ağırlıkları.
  • Yapı Tanıma Bir tablo başarıyla tespit edildikten ve konumu sistem tarafından bilindikten sonra, içeriğini anlamadaki bir sonraki zorluk tablonun fiziksel yapısını oluşturan satırları ve sütunları tanımak ve bulmaktır. Bu nedenle, satırlardan ve sütunlardan bilgi alan VGG-16 ağırlıklarına sahip tam bağlantılı bir ağ kullandılar. DeepDeSRT'nin çıktıları aşağıdadır:

Çıkışlar:

Tablo Algılamanın Çıktıları
Yapı Tanıma Çıktıları [6]

Değerlendirme sonuçları, DeepDeSRT'nin tablo algılama ve yapı tanıma için son teknoloji yöntemlerden daha iyi performans gösterdiğini ve 1 yılına kadar tablo algılama ve yapı tanıma için sırasıyla% 96.77 ve% 91.44 F2015 ölçümlerine ulaştığını ortaya koymaktadır.


Grafik Sinir Ağları

Kağıt: Grafik Sinir Ağlarını Kullanarak Tablo Tanımayı Yeniden Düşünme

Giriş: Bu araştırmada, Ulusal Yapay Zeka Merkezi (NCAI) Derin Öğrenme Laboratuvarı'ndan yazarlar, tablolardan bilgi çıkarmak için Grafik Sinir Ağları önerdi. Grafik ağlarının bu sorunlar için daha doğal bir seçim olduğunu savundular ve iki gradyan tabanlı grafik sinir ağını daha da araştırdılar.

Önerilen bu model, görsel özellik çıkarımı için hem evrişimli sinir ağlarının hem de problem yapısıyla başa çıkmak için grafik ağlarının faydalarını birleştirir.

Veri kümesi: Yazarlar, dört kategoriye bölünmüş 0.5 Milyon tablodan oluşan yeni bir büyük sentetik veri seti önerdiler.

  1. Görüntüler, birleştirme içermeyen ve düz çizgiler içeren düz görüntülerdir
  2. Görüntülerin ara sıra yönetici çizgilerin olmaması da dahil olmak üzere farklı kenarlık türleri vardır
  3. Hücre ve sütun birleştirmeyi tanıtır
  4. Kamera, doğrusal perspektif dönüşümü ile görüntüleri yakaladı

Mimari: İlgili evrişimli özellikleri üreten sığ bir evrişimli ağ kullandılar. Çıktı özelliklerinin uzamsal boyutları girdi görüntüsü ile aynı değilse, bunlar girdi ve çıktı boyutları arasındaki orana bağlı olarak doğrusal olarak küçültülmüş konumları toplar ve bunları DGCNN olarak bilinen iki grafik ağına sahip bir etkileşim ağına gönderir. ve GravNet. Grafik ağının parametreleri orijinal CNN ile aynıdır. Sonunda, Monte Carlo tabanlı algoritmayı dahili olarak kullanan, çıkarılan içeriği sınıflandırmak için bir çalışma zamanı çifti örneklemesi kullandılar. Çıktılar aşağıdadır:

Çıkışlar:

Graph Neural Networks tarafından üretilen çıktılar

Aşağıda, ağın dört kategorisi için ağlar tarafından oluşturulan tablodaki doğruluk numaraları, Veri kümesi Bölüm:


CGAN'lar ve Genetik Algoritmalar

Kağıt: Koşullu Üretken Çekişmeli Ağları ve Genetik Algoritmaları Kullanarak Belgelerden Tabloları Çıkarma

Giriş: Bu araştırmada yazarlar, aşağıdan yukarıya (satırları hücrelere, satırlara veya sütunlara entegre etmek) kullanmak yerine yukarıdan aşağıya bir yaklaşım kullandılar.

Bu yöntemde, üretici bir rakip ağ kullanarak, tablo görüntüsünü standart bir "iskelet" tablo formuna eşleştirdiler. Bu iskelet tablo, tablo içeriği olmadan yaklaşık satır ve sütun sınırlarını gösterir. Ardından, genetik bir algoritma tarafından optimize edilmiş bir mesafe ölçüsü kullanarak, aday gizli tablo yapılarının görüntülerini iskelet yapısına uydururlar.

Veri kümesi: Yazarlar 4000 tablo içeren kendi veri setlerini kullandılar.

Mimari: Önerilen model iki bölümden oluşmaktadır. İlk bölümde, girdi görüntüleri, koşullu üretken bir düşman sinir ağı kullanılarak iskelet tablolara soyutlanmıştır. Bir GAN'ın yine iki ağı vardır; rastgele örnekler üreten jeneratör ve oluşturulan görüntülerin sahte mi yoksa orijinal mi olduğunu söyleyen ayırıcı. Jeneratör G, bir giriş görüntüsünün, işlemin tersine döndüğü bir darboğaz katmanına kadar bir dizi aşamalı olarak alt örnekleme katmanından geçirildiği bir kodlayıcı-kod çözücü ağıdır. Kod çözme katmanlarına yeterli bilgiyi iletmek için, atlama bağlantıları olan bir U-Net mimarisi kullanılır ve birleştirme yoluyla i ve n - i katmanları arasına bir atlama bağlantısı eklenir, burada n toplam katman sayısıdır ve i katman numarasıdır. kodlayıcıda. Ayrımcı D için bir PatchGAN mimarisi kullanılır. Bu, çıktı görüntüsü yapısını yamalar ölçeğinde cezalandırır. Bunlar çıktıyı iskelet tablosu olarak üretir.

İkinci bölümde, her aday ve iskelet arasındaki mesafenin bir ölçüsünü kullanarak, aday gizli veri yapılarının oluşturulan iskelet görüntüsüne uyumunu optimize ederler. Görüntülerin içindeki metin bu şekilde çıkarılır. Aşağıda mimariyi tasvir eden bir resim var:

Yaklaşımın genel şeması

Çıktı: Tahmin edilen tablo yapıları, - Satır ve sütun numarası, Sol üst köşe konumu, Satır yükseklikleri ve sütun genişlikleri

Genetik algoritma, tablolardan bilgi alırken satır bazında% 95.5 doğruluk ve sütun bazında% 96.7 doğruluk verdi.


Belgeleri dijitalleştirme ihtiyacı, makbuzlar or faturalar ama kodlamak için çok tembel? Başını aşmak Nanonetler ve OCR modellerini ücretsiz oluşturun!


[Kod] Geleneksel Yaklaşımlar

Bu bölümde, Derin Öğrenme ve OpenCV kullanarak tablolardan bilgi çıkarma sürecini öğreneceğiz. Bu açıklamayı bir giriş olarak düşünebilirsiniz, ancak son teknoloji modeller oluşturmak için çok fazla deneyim ve pratik gerekir. Bu, bilgisayarları çeşitli olası yaklaşımlar ve algoritmalarla nasıl eğitebileceğimizin temellerini anlamanıza yardımcı olacaktır.

Sorunu daha kesin bir şekilde anlamak için, makale boyunca kullanılacak bazı temel terimleri tanımlıyoruz:

  • Metin: bir dize ve beş özellik içerir (üst, sol, genişlik, yükseklik, yazı tipi)
  • çizgi: orijinal dosyada aynı satırda olduğu varsayılan metin nesnelerini içerir
  • Tek satır: yalnızca bir metin nesnesine sahip satır nesnesi.
  • Çok Hattı: birden fazla metin nesnesine sahip satır nesnesi.
  • Çok Hattı Engellemek: bir dizi sürekli çok çizgili nesne.
  • Sıra: Tablodaki yatay bloklar
  • Sütun: Tablodaki Dikey Bloklar
  • Hücre: bir satır ve sütunun kesişimi
  • Hücre - Dolgu: hücre içindeki iç dolgu veya boşluk.

OpenCV ile Tablo Algılama

Taranan tablolardan bilgi almak için geleneksel bilgisayarla görme tekniklerini kullanacağız. İşte boru hattımız; Başlangıçta verileri (bilgiyi almamız gereken tablolar) normal kameralar kullanarak yakalarız ve ardından bilgisayar görüşü kullanarak sınırları, kenarları ve hücreleri bulmayı deneyeceğiz. Farklı filtreler ve konturlar kullanacağız ve tabloların temel özelliklerini vurgulayacağız.

Bir tablo görüntüsüne ihtiyacımız olacak. Bunu bir telefonda yakalayabilir veya mevcut herhangi bir resmi kullanabiliriz. Kod parçacığı aşağıdadır,

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

Burada, kullanacağımız için aynı resim görüntüsünü iki değişken yükledik. tablo_image_contour tespit ettiğimiz konturları yüklenen görüntü üzerine çizerken. Programımızda kullandığımız tablonun görüntüsü aşağıdadır:

Tablonun görüntüsü

Adlı bir teknik kullanacağız Ters Görüntü Eşiği Bu, verilen görüntüde bulunan verileri geliştirir.

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

Bir diğer önemli ön işleme adımı da görüntü genişlemesi. Genişletme, ikili görüntülere (Siyah Beyaz) uygulanan basit bir matematik işlemidir ve ön plandaki piksellerin bölgelerinin sınırlarını kademeli olarak büyütür (yani beyaz pikseller, tipik olarak).

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

OpenCV'de yöntemi kullanıyoruz, Konturları bul mevcut görüntüdeki konturları elde etmek için. Bu yöntem üç argüman alır, ilki genişletilmiş görüntüdür (genişletilmiş görüntüyü oluşturmak için kullanılan görüntü table_image_contour - findContours yöntemi yalnızca ikili görüntüleri destekler), ikincisi ise cv2.RETR_TREE bize kontur alma modunu kullanmamızı söyler, üçüncüsü  cv2.CHAIN_APPROX_SIMPLE bu, kontur yaklaşma modudur. Konturları bul iki değeri açar, dolayısıyla adında bir değişken daha ekleyeceğiz hiyerarşi. Görüntüler iç içe geçtiğinde, konturlar karşılıklı bağımlılık yaratır. Bu tür ilişkileri temsil etmek için hiyerarşi kullanılır.

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

Konturlar, verilerin tam olarak görüntüde nerede bulunduğunu gösterir. Şimdi, önceki adımda hesapladığımız konturlar listesini yineliyoruz ve yöntemi kullanarak orijinal görüntüde gözlemlendiği gibi dikdörtgen kutuların koordinatlarını hesaplıyoruz,  cv2.sınırlamaDoğru. Son yinelemede, bu kutuları yöntemi kullanarak orijinal image table_image üzerine yerleştirdik, 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) 

Bu bizim son adımımız. Burada yöntemi kullanıyoruz adlandırılmış Windows tablomuzu çıkarılan içerik ve üzerine gömülü konturlarla işlemek. Kod pasajı aşağıdadır:

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

Çıkışlar

Yukarıdaki kod pasajında ​​y'nin değerini 300 olarak değiştirin, bu sizin çıktınız olacaktır:

Tabloları çıkardıktan sonra, her kontur ekimini tesseract OCR motoru aracılığıyla çalıştırabilirsiniz, öğretici burada bulunabilir. okuyun. Her bir metnin kutularına sahip olduktan sonra, hangi ilgili satır ve sütuna ait olduklarını türetmek için onları x ve y koordinatlarına göre gruplayabiliriz.

Bunun yanı sıra, PDFMiner'ı kullanarak pdf belgelerinizi, sonunda tablolarımızı elde etmek için düzenli ifadeler kullanarak ayrıştırabileceğimiz HTML dosyalarına dönüştürme seçeneği de vardır. İşte bunu nasıl yapabileceğiniz.


PDFMiner ve Regex ayrıştırma

Daha küçük belgelerden bilgi çıkarmak için derin öğrenme modellerini yapılandırmak veya bilgisayarlı görme algoritmaları yazmak zaman alıyor. Bunun yerine Python'da normal ifadeler kullanabiliriz. metni çıkart PDF belgelerinden. Ayrıca, bu tekniğin görüntüler için çalışmadığını unutmayın. Bunu yalnızca HTML dosyalarından veya PDF belgelerinden bilgi çıkarmak için kullanabiliriz. Bunun nedeni, normal bir ifade kullanırken içeriği kaynakla eşleştirmeniz ve bilgileri çıkarmanız gerekmesidir. Resimlerle metni eşleştiremezsiniz ve normal ifadeler başarısız olur. Şimdi basit bir PDF belgesi ile çalışalım ve içindeki tablolardan bilgi çıkaralım. Resim aşağıdadır:

İlk adımda PDF'yi programımıza yüklüyoruz. Bunu yaptıktan sonra, normal ifadeleri doğrudan kullanabilmemiz ve böylece tablolardan içerik çıkarabilmemiz için PDF'yi HTML'ye dönüştürürüz. Bunun için kullandığımız modül pdf madenci. Bu, içeriği PDF'den okumaya ve bir HTML dosyasına dönüştürmeye yardımcı olur.

Kod pasajı aşağıdadır:

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

Kod Kredisi: Zevross

Normal İfade ve PDF ile ilgili kitaplıkları içeren birçok modülü içe aktardık. Yöntemde Convert_pdf_to_html, HTML dosyasına dönüştürülmesi gereken PDF dosyasının yolunu gönderiyoruz. Yöntemin çıktısı, aşağıda gösterildiği gibi bir HTML dizesi olacaktır:

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

Düzenli ifade, kalıp eşleştirme için kullanılan en zor ve havalı programlama tekniklerinden biridir. Bunlar, örneğin kod biçimlendirme, web kazıma ve doğrulama amaçları gibi çeşitli uygulamalarda yaygın olarak kullanılmaktadır. HTML tablolarımızdan içerik çıkarmaya başlamadan önce, normal ifadeler hakkında hızlıca birkaç şey öğrenelim.

Bu kütüphane, kalıpları eşleştirmek ve aramak için çeşitli dahili yöntemler sağlar. Aşağıdakilerden birkaçı:

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)

Normal ifadelerde genellikle gördüğünüz karakterler / ifadeler şunları içerir:

  • [AZ] - herhangi bir büyük harf
  • d - rakam
  • w - kelime karakteri (harfler, rakamlar ve alt çizgiler)
  • s - boşluk (boşluklar, sekmeler ve boşluk)

Şimdi HTML'deki belirli bir kalıbı bulmak için, normal ifadeler kullanıyoruz ve ardından modelleri buna göre yazıyoruz. Öncelikle verileri, adres parçalarının program adına (MELEK KAMPI, ELMA VADİSİ, vb.) Göre ayrı bloklara ayrılacağı şekilde böldük:

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…

Daha sonra, her zaman aynı kalıbı izleyen program adını, şehri, eyaleti ve posta kodunu buluruz (metin, virgül, iki basamaklı büyük harfler, 5 sayı (veya 5 sayı, dört sayı) - bunlar PDF dosyasında bulunur ve girdi olarak değerlendirdik). Aşağıdaki kod parçacığını kontrol edin:

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

Bu, normal bir ifade kullanarak PDF dosyalarından nasıl bilgi aldığımızı açıklayan basit bir örnektir. Gerekli tüm bilgileri çıkardıktan sonra, bu verileri bir CSV dosyasına yüklüyoruz.

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

Bu, ayıklanmış HTML'nizi bir CSV dosyasına nasıl aktarabileceğinizi açıklayan basit bir örnektir. İlk önce bir CSV dosyası oluşturuyoruz, tüm özniteliklerimizi buluyoruz ve tek tek ilgili sütunlarına itiyoruz. Aşağıda bir ekran görüntüsü verilmiştir:

Normal İfadeler kullanılarak tablolardan çıkarılan Öğelerin ekran görüntüsü

Zaman zaman, yukarıda tartışılan teknikler karmaşık görünebilir ve tüm tablolar iç içe geçmiş ve karmaşıksa programcılar için zorluklar ortaya çıkarabilir. Burada bir CV veya Derin öğrenme modeli seçmek çok zaman kazandırır. Bakalım bu geleneksel yöntemlerin kullanımına engel olan dezavantajlar ve zorluklar.


Geleneksel Yöntemlerle Karşılaşılan Zorluklar

Bu bölümde, masa çıkarma işlemlerinin nerede başarısız olabileceğine ilişkin derinlemesine bilgi edinecek ve Derin Öğrenmeden doğan modern yöntemleri kullanarak bu engellerin üstesinden gelmenin yollarını daha fazla anlayacağız. Bu süreç bir çocuk oyuncağı değil. Bunun nedeni, tabloların genellikle sabit kalmamasıdır. Verileri temsil etmek için farklı yapıları vardır ve tabloların içindeki veriler, çeşitli biçimlendirme stilleriyle (yazı tipi stili, rengi, yazı tipi boyutu ve yüksekliği) çok dilli olabilir. Dolayısıyla sağlam bir model oluşturmak için tüm bu zorlukların farkında olunması gerekir. Genellikle bu işlem üç adımı içerir: tablo algılama, çıkarma ve dönüştürme. Tüm aşamalardaki sorunları tek tek belirleyelim:


Tablo Algılama

Bu aşamada, verilen girdide tabloların tam olarak nerede bulunduğunu belirleriz. Giriş, Görüntüler, PDF / Word belgeleri ve bazen videolar gibi herhangi bir formatta olabilir. Çizgilerle veya koordinatlarla tabloları tespit etmek için farklı teknikler ve algoritmalar kullanıyoruz. Bazı durumlarda, farklı yöntemleri seçmemiz gereken, sınırları olmayan tablolarla karşılaşabiliriz. Bunların yanı sıra, işte birkaç zorluk daha:

  • Görüntü Dönüşümü: Görüntü dönüştürme, etiketlerin algılanmasında birincil adımdır. Bu, tabloda bulunan verilerin ve sınırların geliştirilmesini içerir. Tabloda sunulan verilere göre uygun ön işleme algoritmalarını seçmemiz gerekiyor. Örneğin, görüntülerle çalışırken, eşikleme ve kenar dedektörleri uygulamamız gerekir. Bu dönüştürme adımı, içeriği daha kesin bir şekilde bulmamıza yardımcı olur. Bazı durumlarda, konturlar yanlış gidebilir ve algoritmalar görüntüyü geliştirmede başarısız olabilir. Bu nedenle, doğru görüntü dönüştürme adımlarını seçmek ve ön işleme çok önemlidir.
  • Görüntü kalitesi: Bilgi çıkarma için tabloları taradığımızda, bu belgelerin daha parlak ortamlarda tarandığından emin olmamız gerekir, bu da kaliteli görüntüler sağlar. Aydınlatma koşulları zayıf olduğunda, CV ve DL algoritmaları verilen girişlerdeki tabloları algılayamayabilir. Derin öğrenmeyi kullanıyorsak, veri setinin tutarlı olduğundan ve iyi bir standart görüntü setine sahip olduğundan emin olmamız gerekir. Bu modelleri eski buruşuk kağıtlarda bulunan masalarda kullanırsak, önce o resimlerdeki gürültüyü önceden işlememiz ve ortadan kaldırmamız gerekir.
  • Çeşitli Yapısal Düzenler ve Şablonlar: Tüm tablolar benzersiz değildir. Bir hücre, dikey veya yatay olarak birkaç hücreye yayılabilir ve yayılan hücrelerin kombinasyonları çok sayıda yapısal varyasyon yaratabilir. Ayrıca, bazıları metnin özelliklerini vurgular ve tablo satırları tablonun yapısının anlaşılma şeklini etkileyebilir. Örneğin, yatay çizgiler veya kalın metin, tablonun birden çok başlığını vurgulayabilir. Tablonun yapısı, hücreler arasındaki ilişkileri görsel olarak tanımlar. Tablolardaki görsel ilişkiler, ilgili hücreleri hesaplamalı olarak bulmayı ve bunlardan bilgi almayı zorlaştırır. Bu nedenle, farklı tablo yapılarını işlemek için sağlam algoritmalar oluşturmak önemlidir.
  • Hücre Dolgusu, Kenar Boşlukları, Kenarlıklar: Bunlar herhangi bir tablonun olmazsa olmazıdır - dolgular, kenar boşlukları ve kenarlıklar her zaman aynı olmayacaktır. Bazı tablolarda hücrelerin içinde çok fazla dolgu bulunurken bazılarında yoktur. Kaliteli görüntüler ve ön işleme adımları kullanmak, tablo çıkarma işleminin sorunsuz çalışmasına yardımcı olacaktır.

Tablo Çıkarma

Bu, tablolar tanımlandıktan sonra bilgilerin çıkarıldığı aşamadır. Tabloda içeriğin nasıl yapılandırıldığına ve hangi içeriğin bulunduğuna ilişkin birçok faktör vardır. Bu nedenle, bir algoritma oluşturmadan önce tüm zorlukları anlamak önemlidir.

  • Yoğun İçerik: Hücrelerin içeriği sayısal veya metinsel olabilir. Bununla birlikte, metin içeriği genellikle yoğundur, kısaltmaların ve kısaltmaların kullanıldığı belirsiz kısa metin parçaları içerir. Tabloları anlamak için metnin belirsizliğinin giderilmesi ve kısaltmaların ve kısaltmaların genişletilmesi gerekir.
  • Farklı Yazı Tipleri ve Biçimler: Yazı tipleri genellikle farklı stil, renk ve yüksekliktedir. Bunların genel olduğundan ve tanımlanmasının kolay olduğundan emin olmalıyız. Çok az yazı tipi ailesinin, özellikle de el yazısı veya el yazısıyla yazılanların ayıklanması biraz zor. Bu nedenle, iyi yazı tipi ve uygun biçimlendirme kullanmak, algoritmanın bilgileri daha doğru tanımlamasına yardımcı olur.
  • Çok Sayfalı PDF'ler ve Sayfa Sonları: Tablolardaki metin satırı önceden tanımlanmış bir eşiğe duyarlıdır. Ayrıca, hücrelerin birden çok sayfaya yayılmasıyla tabloları tanımlamak zorlaşır. Çok masalı bir sayfada, farklı tabloları birbirinden ayırt etmek zordur. Seyrek ve düzensiz tablolarla çalışmak zordur. Bu nedenle, grafik cetvel çizgileri ve içerik düzeni, tablo bölgelerini tespit etmek için önemli kaynaklar olarak birlikte kullanılmalıdır.

Tablo Dönüşümü

Son aşama, tablolardan çıkarılan bilgilerin, excel'de veya başka bir yazılım kullanılarak düzenlenebilir bir belge olarak derlenmesine dönüştürülmesini içerir. Birkaç zorluk hakkında bilgi edelim.

  • Düzenleri Ayarla: Taranan belgelerden farklı tablo biçimleri çıkarıldığında, içeriği içeri itmek için uygun bir tablo düzenine sahip olmamız gerekir. Bazen, algoritma hücrelerden bilgi alamaz. Bu nedenle, uygun bir yerleşim planı tasarlamak da aynı derecede önemlidir.
  • Çeşitli değer sunum modelleri: Hücrelerdeki değerler, farklı sözdizimsel temsil kalıpları kullanılarak sunulabilir. Tablodaki metni 6 ± 2 olarak düşünün. Algoritma bu belirli bilgiyi dönüştürmekte başarısız olabilir. Bu nedenle, sayısal değerlerin çıkarılması, olası sunum kalıpları hakkında bilgi gerektirir.
  • Görselleştirme için temsil: Tabloların tanımlanabildiği biçimlendirme dilleri gibi tabloların temsil biçimlerinin çoğu görselleştirme için tasarlanmıştır. Bu nedenle, tabloları otomatik olarak işlemek zordur.

Bunlar, geleneksel teknikleri kullanarak masa çıkarma işlemi sırasında karşılaştığımız zorluklardır. Şimdi Derin Öğrenme yardımıyla bunların üstesinden nasıl gelineceğini görelim. Çeşitli sektörlerde yaygın olarak araştırılmaktadır.



Belgeleri, makbuzları veya faturalar ama kodlamak için çok tembel? Başını aşmak Nanonetler ve OCR modellerini ücretsiz oluşturun!


Özet

Bu yazıda, tablolardan bilgi çıkarma hakkında ayrıntılı olarak inceledik. Derin Öğrenme ve Bilgisayarla Görme gibi modern teknolojilerin, doğru sonuçlar veren sağlam algoritmalar oluşturarak sıradan görevleri nasıl otomatikleştirebildiğini gördük. İlk bölümlerde, bireylerin, endüstrilerin ve iş sektörlerinin görevlerini kolaylaştırmada tablo çıkarmanın rolünü öğrendik ve ayrıca PDF'lerden/HTML'den tabloları çıkarma, form otomasyonu, fatura Otomasyon, vb. Eşikleme, genişletme ve kontur algılama tekniklerini kullanarak tablolardaki bilgilerin konumunu bulmak için Computer Vision kullanarak bir algoritma kodladık. Klasik teknikleri kullanırken tablo algılama, çıkarma ve dönüştürme işlemleri sırasında karşılaşabileceğimiz zorlukları tartıştık ve derin öğrenmenin bu sorunların üstesinden gelmemizde bize nasıl yardımcı olabileceğini belirttik. Son olarak, birkaç sinir ağı mimarisini inceledik ve verilen eğitim verilerine dayanarak tablo çıkarma elde etme yollarını anladık.



Güncelleme:
‌ Derin öğrenme kullanılarak tablo algılama ve bilgi çıkarmada farklı yaklaşımlar hakkında daha fazla okuma materyali eklendi.

Zaman Damgası:

Den fazla AI ve Makine Öğrenimi