Jadual Kandungan
Pengesanan
提取
Rumah pembangunan bahagian belakang Tutorial Python Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

Apr 14, 2023 am 09:19 AM
python kod ocr

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

Penghuraian dokumen melibatkan pemeriksaan data dalam dokumen dan mengekstrak maklumat yang berguna. Ia boleh mengurangkan banyak kerja manual melalui automasi. Strategi penghuraian yang popular ialah menukar dokumen kepada imej dan menggunakan penglihatan komputer untuk pengecaman. Analisis Imej Dokumen merujuk kepada teknologi mendapatkan maklumat daripada data piksel imej dokumen Dalam beberapa kes, tidak ada jawapan yang jelas tentang hasil yang diharapkan (teks, imej, carta, nombor, Jadual, formula. ..).

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

OCR (Optical Character Recognition, optical character recognition) ialah proses mengesan dan mengekstrak teks dalam imej melalui penglihatan komputer. Ia dicipta semasa Perang Dunia I, apabila saintis Israel Emanuel Goldberg mencipta mesin yang boleh membaca aksara dan menukarnya menjadi kod telegraf. Kini bidang tersebut telah mencapai tahap yang sangat canggih, mencampurkan pemprosesan imej, penyetempatan teks, pembahagian aksara dan pengecaman aksara. Pada asasnya teknik pengesanan objek untuk teks.

Dalam artikel ini saya akan menunjukkan cara menggunakan OCR untuk penghuraian dokumen. Saya akan menunjukkan kepada anda beberapa kod Python berguna yang boleh digunakan dengan mudah dalam situasi serupa yang lain (hanya salin, tampal, jalankan), dan sediakan muat turun kod sumber penuh.

Di sini kami akan mengambil penyata kewangan dalam format PDF syarikat tersenarai sebagai contoh (pautan di bawah).

https://s2.q4cdn.com/470004039/files/doc_financials/2021/q4/_10-K-2021-(As-Filed).pdf

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

Kesan dan ekstrak teks, grafik dan jadual daripada PDF ini

Tetapan Persekitaran

Bahagian penghuraian dokumen yang menjengkelkan ialah , di sana adalah begitu banyak alat untuk pelbagai jenis data (teks, grafik, jadual) tetapi tiada satu pun daripadanya berfungsi dengan sempurna. Berikut ialah beberapa kaedah dan pakej yang paling popular:

  • Proses dokumen sebagai teks: gunakan PyPDF2 untuk mengekstrak teks, gunakan Camelot atau TabulaPy untuk mengekstrak jadual dan gunakan PyMuPDF untuk mengekstrak grafik.
  • Tukar dokumen kepada imej (OCR): gunakan pdf2image untuk penukaran, PyTesseract dan banyak perpustakaan lain untuk mengekstrak data, atau hanya gunakan LayoutParser.

Mungkin anda akan bertanya: "Mengapa tidak memproses terus fail PDF, tetapi menukar halaman menjadi imej Anda boleh melakukan ini?" Kelemahan utama strategi ini ialah isu pengekodan: dokumen boleh dalam berbilang pengekodan (iaitu UTF-8, ASCII, Unicode), jadi penukaran kepada teks boleh mengakibatkan kehilangan data. Jadi untuk mengelakkan masalah ini, saya akan menggunakan OCR dan menukar halaman kepada imej dengan pdf2image Ambil perhatian bahawa perpustakaan rendering PDF Poppler diperlukan.

# with pip
pip install python-poppler
# with conda
conda install -c conda-forge poppler
Salin selepas log masuk

Anda boleh membaca fail dengan mudah:

# READ AS IMAGE
import pdf2imagedoc = pdf2image.convert_from_path("doc_apple.pdf")
len(doc) #<-- check num pages
doc[0] #<-- visualize a page
Salin selepas log masuk

Sama seperti tangkapan skrin kami, jika anda ingin menyimpan imej halaman secara setempat, anda boleh menggunakan kod berikut:

# Save imgs
import osfolder = "doc"
if folder not in os.listdir():
 os.makedirs(folder)p = 1
for page in doc:
 image_name = "page_"+str(p)+".jpg"
 page.save(os.path.join(folder, image_name), "JPEG")
 p = p+1
Salin selepas log masuk

Akhir sekali, kita perlu menyediakan enjin CV yang akan kita gunakan. LayoutParser nampaknya merupakan pakej tujuan umum pertama untuk OCR berdasarkan pembelajaran mendalam. Ia menggunakan dua model terkenal untuk menyelesaikan tugas:

Pengesanan: Pustaka pengesanan objek paling canggih Facebook (versi kedua Detectron2 akan digunakan di sini).

pip install layoutparser torchvision && pip install "git+https://github.com/facebookresearch/detectron2.git@v0.5#egg=detectron2"
Salin selepas log masuk

Tesseract: Sistem OCR paling terkenal, dicipta oleh HP pada tahun 1985 dan kini dibangunkan oleh Google.

pip install "layoutparser[ocr]"
Salin selepas log masuk

Kini anda sudah bersedia untuk memulakan program OCR untuk pengesanan dan pengekstrakan maklumat.

import layoutparser as lp
import cv2
import numpy as np
import io
import pandas as pd
import matplotlib.pyplot as plt
Salin selepas log masuk

Pengesanan

(Sasaran) Pengesanan ialah proses mencari sekeping maklumat dalam imej dan kemudian mengelilinginya dengan sempadan segi empat tepat. Untuk penghuraian dokumen, maklumatnya ialah tajuk, teks, grafik, jadual...

Mari kita lihat halaman kompleks yang mengandungi beberapa perkara:

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

Halaman ini bermula dengan tajuk, mempunyai blok teks, kemudian angka dan jadual, jadi kami memerlukan model terlatih untuk mengenali objek ini. Nasib baik Detectron dapat melakukan ini, kita hanya perlu memilih model dari sini dan menentukan laluannya dalam kod.

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

Model yang saya akan gunakan hanya boleh mengesan 4 objek (teks, tajuk, senarai, jadual, graf). Oleh itu, jika anda perlu mengenal pasti perkara lain (seperti persamaan), anda perlu menggunakan model lain.

## load pre-trained model
model = lp.Detectron2LayoutModel(
 "lp://PubLayNet/mask_rcnn_X_101_32x8d_FPN_3x/config",
 extra_config=["MODEL.ROI_HEADS.SCORE_THRESH_TEST", 0.8],
 label_map={0:"Text", 1:"Title", 2:"List", 3:"Table", 4:"Figure"})
## turn img into array
i = 21
img = np.asarray(doc[i])
## predict
detected = model.detect(img)
## plot
lp.draw_box(img, detected, box_width=5, box_alpha=0.2,
 show_element_type=True)
Salin selepas log masuk

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

结果包含每个检测到的布局的细节,例如边界框的坐标。根据页面上显示的顺序对输出进行排序是很有用的:

## sort
new_detected = detected.sort(key=lambda x: x.coordinates[1])
## assign ids
detected = lp.Layout([block.set(id=idx) for idx,block in
 enumerate(new_detected)])## check
for block in detected:
 print("---", str(block.id)+":", block.type, "---")
 print(block, end='nn')
Salin selepas log masuk

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

完成OCR的下一步是正确提取检测到内容中的有用信息。

提取

我们已经对图像完成了分割,然后就需要使用另外一个模型处理分段的图像,并将提取的输出保存到字典中。

由于有不同类型的输出(文本,标题,图形,表格),所以这里准备了一个函数用来显示结果。

