使用神經網絡提取PDF表格工具來了,支持圖片,關鍵是能白嫖谷歌GPU...

2020-12-09 澎湃新聞

賈浩楠 發自 凹非寺

量子位 報導 | 公眾號 QbitAI

「表哥表姐」們還在為大量PDF文件中的表格發愁嗎?

百度一下,網上有大量提取PDF表格的工具,但是,它們都只支持文本格式PDF。

但掃描生成的圖片表格怎麼辦?

別著急,一種使用深度神經網絡識別提取表格的開源工具可以幫助你。

兼容圖片、高準確率、還不佔用本地運算資源,如此實用的工具值得你擁有。

測試實例

如果在輸入的PDF文件中檢測的表格,模型會在邊界框(bounding box)標出表格邊框:

然後,表格數據會被轉化為Panda數據框架,方便後續處理:

怎麼樣,是不是很實用?那這個工具如何使用呢?

使用姿勢詳解

神經網絡算法,還不佔用本地運算資源?

對,你沒聽錯,這個工具的所有代碼都可以在谷歌Colab上運行。也就是說你可以利用Colab雲端資源完成訓練和推理,無需本地安裝。

這個工具使用到的深度神經網絡是Keras-RetinaNet,首先要在Colab上安裝Keras-RetinaNet,通過一下一行代碼就可以完成:

git clone https://github.com/fizyr/keras-retinanet

同時需要安裝必要的庫:

pip install .python setup.py build_ext — inplace

訓練Keras-RetinaNet識別表格

首先要構建或一個訓練使用的資料庫。

這裡要用到Colab工具PDF2Img,將PDF文件轉為JPG格式供算法學習。

然後將轉好的圖片保存在Images文件夾中。接下來需要手動給這些訓練數據打標籤,這裡推薦使用在線標記工具makesense.ai。

將XML注釋文件保存在注釋文件夾中,並創建用於培訓和測試的PDF文件列表,將該列表導入train.txt和test.txt中。

接下來,克隆Github項目https://github.com/ferrygun/PDFTableExtract,並安裝beautifulsoup。

運行以下命令以將PASCALVOC格式轉換為Keras-RetinaNet所需的格式:

python build_logos.py

運行上述命令後,會得到retinanet_classes.csv,retinanet_test.csv和retinanet_train.csv。

在retinanet_classses.csv中,由於只識別PDF文檔中的表,所以只有到一個class,即class 0。

如果你在打標籤的過程中加入頁眉頁腳等標籤,相應能得到多個class。

完整的文件和文件夾結構的列表:

然後,將retinanet_classes.csv,retinanet_test.csv,retinanet_train.csv,train.txt和test.txt 導入keras-retinanet的根文件夾中:

接下來,運行Colab TrainOCR,可以根據要訓練的JPG文件數量來調整訓練的epoch數量。

訓練完成後,就會得到權重文件output.h5,下載此文件並將其保存到本地主機。後面將使用該文件來運行測試。

這裡需要注意的一點是,在Colab中,已將文件上傳到Git並進行了Git克隆。

運行測試

運行測試前,還需要安裝處理PDF文件必要的庫。

PyPDF2是一個python工具庫,能夠提取文檔信息,裁剪頁面等。

使用以下命令安裝此庫:

pip install PyPDF2

Camelot是專門用於解析PDF頁面表格的python庫。

使用以下命令安裝此庫:

pip install camelot-py[cv]

PDF2IMG是將Python轉換為PIL Image對象的python庫。

使用以下命令安裝此庫:

pip install pdf2imag

在運行預測之前,需要使用從訓練中獲得的權重文件output.h5加載模型,並從retinanet_classes.csv定義標籤class 0。

model_path = 『output.h5’model = models.load_model(model_path, backbone_name=’resnet50』)labels = 『retinanet_classes.csv』LABELS = open(labels).read().strip().split(『 』)LABELS = {int(L.split(『,』)[1]): L.split(『,』)[0] for L in LABELS}print(LABELS){0: 『tabel』}

接下來運行測試

import numpy as npimport cv2import matplotlib.pyplot as plt

image_path = imgfname#image = cv2.imread(image_path)image = read_image_bgr(image_path)image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

