LeyuDame

LeyuDame

github

Mistral AI OCR介紹

從本期開始將整理一些常用的 LaTeX 相關工具,回歸一下本帳號成立的初衷。

簡要介紹#

在過去,最好用的識別數學公式並進行代碼轉換的網站 / 軟體莫過於 Mathpix 了:支持各種格式轉換,比如 pdf,png 到 tex,md,當然也包括 docx 等等,無論是 pdf 文檔轉換還是截圖識別,從移動端的 Snip App 再到桌面客戶端以及網頁版、瀏覽器插件全生態的覆蓋讓使用體驗無比絲滑。

但免費版的使用額度相當有限,而付費訂閱又太貴(一年 50 美刀);此外,網頁版還偶爾會出現網絡連接不穩定的情形。

不過現在,號稱地表最強的 OCR 工具 Mistral 出現了。這是一家法國的初創 AI 公司,可以理解為歐洲版的 DeepSeek,它的價格也十分便宜(OCR 功能大概 1 美刀可以轉換上千頁 pdf)。

使用示例#

文件上傳#

直接訪問官網聊天界面(可能需要用手機號註冊帳號):

https://chat.mistral.ai/chat

像其他大語言模型一樣對話框內上傳文件,輸入 “轉換成 markdown” 即可;比如這裡我上傳了一篇和 DeepSeek-R1 的論文:
image
等待幾秒鐘,即可得到轉換後的 markdown 代碼。
進一步地,利用 Typora 或 Obsidian 等 markdown 編輯器,即可查看或轉換成 pdf、docx 等格式(可能需要額外安裝 pandoc)。

網頁版效果展示#

更多效果展示請參閱官網介紹:

https://mistral.ai/news/mistral-ocr

這是原來的 pdf 文件:
image
這是轉化後並在 Typora 中顯示的效果(主題:Newsprint):
目錄(帶超鏈接)
數學公式
表格

可以看到,除了圖片外的效果非常不錯,但如果要把圖片也提取出來並在相應位置保留,就需要用到下面的方法了。

進階配置#

除了在官網的對話界面處理文件外,也可以通過 API 調用進行批量處理。
感謝@nicekate 提供的 Python 代碼,可以實現在本地調用 Mistral API 進行文件處理,並且在 B 站上還有相應的演示視頻。

  1. GitHub 倉庫地址:
    https://github.com/nicekate/mistral-ocr
  2. B 站視頻:
    【實測 Mistral OCR :世界最佳文檔理解模型?】 https://www.bilibili.com/video/BV1Bw92YiEEH

配置方法也非常簡單,只需要申請一個自己的 API key,然後再把上面的倉庫 clone 下來,填入相應的 API key 即可。

申請 API key#

在控制台左側菜單欄點擊 "API Keys",然後點擊右上角的 “Create new key”,複製即可。

https://console.mistral.ai/home

下載 Python 代碼#

先將上述倉庫 clone 到本地:

git clone https://github.com/nicekate/mistral-ocr.git

再安裝依賴項:

pip install mistralai

pdf_ocr.py 中修改 API 密鑰和 PDF 文件路徑即可(72~73 行):

API_KEY = "填入你自己的api key""

PDF_PATH = "xxx.pdf"

運行文件,即可在同目錄下找到轉換後的文件夾ocr_results_xxx,其中包含了轉換後的 markdown 文件和圖片文件。

本地轉換效果展示#

主題:Typora GitHub
image

image

批處理#

有時需要同時進行多個 PDF 文件的轉換,於是在此基礎上我自己動手增加了批處理功能,可以將同一目錄下的所有 PDF 文件進行轉換。

具體修改如下:

  1. 新增 get_pdf_files_in_directory 函數,用於掃描指定文件夾並返回所有 PDF 文件的完整路徑。
  2. __main__ 中,替換手動指定 PDF 文件路徑的方式,改為從文件夾中自動獲取 PDF 文件。
  3. 如果文件夾中沒有 PDF 文件,會提示用戶。
    以下是新增的代碼片段:
def process_pdfs(pdf_paths: list, api_key: str) -> None:

for pdf_path in pdf_paths:

try:

output_dir = process_pdf(pdf_path, api_key)

print(f"文件 {pdf_path} 處理完成,結果保存在: {output_dir}")

except Exception as e:

print(f"處理文件 {pdf_path} 時出錯: {e}")

  

def get_pdf_files_in_directory(directory: str) -> list:

"""獲取指定目錄中的所有PDF文件路徑"""

pdf_files = []

for file in os.listdir(directory):

if file.endswith(".pdf"):

pdf_files.append(os.path.join(directory, file))

return pdf_files

  

if __name__ == "__main__":

# 使用示例

API_KEY = "your_mistral_api_key"

DIRECTORY = "your_pdf_file" # 指定包含PDF文件的文件夾名稱

  

# 獲取文件夾中的所有PDF文件

PDF_PATHS = get_pdf_files_in_directory(DIRECTORY)

if not PDF_PATHS:

print(f"目錄 {DIRECTORY} 中沒有找到PDF文件。")

else:

process_pdfs(PDF_PATHS, API_KEY)

完整的文件已上傳至 GitHub,歡迎 star:

參考資料#

  1. 完美翻譯 PDF 的第一步 - Mistral OCR 初步使用指南 https://zhuanlan.zhihu.com/p/28801320889
  2. 【實測 Mistral OCR :世界最佳文檔理解模型?】 https://www.bilibili.com/video/BV1Bw92YiEEH
  3. https://github.com/nicekate/mistral-ocr
  4. 在前者基礎上增加批處理功能:https://github.com/YZDame/mistral-ocr
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。