本地部署大模型實現掃描版PDF文件OCR識別!

在使用大模型處理書籍?PDF?時,有時你會遇到掃描版?PDF,也就是說每一頁其實是圖像形式。這時,大模型需要先從圖片中提取文本,而這就需要借助?OCR(光學字符識別)技術。

像?Gemini 2.5?這樣的強大模型,具備非常強的從圖片中提取文本的能力。實際上,我們完全可以利用它來執行?OCR?任務。

利用這樣的大模型進行?OCR,不僅能處理復雜的圖像場景,還能理解文本的結構,保留格式,并正確處理表格、標題等內容,為后續的文本分析、自動化處理和智能搜索提供強大的支持。這種結合?OCR?和?NLP?的智能文檔處理方式,正在成為解決實際問題的強大工具。

然而,像?Gemini?這樣的強大模型只能通過遠程訪問,且存在?API?受限和高成本的問題。那么,是否有可能在本地部署類似的大模型來完成這一任務呢?

雖然本地部署或直接安裝已經有很多方案,后期文章中我們也將逐一比較。但我們更想自己手擼一個,想著將來大模型不斷升級之中我們也能緊隨其后直接升級是不。

一 多模態

首先,我們去?Hugging Face?找找具有這種本事的大模型。

圖片

看到?Image-Text-to-Text?沒有,它表示模型能夠處理圖像和文本輸入,符合我們的任務要求。點擊進去,首先看到的是一批新發布的模型,

圖片

我們往后翻,找到下面這個?https://huggingface.co/Qwen/Qwen2.5-VL-3B-Instruct

圖片

選這個模型的主要原因是想在筆記本上也能跑起來,所以參數量不能太多。先用我的?Macbook Air?試試本地大模型的?OCR?能力,然后再部署到顯卡好一點的電腦上去干活。

代碼放在?github?倉庫:https://github.com/mathinml/pdf2md

二 項目任務

本項目的任務明確如下:實現一個本地部署的多模態大語言模型,如?Qwen2.5-VL,用于從?PDF?文件中提取文字內容并完成?OCR?任務,最好保留表格形式,并將其轉換為?Markdown?文檔。模型是可選的,只需調整參數即可切換到其他模型。盡管這個功能看似簡單,但它為后續更復雜任務奠定了基礎。

我們使用兩款電腦來測試:Macbook Air M3?處理器,16G?內存;UbuntuV100 32G?顯存。

三 用到的庫

該項目主要涉及三部分,即?Transformers,?vLLM?以及具體的大模型如?QWen2.5-VL。這個模型是基于?Transformer?架構開發的多模態模型。具體通過?Hugging Face?的?Transformers?庫來加載和使用它,并選擇使用?vLLM?來優化?Qwen2.5-VL?模型的推理性能。考慮到后期可能會實際部署到高性能電腦上,因此選擇?vLLM,而不是?Ollama

Transformers,?vLLM?以及?QWen2.5-VL?之間的關系如下圖所示。

圖片

這個關系圖展示了三者之間的依賴和協作,具體如下,

  • Transformers?是基礎框架:QWen2.5-VL?的代碼和模型結構依賴于?Hugging Face Transformers?庫。開發者和用戶需要安裝最新版本的?Transformers?來加載和運行?QWen2.5-VL

  • vLLM?是推理優化引擎:vLLM?增強了?QWen2.5-VL?的推理性能,尤其是在處理視覺和視頻任務時。它通過張量并行、動態內存管理等技術,使?QWen2.5-VL?能夠在生產環境中高效運行。vLLM?需要與?Transformers?配合使用,并確保版本兼容(例如,某些版本的?Transformers?可能需要從源代碼安裝)。

  • QWen2.5-VL?是應用模型:它是具體的多模態模型,利用?Transformers?提供的架構和?vLLM?的推理優化來實現其功能。換句話說,QWen2.5-VL?的設計目標是處理復雜的視覺語言任務,而?Transformers?和?vLLM?則是其技術支撐。

四 程序流程

程序流程以及幾個主要 Python 文件之間的關系如下圖所示。

圖片

這個程序的主要功能是將?PDF?文件轉換為?Markdown?格式,整個流程可以總結如下:

1、命令行參數解析:通過?cli.py?中的?parse_args?函數解析用戶輸入的命令行參數;主要參數包括:PDF 文件路徑、模型路徑、輸出文件路徑等。

2、初始化處理器:在?main.py?中初始化?PDFMarkdownProcessor?處理器;該處理器是整個轉換過程的核心控制器。

3、PDF?處理階段:加載指定的?PDF?文件;使用?PDFToImageConverter?將?PDF?文件轉換為圖像序列,圖像分辨率默認為?1024?寬。

4、模型初始化:加載指定的視覺語言模型(如?Qwen2.5-VL-3B-Instruct);該模型需要提前下載到本地指定目錄。