output = image.copy()output = cv2.cvtColor(output, cv2.COLOR_BGR2RGB)print(output.shape) # row (height) x column (width) x color (3)

image = preprocess_image(image)(image, scale) = resize_image(image)image = np.expand_dims(image, axis=0)

# detect objects in the input image and correct for the image scale(boxes, scores, labels) = model.predict_on_batch(image)boxes /= scale

confidence = 0.2from google.colab.patches import cv2_imshowimport matplotlib.pyplot as pltlabel_out = []result = ""

# loop over the detectionsfor (box, score, label) in zip(boxes[0], scores[0], labels[0]): # filter out weak detections if score < confidence: continue

# convert the bounding box coordinates from floats to integers box = box.astype("int")

# build the label and draw the label + bounding box on the output # image labeli = label label = "{}: {:.2f}".format(LABELS[label], score) print(label)

if LABELS[labeli] not in label_out: label_out.append(LABELS[labeli]) cv2.rectangle(output, (box[0], box[1]), (box[2], box[3]), (255, 0, 0), 12) print(box[0]) print(box[1]) print(box[2]) print(box[3]) #result cv2.putText(output, label, (box[0], box[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 4.5, (255, 1, 1), 12)

plt.figure(figsize=(20, 20))plt.imshow(output)plt.show()

如果檢測的表格,模型會在邊界框(bounding box)標出表格邊框:

邊界框坐標(x1,y1,x2,y2),將table_area輸入到Camelot read_pdf函數中,table_area是已標準化的邊界框。

interesting_areas=[]

output = [[x1, y1, x2, y2]]for x in output: [x1, y1, x2, y2] = bboxes_pdf(img, pdf_page, x) bbox_camelot = [ ",".join([str(x1), str(y1), str(x2), str(y2)]) ][0] # x1,y1,x2,y2 where (x1, y1) -> left-top and (x2, y2) -> right-bottom in PDF coordinate space #print(bbox_camelot) interesting_areas.append(bbox_camelot)

print(interesting_areas)output_camelot = camelot.read_pdf( filepath=pdf_file, pages=str(pg), flavor="stream", table_areas=interesting_areas)

output_camelot[0].df

這樣就可以將表格數據轉化為Panda數據框架,方便後續處理:

圖片怎麼辦

針對掃描圖片格式的PDF表格,可以使用Ocrmypdf包來將圖片格式PDF轉為文本格式。

Ocrmypdf是一個python軟體包,可將基於圖像的pdf轉換為基於文本的PDF。

安裝ocrmypdf,可以通過以下命令行將其用於macOS和Linux:

brew install ocrmypdf

通過以下命令調用:

ocrmypdf input_file.pdf output_file.pdf

之後就可以按照上面的方法進行表格提取了。

怎麼樣,這款兼容圖片,又能白嫖谷歌GPU的PDF表格工具對你有幫助嗎?

傳送門

項目地址:

https://github.com/ferrygun/PDFTableExtract

在線打標籤工具:

https://www.makesense.ai/

— 完 —

本文系網易新聞•網易號特色內容激勵計劃籤約帳號【量子位】原創內容,未經帳號授權,禁止隨意轉載。

原標題:《使用神經網絡提取PDF表格工具來了,支持圖片,關鍵是能白嫖谷歌GPU資源》

閱讀原文