'''
{'0-Title': '...',
'1-Text': '...',
'2-Figure': array([[ [0,0,0], ...]]),
'3-Table': pd.DataFrame,
}
'''
def parse_doc(dic):
 for k,v in dic.items():
 if "Title" in k:
 print('x1b[1;31m'+ v +'x1b[0m')
 elif "Figure" in k:
 plt.figure(figsize=(10,5))
 plt.imshow(v)
 plt.show()
 else:
 print(v)
 print(" ")
Salin selepas log masuk

首先看看文字:

# load model
model = lp.TesseractAgent(languages='eng')
dic_predicted = {}
for block in [block for block in detected if block.type in ["Title","Text"]]:
 ## segmentation
 segmented = block.pad(left=15, right=15, top=5,
 bottom=5).crop_image(img)
 ## extraction
 extracted = model.detect(segmented)
 ## save
 dic_predicted[str(block.id)+"-"+block.type] =
 extracted.replace('n',' ').strip()
# check
parse_doc(dic_predicted)
Salin selepas log masuk

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

再看看图形报表

for block in [block for block in detected if block.type == "Figure"]:
 ## segmentation
 segmented = block.pad(left=15, right=15, top=5,
 bottom=5).crop_image(img)
 ## save
 dic_predicted[str(block.id)+"-"+block.type] = segmented
# check
parse_doc(dic_predicted)
Salin selepas log masuk

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

上面两个看着很不错,那是因为这两种类型相对简单,但是表格就要复杂得多。尤其是我们上看看到的的这个,因为它的行和列都是进行了合并后产生的。

for block in [block for block in detected if block.type == "Table"]:
 ## segmentation
 segmented = block.pad(left=15, right=15, top=5,
 bottom=5).crop_image(img)
 ## extraction
 extracted = model.detect(segmented)
 ## save
 dic_predicted[str(block.id)+"-"+block.type] = pd.read_csv(
 io.StringIO(extracted) )
# check
parse_doc(dic_predicted)
Salin selepas log masuk

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

正如我们的预料提取的表格不是很好。好在Python有专门处理表格的包,我们可以直接处理而不将其转换为图像。这里使用TabulaPy 包:

import tabula
tables = tabula.read_pdf("doc_apple.pdf", pages=i+1)
tables[0]
Salin selepas log masuk

Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan)

结果要好一些,但是名称仍然错了,但是效果要比直接OCR好的多。

总结

本文是一个简单教程,演示了如何使用OCR进行文档解析。使用Layoutpars软件包进行了整个检测和提取过程。并展示了如何处理PDF文档中的文本,数字和表格。

Atas ialah kandungan terperinci Demonstrasi kod lengkap penghuraian dokumen menggunakan Python dan OCR (kod dilampirkan). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Adakah Mysql perlu membayar Adakah Mysql perlu membayar Apr 08, 2025 pm 05:36 PM

MySQL mempunyai versi komuniti percuma dan versi perusahaan berbayar. Versi komuniti boleh digunakan dan diubahsuai secara percuma, tetapi sokongannya terhad dan sesuai untuk aplikasi dengan keperluan kestabilan yang rendah dan keupayaan teknikal yang kuat. Edisi Enterprise menyediakan sokongan komersil yang komprehensif untuk aplikasi yang memerlukan pangkalan data yang stabil, boleh dipercayai, berprestasi tinggi dan bersedia membayar sokongan. Faktor yang dipertimbangkan apabila memilih versi termasuk kritikal aplikasi, belanjawan, dan kemahiran teknikal. Tidak ada pilihan yang sempurna, hanya pilihan yang paling sesuai, dan anda perlu memilih dengan teliti mengikut keadaan tertentu.

Cara Menggunakan MySQL Selepas Pemasangan Cara Menggunakan MySQL Selepas Pemasangan Apr 08, 2025 am 11:48 AM

