項目地址:https://gitee.com/Shanyalin/pdf-tranlate。
關於機器學習部分的代碼沒有提交,也不會提交,會在此羅列相關的資料 ,避免我的經驗影響了讀者的理解。
接上一篇簡要介紹了機器學習來識別表格的方案。注意此方案的可行性是有條件限制的,細心的讀者會留意到上一篇中有模糊的提到pymupdf中寬度的單位,但始終沒有說明確究竟是什麼。因爲在單一的座標參考系中,討論這些意義並不大,反正都是在同一個座標系中提取或者寫入。point的座標單位有px像素,in英寸, 釐米cm, 毫米mm,磅pt,派卡(約4號鉛字)pc;其中1in=2.54cm=25.4mm=72pt=6pc,唯獨沒有與px的轉換標準。這意味着機器翻譯給出的point的unit和pymupdf給出的point的unit不一致時,座標間就可能無法轉換。
經實驗後發現,pymupdf默認是以px爲單位的,以pdf頁面的左上角爲原點,向右下角遞增。機器學習識別表格的模型給出的結果顯示,以px爲單位,以圖片(注意pdf轉圖片有可能大小不一樣)的左上角爲原點,向右下角遞增。經進一步確認當圖片的大小與pdf頁面的大小一致時,兩邊的座標完全一致,不需要轉變座標系。
機器學習的項目時微軟亞洲研究院的項目,地址:TableBank 。 使用的模型是X101。tablebank目前不能再win上安裝(應該是沒有預編譯包,可以嘗試自行編譯),model zoo說明了相關模型是在Detectron2上被訓練的,Detectron2的相關文檔上有環境安裝的說明文檔 。linux或者macos,py3.6以上,pytorch1.7以上,opencv是可選的,所以不限制版本。這個環境說複雜,還是有些複雜的,對於機器學習有一定經驗的人來說還是比較簡單的。
第一步安裝cuda,這個參考nVidia的官方教程。第二步,根據cuda版本安裝合適版本的pytorch。第三步,根據pytorch的版本選擇安裝detectron2。服務器的cuda是10.2的,pytorch和detectron2的安裝如下,僅供參考:
pip install torch==1.9.0+cu102 torchvision==0.10.0+cu102 -f https://download.pytorch.org/whl/torch_stable.html pip install detectron2 -f https://dl.fbaipublicfiles.com/detectron2/wheels/cu102/torch1.9/index.html pip install opencv-python
環境安裝完畢之後,可以觀摩demo.py 和 api的文檔,來學習如何調用預訓練的模型,以下代碼僅供測試學習,初步瞭解之後可以根據需要進行改造。
from detectron2.engine import DefaultPredictor from detectron2.config import get_cfg import cv2 tablebank = '/Detection/All_X101' # 模型地址 cfg = get_cfg() cfg.merge_from_file(f'{tablebank}/All_X101.yaml') cfg.MODEL.WEIGHTS = f'{tablebank}/model_final.pth' pred = DefaultPredictor(cfg) inputs = cv2.imread("input.jpg") outputs = pred(inputs) boxes = outputs['instances'].pred_boxes.tensor.cpu().numpy() scores = outputs['instances'].scores.cpu().numpy() bbox = [] for i, b in enumerate(boxes): if scores[i] > 0.5: bbox.append([float(x) for x in b]) print(bbox)
當前階段,將detectron2相關環境部署在服務器,以api的形式提供服務,通過post圖片,返回圖片上表格的檢測結果,用於開發和測試。後期或將表格檢測功能集成到表格提取部分,或獨立出去以服務的形式存在。以上將現階段遇到的主要問題都記錄下來,或有問題沒有提到,以後有新的發展將會繼續更新。
over!