5、圖像處理與轉換:對每個?PDF?頁面生成的圖像進行處理;使用?ImageToMarkdownConverter?將圖像內容轉換為?Markdown?文本;這一步利用視覺語言模型識別圖像中的文本、表格、圖片等內容。

6、結果整合與輸出:合并所有頁面轉換得到的?Markdown?內容;將最終的?Markdown?文本保存到指定的輸出文件中。

整個流程體現了模塊化設計思想,各個組件職責明確,便于維護和擴展。用戶只需通過簡單的命令行參數即可完成從?PDF?到?Markdown?的轉換過程。

五 模型下載

可以通過命令?huggingface-cli download?來下載?Qwen2.5-VL,但如果?huggingface?不方便使用,可以選擇用?modelscope

比如我們要使用的這個模型文件放在這里:https://modelscope.cn/models/Qwen/Qwen2.5-VL-3B-Instruct/files

先安裝?modelscope

pip install modelscope

然后用以下命令,

modelscope download --model Qwen/Qwen2.5-VL-3B-Instruct --local_dir ../local_models/Qwen2.5-VL-3B-Instruct

將完整模型庫文件下載到指定的本地目錄?../local_models/Qwen2.5-VL-3B-Instruct?中。

圖片

?轉化效果

對于?1024?分辨率的圖像,在?Macbook Air?上轉化一頁需要六、七分鐘,雖然有點久,但至少也能跑起來了,而在?V100?上只需要?10?秒+。

圖片

如果頁面較清晰,可以降低分辨率,那樣自然會提高轉化效率。另外,程序中有個參數?quantization=None?表明沒有啟用量化,保持了模型的完整精度。如果想進一步提高效率,可以使用量化版本,即?Qwen/Qwen2.5-VL-3B-Instruct-AWQ

六 轉化效果

從?PDF?文件中提取的圖像,

圖片

轉化為?Markdown?后,效果如下圖所示。是不是文字、表格和數學公式都還保持的不錯。

圖片

代碼:https://github.com/mathinml/pdf2md

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76220.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76220.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76220.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《Operating System Concepts》閱讀筆記:p700-p732

《Operating System Concepts》學習第 60 天,p700-p732 總結,總計 33 頁。 一、技術總結 1.Virtual machine manager (VMM) The computer function that manages the virtual machine; also called a hypervisor. VMM 也稱為 hypervisor。 2.types …

軟件項目驗收報告模板

軟件項目驗收報告 一、項目基本信息 項目名稱XX智能倉儲管理系統開發單位XX科技有限公司驗收單位XX物流集團合同簽訂日期2023年3月15日項目啟動日期2023年4月1日驗收日期2024年1月20日 二、驗收范圍 入庫管理模塊(包含RFID識別、庫存預警)出庫調度模…

深度學習筆記39_Pytorch文本分類入門

🍨 本文為🔗365天深度學習訓練營 中的學習記錄博客🍖 原作者:K同學啊 | 接輔導、項目定制 一、我的環境 1.語言環境:Python 3.8 2.編譯器:Pycharm 3.深度學習環境: torch1.12.1cu113torchvision…

二分查找-LeetCode

題目 給定一個 n 個元素有序的(升序)整型數組 nums 和一個目標值 target,寫一個函數搜索 nums 中的 target,如果目標值存在返回下標,否則返回 -1。 示例 1: 輸入: nums [-1,0,3,5,9,12], target 9 輸出: 4 解釋: …

從 Ext 到 F2FS,Linux 文件系統與存儲技術全面解析

與 Windows 和 macOS 操作系統不同,Linux 是由愛好者社區開發的大型開源項目。它的代碼始終可供那些想要做出貢獻的人使用,任何人都可以根據個人需求自由調整它,或在其基礎上創建自己的發行版本。這就是為什么 Linux 存在如此多的變體&#x…

leetcode:3210. 找出加密后的字符串(python3解法)

難度:簡單 給你一個字符串 s 和一個整數 k。請你使用以下算法加密字符串: 對于字符串 s 中的每個字符 c,用字符串中 c 后面的第 k 個字符替換 c(以循環方式)。 返回加密后的字符串。 示例 1: 輸入&#xff…

JVM詳解(曼波腦圖版)