Artikel ini memperkenalkan operasi pangkalan data MySQL. Pertama, anda perlu memasang klien MySQL, seperti MySqlworkbench atau Command Line Client. 1. Gunakan perintah MySQL-Uroot-P untuk menyambung ke pelayan dan log masuk dengan kata laluan akaun root; 2. Gunakan CreateTatabase untuk membuat pangkalan data, dan gunakan Pilih pangkalan data; 3. Gunakan createtable untuk membuat jadual, menentukan medan dan jenis data; 4. Gunakan InsertInto untuk memasukkan data, data pertanyaan, kemas kini data dengan kemas kini, dan padam data dengan padam. Hanya dengan menguasai langkah -langkah ini, belajar menangani masalah biasa dan mengoptimumkan prestasi pangkalan data anda boleh menggunakan MySQL dengan cekap.

Fail muat turun MySQL rosak dan tidak boleh dipasang. Penyelesaian pembaikan Fail muat turun MySQL rosak dan tidak boleh dipasang. Penyelesaian pembaikan Apr 08, 2025 am 11:21 AM

Fail muat turun mysql adalah korup, apa yang perlu saya lakukan? Malangnya, jika anda memuat turun MySQL, anda boleh menghadapi rasuah fail. Ia benar -benar tidak mudah hari ini! Artikel ini akan bercakap tentang cara menyelesaikan masalah ini supaya semua orang dapat mengelakkan lencongan. Selepas membacanya, anda bukan sahaja boleh membaiki pakej pemasangan MySQL yang rosak, tetapi juga mempunyai pemahaman yang lebih mendalam tentang proses muat turun dan pemasangan untuk mengelakkan terjebak pada masa akan datang. Mari kita bercakap tentang mengapa memuat turun fail rosak. Terdapat banyak sebab untuk ini. Masalah rangkaian adalah pelakunya. Gangguan dalam proses muat turun dan ketidakstabilan dalam rangkaian boleh menyebabkan rasuah fail. Terdapat juga masalah dengan sumber muat turun itu sendiri. Fail pelayan itu sendiri rosak, dan sudah tentu ia juga dipecahkan jika anda memuat turunnya. Di samping itu, pengimbasan "ghairah" yang berlebihan beberapa perisian antivirus juga boleh menyebabkan rasuah fail. Masalah Diagnostik: Tentukan sama ada fail itu benar -benar korup

Mysql tidak dapat dipasang setelah memuat turun Mysql tidak dapat dipasang setelah memuat turun Apr 08, 2025 am 11:24 AM

Sebab utama kegagalan pemasangan MySQL adalah: 1. Isu kebenaran, anda perlu menjalankan sebagai pentadbir atau menggunakan perintah sudo; 2. Ketergantungan hilang, dan anda perlu memasang pakej pembangunan yang relevan; 3. Konflik pelabuhan, anda perlu menutup program yang menduduki port 3306 atau mengubah suai fail konfigurasi; 4. Pakej pemasangan adalah korup, anda perlu memuat turun dan mengesahkan integriti; 5. Pembolehubah persekitaran dikonfigurasikan dengan salah, dan pembolehubah persekitaran mesti dikonfigurasi dengan betul mengikut sistem operasi. Selesaikan masalah ini dan periksa dengan teliti setiap langkah untuk berjaya memasang MySQL.

Bagaimana untuk mengoptimumkan prestasi MySQL untuk aplikasi beban tinggi? Bagaimana untuk mengoptimumkan prestasi MySQL untuk aplikasi beban tinggi? Apr 08, 2025 pm 06:03 PM

