用於pdf翻譯的PdfTranlate(續2)

  項目地址: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!

  

  

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章