相關焦點

  • 神經網絡提取PDF表格工具來了,支持圖片,還能白嫖谷歌GPU資源
    賈浩楠 發自 凹非寺量子位 報導 | 公眾號 QbitAI「表哥表姐」們還在為大量PDF文件中的表格發愁嗎?百度一下,網上有大量提取PDF表格的工具,但是,它們都只支持文本格式PDF。但掃描生成的圖片表格怎麼辦?
  • 在線文字圖片識別工具
    騰訊優圖,提供圖片整體文字的檢測和識別服務,返回文字框位置與文字內容。支持多場景、任意版面下整圖文字的識別,以及中英文、字母、數字、常見字符的識別。百度文字識別,支持多場景下的文字檢測識別。OCRMaker,提供在線文字識別,文字提取等服務。文字在線識別工具,提供圖像文字識別、提取圖片文字、pdf文字識別、掃描文件識別服務、pdf轉Word文檔等服務,輸出結果支持PDF、Word和Txt格式等。圖片轉文字,提供在線圖片轉換成文字,在線圖片識別文字等服務。
  • 谷歌搜索建議網頁圖表信息使用圖片少用HTML
    近日,谷歌搜索負責人在線下站長交流群中跟站長分享搜索優化方向,建議網站圖表信息多使用圖片顯示,儘量少用HTML5顯示,方便谷歌搜尋引擎抓取圖表相關信息。了解到,在這次群聊解答中,一個站長問谷歌搜索負責人約翰·穆勒,在網頁上顯示帶有數據的圖表的最佳優化方法是什麼,在Google搜索看來,用圖表形式發布圖表還是用HTML5重新創建圖表對網頁排名好一點。
  • 用BERT解決表格問答任務,谷歌提出弱監督表格解析器TaPas
    論文地址:https://arxiv.org/pdf/2004.02349.pdf代碼和模型:https://github.com/google-research/tapas世上許多信息都是以表格形式存儲的,這些表格見諸於網絡、資料庫或文件中。它們包括消費產品的技術規格、金融和國家發展統計數據、體育賽事結果等等。
  • 【PDF轉換和創建工具】PDF轉換工具 Solid Converter PDF 9.2 中文...
    軟體介紹 Solid Converter PDF中文註冊版是一款功能強大、界面友好、操作簡單的PDF轉換和創建工具,可將PDF轉換為多種格式的文檔,轉換快速,還有掃描、圖片擷取、提取數據、ORC識別功能。Solid Converter PDF是PDF格式轉換和創建軟體。
  • 表格爆改大師的福音?谷歌發布新效率工具Tables
    主流的APaaS服務還有一個明顯特質,就是所謂的無代碼/低代碼,也就是幫助那些沒有代碼知識的用戶,也能將產品的潛力發揮到極致,無需擔心產品技術門檻高而不爽。可能大部分讀者的工作中已經在使用各式各樣的效率產品了,但是把表格當成效率工具來用,可能更多人只是偶然或者出於習慣在用。
  • PDF文檔翻譯神器,英文文獻一鍵翻譯成中文!
    我們平時下載的外文文獻,大多數是pdf的,所以在找翻譯軟體的時候,還要考慮到格式是否支持的問題。那麼,怎麼把英文pdf翻譯成中文?英文文獻翻譯軟體哪個更好用呢?下面我們就來分享一下英文pdf翻譯成中文的方法。
  • 輕鬆識別圖片中文字內容,這些工具讓你輕鬆應對
    OCR軟體可以幫助我們快速識別出圖片裡面的文件,可以減少我們文字錄入的時間,可以很好提高我們在工作和學習中的效率,目前市面上有很多的文字識別工具,這些工具有好有壞,我為大家篩選了一些比較好用的OCR文字識別軟體。
  • PDF轉圖片怎麼做?我只用嗨格式PDF在線工具!
    PDF轉圖片怎麼做?我只用嗨格式PDF在線工具!我們在使用PDF時,經常需要把PDF轉換成圖片,如果只是一兩個PDF需要轉換為圖片,那麼有很多軟體網站都可以實現。如果有大量PDF文件需要轉換為圖片,那麼嗨格式PDF在線工具會是一款十分方便的PDF轉圖片軟體!
  • 圖片轉換成pdf格式怎麼操作?什麼軟體可以將圖片轉換成pdf?
    拍攝好後,需要傳送給寫文章的同事,當我在微信上一張張照片發送給她的時候,她說先把圖片轉為pdf格式,再壓縮打包一次性發給她....導入會議照片到電腦pc軟體那如何把圖片轉為pdf格式呢?我先把家居行業大會上的所有照片都從手機上傳送到電腦,接著導入轉換器的【PDF轉換】——【圖片轉PDF】功能欄裡,然後便能看到轉換器裡顯示它們的文件名稱,以及下方會出現一個「將所有圖片合併到一個PDF文件」的選項。
  • pdf怎麼轉換成jpg圖片?PDF轉換器一鍵教你搞定
    pdf怎麼轉換成jpg圖片?不知道大家有沒有遇到過頁數較多的PDF文件,這樣的pdf文件閱讀完是比較耗費時間的,並且難度係數較高。為了降低閱讀的難度,我們可以將pdf文件轉換成jpg格式的圖片,這樣閱讀文件的難度就可以大大地降低了呀!以下給大家看看具體的轉換方法。
  • |datav|iconfont|ocr文字識別|pdf|格式
    Oalib完全免費的論文搜索網站它提供超過420萬篇論文,並且所有文章支持免下載,所有文章支持以PDF格式下載;它支持強大的搜索功能,你可以利用網站的高級搜索功能進一步搜索你需要的文章。白描網頁版https://web.baimiaoapp.com/非常優秀的掃描工具app可以提取照片文字,掃描成pdf或者表格。它提供了很簡單好用的三個功能:圖片文字提取、電子表格識別、掃描PDF轉文字。都是實用功能,關鍵是免費使用。
  • Google的神經網絡表格處理模型TabNet介紹
    Google Research的TabNet於2019年發布,在預印稿中被宣稱優於表格數據的現有方法。它是如何工作的,又如何可以嘗試呢?
  • Steam、epic、谷歌,三大遊戲商店「免費白嫖」日!
    前天的「Steam白嫖日」剛剛推送完之後,昨天突然又爆出N款遊戲免費(而且還包含了個3A大作和幾個飽受好評的獨立遊戲)這可讓紳士君完全按捺不住了,當即就給你們的林叔摳了個電話過去,提議把今天的檔期切換,原定內容往後推一天。今天換成「白嫖計劃」,讓大家能白嫖更多的遊戲!
  • 怎麼才能把pdf文件轉換成可修改、編輯的excel表格?
    雖然pdf格式的文件難以編輯,但因為它的發送、打開速度快,所以辦公室同事還是少不了使用它。有時候,一些pdf文件裡面的表格內容出錯時,直接編輯它可能有點難度,把它轉為可修改、編輯的excel表格後,操作起來還簡單一些。
  • PDF轉Excel後,轉出的表格全是亂碼是怎麼回事?
    日常工作中經常會用到將各種辦公文檔不同格式進行互轉,比如將PDF轉成Excel,這種轉換非常簡單,工具也很多,但是有時PDF文檔是正常的,轉出來的表格卻全是亂碼是怎麼回事呢?出現這種亂碼一般是由於原PDF文檔使用了一些特殊字體或限制,轉換軟體無法識別導致。那麼此時只能更換其他更智能的轉換工具才能轉換出完整的表格文檔;比如使用speedpdf在線轉換,不僅手機和電腦都能使用,而且還是免費轉換。
  • 翻譯狗:超實用的PDF翻譯工具,文檔翻譯神器!
    這個超實用的PDF翻譯工具——翻譯狗,就能幫你解決所以問題。它是一款基於神經網絡智能翻譯系統研發的翻譯工具,能夠一鍵完成整個文檔的翻譯,有效解決了PDF文檔翻譯問題,並且在準確度和翻譯速度上,能夠很好地滿足用戶需求。具體怎麼操作?翻譯效果如何?
  • 圖片如何轉換為PDF?這四種方法教你輕鬆轉換PDF!
    在我們日常學習和日常工作中,如果想要將圖片轉換為PDF文件該怎麼辦呢?如果需要大批量的將圖片轉換為PDF文件又該怎麼辦呢?今天小編就和大家分享四種將圖片轉換為PDF文件的方法。第一款:i2pdfi2pdf這款軟體可以將圖片文件打包轉換為PDF文件。
  • 圖片轉pdf怎麼轉?圖片批量轉換成pdf的方法
    還不知道圖片怎麼轉換pdf文件嘛?分享一個超級簡單的方法,不僅可以將圖片轉換成pdf格式,還可以批量轉換哦。今日主題:圖片轉pdf使用軟體:迅捷PDF轉換器軟體功能:pdf轉換:可完成pdf格式換成word、ppt、excel
  • 如何將圖片上表格轉成Excel表格,分享幾款不錯的工具!
    如果有工具能夠直接將紙張上表格轉換到Excel中,那豈不是更加省事?這裡,易老師就給大家分享幾款不錯的工具,幫助大家將圖片轉成Excel。01QQ截圖識別表格現將紙張上的表格掃描或拍照下來,然後在電腦中打開,使用QQ截圖快捷鍵「Ctrl + Alt + A」,截取表格中圖片,點擊「屏幕識別