(?ω?)ノ 好噠!曼波會用最可愛的比喻給小白同學講解JVM,準備好開啟奇妙旅程了嗎?(??????)? 📌 思維導圖 ━━━━━━━━━━━━━━━━━━━ 🍎 JVM是什么?(蘋果式比…

ZStack文檔DevOps平臺建設實踐

(一)前言 對于軟件產品而言,文檔是不可或缺的一環。文檔能幫助用戶快速了解并使用軟件,包括不限于特性概覽、用戶手冊、API手冊、安裝部署以及場景實踐教程等。由于軟件與文檔緊密耦合,面對業務的瞬息萬變以及軟件的飛…

Git創建分支操作指南

1. 創建新分支但不切換&#xff08;僅創建&#xff09; git branch <分支名>示例&#xff1a;創建一個名為 new-feature 的分支git branch new-feature2. 創建分支并立即切換到該分支 git checkout -b <分支名> # 傳統方式 # 或 git switch -c <分支名&g…

package.json 中的那些版本數字前面的符號是什么意思?

1. 語義化版本&#xff08;SemVer&#xff09; 語義化版本的格式是 MAJOR.MINOR.PATCH&#xff0c;其中&#xff1a; MAJOR&#xff1a;主版本號&#xff0c;表示不兼容的 API 修改。MINOR&#xff1a;次版本號&#xff0c;表示新增功能但保持向后兼容。PATCH&#xff1a;修訂號…

如何有效防止服務器被攻擊

首先&#xff0c;我們要明白服務器被攻擊的危害有多大。據不完全統計&#xff0c;每年因服務器遭受攻擊而導致的經濟損失高達數十億。這可不是一個小數目&#xff0c;就好比您辛苦積攢的財富&#xff0c;瞬間被人偷走了一大半。 要有效防止服務器被攻擊&#xff0c;第一步就是…

Chainlit 快速構建Python LLM應用程序

背景 chainlit 是一款簡單易用的Web UI goggle&#xff0c;它支持使用 Python 語言快速構建 LLM 應用程序&#xff0c;提供了豐富的功能&#xff0c;包括文本分析&#xff0c;情感分析等。 這里我們以官網openai提供的例子&#xff0c;快速的開發一個帶有UI的聊天界面&#xf…

華為OD機試真題——硬件產品銷售方案(2025A卷:100分)Java/python/JavaScript/C++/C語言/GO六種最佳實現

2025 A卷 100分 題型 本文涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、測試用例以及綜合分析&#xff1b; 并提供Java、python、JavaScript、C、C語言、GO六種語言的最佳實現方式&#xff01; 2025華為OD真題目錄全流程解析/備考攻略/經驗分享 華為OD機試真題《硬件產品…

【數據結構_6】雙向鏈表的實現

一、實現MyDLinkedList&#xff08;雙向鏈表&#xff09; package LinkedList;public class MyDLinkedList {//首先我們要創建節點&#xff08;因為雙向鏈表和單向鏈表的節點不一樣&#xff01;&#xff01;&#xff09;static class Node{public String val;public Node prev…

做Data+AI的長期主義者,加速全球化戰略布局

在Data與AI深度融合的新紀元&#xff0c;唯有秉持長期主義方能真正釋放數智化的深層價值。2025年是人工智能從技術爆發轉向規模化落地的關鍵節點&#xff0c;也是標志著袋鼠云即將迎來十周年的重要里程碑。2025年4月16日&#xff0c;袋鼠云成功舉辦了“做DataAI的長期主義者——…

構建基于PHP和MySQL的解夢系統:設計與實現

引言 夢境解析一直是人類心理學和文化研究的重要領域。隨著互聯網技術的發展,構建一個在線的解夢系統能夠幫助更多人理解自己夢境的含義。本文將詳細介紹如何使用PHP和MySQL構建一個功能完整的解夢系統,包括系統架構設計、數據庫模型、核心功能實現以及優化策略。 本文源碼下…

【桌面】【系統應用】Samba共享文件夾

目錄 場景一&#xff1a;銀河麒麟桌面與銀河麒麟桌面之間共享文件夾 環境準備 實現目標 操作步驟 &#xff08;一&#xff09;配置主機A共享文件夾 1、環境準備 2、在主機A創建共享文件夾 3、設置共享文件密碼 &#xff08;二&#xff09;主機B訪問主機A 場景二&…

OpenCV 圖形API(37)圖像濾波-----分離過濾器函數sepFilter()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 應用一個可分離的線性濾波器到一個矩陣&#xff08;圖像&#xff09;。 該函數對矩陣應用一個可分離的線性濾波器。也就是說&#xff0c;首先&a…

webpack理解與使用

一、背景 webpack的最初目標是實現前端工程的模塊化&#xff0c;旨在更高效的管理和維護項目中的每一個資源。 最早的時候&#xff0c;我們通過文件劃分的方式實現模塊化&#xff0c;也就是將每個功能及其相關狀態數據都放在一個JS文件中&#xff0c;約定每個文件就是一個獨立…

rac環境下,增加一個控制文件controlfile

先關閉節點二&#xff0c;在節點一上操作 1、查看控制文件個數和路徑 SQL> show parameter control 2、備份參數文件 SQL> create pfile/home/oracle/orcl.pfile20250417 from spfile; 3、修改控制文件參數 SQL> alter system set contr…