Panduan Pengoptimuman Prestasi Pangkalan Data MySQL Dalam aplikasi yang berintensifkan sumber, pangkalan data MySQL memainkan peranan penting dan bertanggungjawab untuk menguruskan urus niaga besar-besaran. Walau bagaimanapun, apabila skala aplikasi berkembang, kemunculan prestasi pangkalan data sering menjadi kekangan. Artikel ini akan meneroka satu siri strategi pengoptimuman prestasi MySQL yang berkesan untuk memastikan aplikasi anda tetap cekap dan responsif di bawah beban tinggi. Kami akan menggabungkan kes-kes sebenar untuk menerangkan teknologi utama yang mendalam seperti pengindeksan, pengoptimuman pertanyaan, reka bentuk pangkalan data dan caching. 1. Reka bentuk seni bina pangkalan data dan seni bina pangkalan data yang dioptimumkan adalah asas pengoptimuman prestasi MySQL. Berikut adalah beberapa prinsip teras: Memilih jenis data yang betul dan memilih jenis data terkecil yang memenuhi keperluan bukan sahaja dapat menjimatkan ruang penyimpanan, tetapi juga meningkatkan kelajuan pemprosesan data.

Cara mengoptimumkan prestasi pangkalan data selepas pemasangan MySQL Cara mengoptimumkan prestasi pangkalan data selepas pemasangan MySQL Apr 08, 2025 am 11:36 AM

Pengoptimuman prestasi MySQL perlu bermula dari tiga aspek: konfigurasi pemasangan, pengindeksan dan pengoptimuman pertanyaan, pemantauan dan penalaan. 1. Selepas pemasangan, anda perlu menyesuaikan fail my.cnf mengikut konfigurasi pelayan, seperti parameter innodb_buffer_pool_size, dan tutup query_cache_size; 2. Buat indeks yang sesuai untuk mengelakkan indeks yang berlebihan, dan mengoptimumkan pernyataan pertanyaan, seperti menggunakan perintah menjelaskan untuk menganalisis pelan pelaksanaan; 3. Gunakan alat pemantauan MySQL sendiri (ShowProcessList, ShowStatus) untuk memantau kesihatan pangkalan data, dan kerap membuat semula dan mengatur pangkalan data. Hanya dengan terus mengoptimumkan langkah -langkah ini, prestasi pangkalan data MySQL diperbaiki.

Adakah mysql memerlukan internet Adakah mysql memerlukan internet Apr 08, 2025 pm 02:18 PM

MySQL boleh berjalan tanpa sambungan rangkaian untuk penyimpanan dan pengurusan data asas. Walau bagaimanapun, sambungan rangkaian diperlukan untuk interaksi dengan sistem lain, akses jauh, atau menggunakan ciri -ciri canggih seperti replikasi dan clustering. Di samping itu, langkah -langkah keselamatan (seperti firewall), pengoptimuman prestasi (pilih sambungan rangkaian yang betul), dan sandaran data adalah penting untuk menyambung ke Internet.

Penyelesaian kepada perkhidmatan yang tidak dapat dimulakan selepas pemasangan MySQL Penyelesaian kepada perkhidmatan yang tidak dapat dimulakan selepas pemasangan MySQL Apr 08, 2025 am 11:18 AM

MySQL enggan memulakan? Jangan panik, mari kita periksa! Ramai kawan mendapati bahawa perkhidmatan itu tidak dapat dimulakan selepas memasang MySQL, dan mereka sangat cemas! Jangan risau, artikel ini akan membawa anda untuk menangani dengan tenang dan mengetahui dalang di belakangnya! Selepas membacanya, anda bukan sahaja dapat menyelesaikan masalah ini, tetapi juga meningkatkan pemahaman anda tentang perkhidmatan MySQL dan idea anda untuk masalah penyelesaian masalah, dan menjadi pentadbir pangkalan data yang lebih kuat! Perkhidmatan MySQL gagal bermula, dan terdapat banyak sebab, mulai dari kesilapan konfigurasi mudah kepada masalah sistem yang kompleks. Mari kita mulakan dengan aspek yang paling biasa. Pengetahuan asas: Penerangan ringkas mengenai proses permulaan perkhidmatan MySQL Startup. Ringkasnya, sistem operasi memuatkan fail yang berkaitan dengan MySQL dan kemudian memulakan daemon MySQL. Ini melibatkan konfigurasi

See all articles