Qwen能吞下整本掃描版PDF,直接轉Word了,這波操作太讚了!

你好,我是郭震
經常收到讀者後臺留言,問如何處理掃描版PDF,怎麼把裡面的字準確批次提取出來,然後儲存為txt,word啥的。
今天這篇文章我來探索一種較好的解決方案,提供完整智慧體原始碼,詳細操作步驟,確保大家可以復現,感興趣的可以看看。
1 展示效果
從我電腦上找了一本《天池比賽》掃描版PDF,掃描版意思就是全是圖片,並且圖片清晰度不怎地,如下圖所示全書365頁:
  某頁截圖:
下面是使用本文介紹的方法,批次處理這個掃描版PDF,選取第十頁的提取結果,左側圖是原版,右側是提取後儲存成word的結果:
大家可以對一對,我看了下提取正確率非常高,所以想要處理掃描PDF的可以使用本文方法。
一句話總結下這個解決方案:基於 Qwen2.5-VL-7B 多模態大模型構建智慧體,自動讀取掃描版 PDF,藉助影像多模態逐頁理解內容,並按閱讀順序整理輸出,最終生成結構清晰的 Word 文件。
這個方案的主要特色:
1)7B模型,消費級顯示卡完全可以本地執行;
2)基於多模態(Vision-Language)能力理解圖片內容,相比傳統的OCR識別方法,準確度大大提升;
3)全自動化批次處理,放在後臺執行,一本書很快就能轉化完。
有些讀者跑這樣的模型一回,電腦就熱的發燙,心疼電腦。還有些電腦沒有GPU,跑起來太慢了。
確實也是,在本地跑大模型很耗電腦,沒有GPU效率也很慢,最好的方法就是薅一些平臺的羊毛,他們提供了遠端GPU算力,一般註冊剛開始都會送一些券,夠用一段時間。
比如騰訊雲,gpugeek,阿里雲,這些平臺都提供了GPU算力,其中gpugeek的算力平時經常用,用起來挺友好,送的券現在還沒用完。今天就以他家的這個平臺,咱們把掃描版PDF直接轉出word來,走起。
2 薅GPU算力
進入gpugeek,如下所示:
https://gpugeek.com
點選右上角登入,進入下面介面,選擇建立例項:
選擇一個型號,比如24GB視訊記憶體跑Qwen2.5-VL-7B,足夠了:
RTX-A5000, 24G視訊記憶體,95GB記憶體:
選擇官方映象,依次選擇如下圖所示,Miniconda主要為了配置環境:
點選建立後,GPU算力映象開始建立:
顯示執行中,表明映象建立好了,直接就能開始薅他家的GPU算力了:
然後點選登入:
複製登入指定到命令視窗:
輸入密碼後,登入到GPU伺服器,如下圖所示:
使用下面命令檢視GPU:
nvidia-smi --list-gpus
如下所示,顯示為GPU 0,RTX A5000型號:
3 安裝環境
安裝torch,transformers等,直接複製下面兩行命令執行:
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121pip install transformers safetensors
如果要處理影片或多模態任務,再安裝opencv-python:
pip install opencv-python
再安裝加速依賴包:
pip install accelerate
以上環境就安裝好了,不需要寫程式碼,只需要執行命令。
咱們搞個demo,大家直接複製下面程式碼,儲存為:vl_ocr.py
from transformers import Qwen2_5_VLForConditionalGeneration, AutoTokenizer, AutoProcessorfrom qwen_vl_utils import process_vision_info# default: Load the model on the available device(s)model = Qwen2_5_VLForConditionalGeneration.from_pretrained("Qwen/Qwen2.5-VL-7B-Instruct", torch_dtype="auto", device_map="auto")# We recommend enabling flash_attention_2 for better acceleration and memory saving, especially in multi-image and video scenarios.# model = Qwen2_5_VLForConditionalGeneration.from_pretrained(#     "Qwen/Qwen2.5-VL-7B-Instruct",#     torch_dtype=torch.bfloat16,#     attn_implementation="flash_attention_2",#     device_map="auto",# )# default processerprocessor = AutoProcessor.from_pretrained("Qwen/Qwen2.5-VL-7B-Instruct")# The default range for the number of visual tokens per image in the model is 4-16384.# You can set min_pixels and max_pixels according to your needs, such as a token range of 256-1280, to balance performance and cost.# min_pixels = 256*28*28# max_pixels = 1280*28*28# processor = AutoProcessor.from_pretrained("Qwen/Qwen2.5-VL-7B-Instruct", min_pixels=min_pixels, max_pixels=max_pixels)messages = [    {"role""user","content": [            {"type""image","image""https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg",            },            {"type""text""text""請用中文描述這張圖片的內容。"},        ],    }]# Preparation for inferencetext = processor.apply_chat_template(    messages, tokenize=False, add_generation_prompt=True)image_inputs, video_inputs = process_vision_info(messages)inputs = processor(    text=[text],    images=image_inputs,    videos=video_inputs,    padding=True,    return_tensors="pt",)inputs = inputs.to("cuda")# Inference: Generation of the outputgenerated_ids = model.generate(**inputs, max_new_tokens=128)generated_ids_trimmed = [    out_ids[len(in_ids) :] for in_ids, out_ids inzip(inputs.input_ids, generated_ids)]output_text = processor.batch_decode(    generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False)print(output_text)
然後輸入如下命令執行,如下圖所示:
因為本地還沒有下載過"Qwen2.5-VL-7B" 模型,所以 transformers 框架自動去 Huggingface 下載模型的全部權重檔案。model.safetensors.index.json 是模型的索引檔案。model-00001-of-00005.safetensors 等這幾個是模型的權重分片(大模型通常被切成多個小塊,分片下載)。
咱們預設輸入如下這個圖片,讓它理解下這個圖的資訊:

返回英文了:
咱們修改下程式碼這裡,提示詞告訴它使用中文描述:
下面是中文返回結果,如下圖所示:
以上描述結果,大家覺得如何,有沒有覺得很精準呀。
4 掃描版PDF開始轉Word
上傳一個300多頁的pdf檔案到伺服器,使用scp命令:
scp -P 41277 ocr_test.pdf root@你的伺服器名字(來源文章一開始複製的登入地址)
提示輸入密碼後,輸入文章一開始登入地方的密碼,如下圖所示:

再安裝PDF轉Image的包:
pip install pdf2image python-docx
然後安裝pdf2image的一個系統依賴包,如下所示:
sudo apt updatesudo apt install poppler-utils
完整程式碼scanpdf_to_doc.py檔案一共89行程式碼,是的,只需要89行程式碼就可以實現這樣的實用功能:
程式執行後的效果如下圖所示:
特意找了難度最高的目錄頁,因為目錄頁清晰度很差,但是展示效果如下圖所示,沒有問題,就連頁碼也都對齊整了:
限於本文篇幅,以上完整89行原始碼檔案全部放在下面我的公眾號,獲取方式回覆:智慧體
以上就是掃描版PDF轉word的完整步驟,所有程式碼也全部為大家準備好,大家只需實踐下就行。
以上方法也不是完美的,我看了下,目前發現只有目錄部分轉化有些問題,因為目錄分為左右兩個部分,但是轉Word後,只把左側目錄完整轉出來了,右側部分有些丟了未轉化,同樣方法問了更滿血的國外模型也不行,相信未來多模態大模型能搞定。
最終總結
本文章解決了一個大家普遍遇到的問題,就是如何將掃描的PDF書直接轉為word,文中介紹了基於 Qwen2.5-VL-7B 多模態大模型,自動讀取掃描版 PDF,具有如下特色:
轉化準確率高;哪怕一整本掃描的書也能輕鬆應對;文中全部程式碼和步驟都開源,確保大家可以復現。
關於跑Qwen2.5-VL-7B大模型使用算力問題,可以薅下gpugeek這家公司的羊毛,目前我看到他家註冊還有多重福利,學生認證還能領到更高的券,感興趣的點選下面【閱讀原文】可以試試。海外版現在我看著也有了,訪問地址:https://gaias.io
後面再有遇到掃描版PDF轉Word的,大家記得回來看這篇教程。好了就到這裡。
以上全文4398字,23張圖。如果覺得這篇文章對你有用,可否點個關注。給我個三連擊:點贊、轉發和在看。若可以再給我加個⭐️,謝謝你看我的文章,我們下篇再見。


相關文章