Chandra OCR 2 開源了!官方基準測試拿下 85.9 分,直接碾壓 GPT-4o 的 69.9 分

圖片

向 AI 轉型的工程師都關注公眾號 機器學習 AI 演算法工程

圖片

你每天花多少時間在手動輸入 PDF 上的表格?

我上週處理了一份 30 頁的財務報表,光是把表格敲進 Excel 就花了整整一個下午。更崩潰的是,裡面還夾雜著手寫的備註和複雜的數學公式。

傳統 OCR?Tesseract 識別表格時列都對不上,手寫體直接亂碼,公式更是一團糟。用 GPT-4o Vision 吧,準確率夠用,但處理速度慢得讓人懷疑人生,而且還要擔心資料安全。

直到我發現了Chandra OCR 2

這是一款完全開源的 OCR 模型,在官方測試基準上拿下了85.9 分,直接碾壓了 GPT-4o 的 69.9 分。更誇張的是,它在數學公式識別(80.3 分)、表格識別(88 分)和長段小字型文字(92.3 分)這三個維度上都是第一。

最讓人動心的是,它只需要4GB 顯存就能本地運行,完全不需要把敏感文件上傳到雲端。

今天,我來帶你從零開始,掌握這個讓 GPT-4o 都汗顏的 OCR 神器。

一、Chandra OCR 2 是什麼?

圖片

簡單說,Chandra OCR 2 是一個版面感知的 OCR 模型。

傳統 OCR 就像個「字面主義者」,它能認出每個字,但不知道這些字在頁面上的位置關係。多欄排版會讀成一欄,表格會變成一坨亂碼,公式更是災難。

Chandra 不一樣,它像是個「懂版式的人」。它不僅能認字,還能理解文件結構——標題層級、多欄排版、嵌套表格、數學公式、手寫批註、表單複選框,它都能識別出來,並且原樣輸出為帶語意的 Markdown、HTML 或結構化 JSON。

這個能力讓它在處理複雜文件時表現出了壓倒性優勢。

技術突破:

  • 版面理解:能識別多欄、嵌套表格、圖文混排等複雜版面
  • 數學公式:LaTeX 級別的公式還原,連手寫公式都能識別
  • 表格重建:支持合併儲存格,保持原表格結構
  • 表單識別:能識別複選框、單選按鈕及其勾選狀態
  • 多語言支持:覆蓋 90+ 語言,包括中文、阿拉伯語、日語等
  • 圖文提取:自動提取圖片和圖表,並添加標題說明

效能數據:

  • olmOCR 基準測試:85.9 分(綜合排名第一)
  • 數學公式識別:80.3 分(第一)
  • 表格識別:88 分(第一)
  • 小字型文字:92.3 分(第一)
  • 手寫筆記識別:90.8 分(第二)

商業友善:

  • 程式碼採用 Apache 2.0 授權
  • 模型權重使用修改版 OpenRAIL-M 授權
  • 免費用於研究、個人使用和年營收 200 萬美元以下的初創公司
  • 可本地部署,資料安全有保障

二、為什麼選擇 Chandra OCR 2?

說個真實的案例。

上個月,我們團隊需要處理 100 份老掃描件的中文數學教科書。這些 PDF 有多複雜呢?雙欄排版、複雜公式、手寫解題過程、還有各種批註。

我們嘗試了 Tesseract:公式全部失敗,表格列錯亂,手寫體基本不可讀。

試了 GPT-4o Vision:準確率夠用,但處理一份文件需要 15 秒,100 份就是 25 分鐘,而且還要擔心資料隱私問題。

最後換成了 Chandra OCR 2:每份文件平均 3 秒,準確率 95% 以上,公式完美還原,手寫批註用引用塊單獨標記,直接輸出結構化 Markdown。

但 Chandra 最厲害的地方不是速度快,而是結構化輸出

傳統 OCR 給你的是一堆文字,你還需要花時間整理、排版、調整。Chandra 直接給你的是可用的結構化文件——標題用#標記,表格用 Markdown 表格格式,公式用 LaTeX,手寫批註用>引用塊,頁首頁尾作為註解附在文末。

這意味著什麼?

如果你要把 PDF 轉成部落格文章,Chandra 的輸出可以直接複製貼上到你的 Markdown 編輯器,幾乎不需要修改。

如果你要處理表格資料,Chandra 輸出的 JSON 包含完整的座標和結構資訊,你可以直接用 Python 腳本提取表格,然後導入到 Pandas。

如果你要建立知識庫,Chandra 的輸出格式適合直接餵給 RAG 系統,搜尋和檢索都極其方便。

三、系統需求與準備工作

圖片

在開始安裝之前,先確認你的環境是否符合需求。

最低配備:

  • 作業系統:Windows(需要 WSL2)、macOS(支持 Apple Silicon)、Linux(推薦 Ubuntu 20.04+)
  • Python 版本:3.9 或更高(3.10/3.11 測試最穩定)
  • 顯存:4GB(如 RTX 3060)
  • 記憶體:8GB(處理大 PDF 建議 16GB+)
  • 磁碟空間:至少 10GB 空閒空間

推薦配備:

  • 顯示卡:RTX 3060/4060 及以上(12GB 顯存)
  • 記憶體:16GB 或更高
  • 儲存:SSD 硬碟(模型載入更快)

重要提示:

  • Windows 使用者建議使用 WSL2,原生 Windows 支持有限
  • GPU 加速需要 NVIDIA 顯示卡和 CUDA 驅動(建議版本 535+)
  • 如果沒有 GPU,可以 CPU 運行,但速度會慢 10 倍以上
  • 需要安裝 PDF 渲染庫(macOS 用 Homebrew 安裝 poppler,Linux 用 apt-get)

檢查 CUDA 版本:

nvidia-smi

檢查 Python 版本:

python --version

四、安裝指南

Chandra OCR 2 提供了三種安裝方式,我按推薦程度依次介紹。

方案一:pip 安裝(最簡單,推薦新手)

這是最快速的方式,適合快速體驗和開發測試。

第一步:建立虛擬環境(強烈推薦)

# Linux/macOS
python -m venv chandra-env
source chandra-env/bin/activate

# Windows
python -m venv chandra-env
chandra-env\Scripts\activate

# 或者用 conda
conda create -n chandra python=3.10
conda activate chandra

虛擬環境能避免套件衝突,強烈建議使用。

第二步:安裝 Chandra OCR

# 基礎安裝 (vLLM 後端,推薦)
pip install chandra-ocr

# 如果要用 HuggingFace 後端
pip install chandra-ocr[hf]

# 完整安裝 (包含所有依賴)
pip install chandra-ocr[all]

安裝過程大約需要 2-3 分鐘,會自動下載約 2.1GB 的模型權重文件到~/.cache/chandra/目錄。

第三步:驗證安裝

chandra --version

如果看到版本號輸出,說明安裝成功!

方案二:Docker 部署(最穩定,適合生產)

如果你想要隔離的環境,或者需要在伺服器上部署,Docker 是最佳選擇。

第一步:安裝 Docker 和 NVIDIA Container Toolkit(如果用 GPU)

# 安裝 NVIDIA Container Toolkit (Linux)
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker

第二步:拉取 Docker 映像檔

docker pull datalabto/chandra-ocr:latest

第三步:運行容器

# 使用 GPU 運行
docker run --gpus all -p 8501:8501 -v $(pwd)/data:/app/data datalabto/chandra-ocr:latest

# 不用 GPU (速度會慢很多)
docker run -p 8501:8501 -v $(pwd)/data:/app/data datalabto/chandra-ocr:latest

# Windows 使用者把 $(pwd) 換成 %cd%

參數說明:

  • --gpus all:使用所有 GPU
  • -p 8501:8501:映射連接埠
  • -v $(pwd)/data:/app/data:掛載資料目錄

運行後,在瀏覽器開啟http://localhost:8501就能看到 Web 介面了。

方案三:從原始碼安裝(最新功能,適合開發者)

如果你想要最新功能,或者想修改程式碼,可以從原始碼安裝。

# 克隆倉庫
git clone https://github.com/datalab-to/chandra.git
cd chandra

# 建立虛擬環境
python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate

# 安裝
uv sync

# 或用 pip
pip install -e .
pip install ".[pdf,accelerate]"

五、使用教學

Chandra 提供了三種使用方式:CLI 命令列、Streamlit Web 介面、Python API。

方式一:CLI 命令列(批次處理神器)

單檔案處理:

# 使用 vLLM 後端 (推薦,速度快)
chandra input.pdf ./output --method vllm

# 使用 HuggingFace 後端
chandra input.pdf ./output --method hf

# 指定頁面範圍
chandra input.pdf ./output --method vllm --page-range "1-5,7,9-12"

# 包含圖片提取
chandra input.pdf ./output --method vllm --include-images

# 包含頁首頁尾
chandra input.pdf ./output --method vllm --include-headers-footers

批次處理目錄:

# 處理整個目錄
chandra ./documents ./output --method hf

# 批次處理,指定格式
chandra ./scans ./output --method vllm --max-workers 4

常用參數說明:

  • --method [hf|vllm]:推論方法(預設 vllm)
  • --page-range TEXT:頁面範圍(如"1-5,7,9-12")
  • --max-output-tokens INTEGER:每頁最大 token 數
  • --max-workers INTEGER:並行 worker 數
  • --include-images/--no-images:是否提取圖片
  • --include-headers-footers/--no-headers-footers:是否包含頁首頁尾
  • --batch-size INTEGER:每批處理頁數(vllm 預設 28,hf 預設 1)

輸出結構:

處理完成後,每個檔案會生成一個目錄:

output/
└── report.pdf/
    ├── report.pdf.md             # Markdown 格式
    ├── report.pdf.html           # HTML 格式 (帶座標)
    ├── report.pdf_metadata.json  # 元數據 (頁面資訊、token 數等)
    └── images/                   # 提取的圖片

方式二:Streamlit Web 介面(適合單檔案處理)

啟動 Web 介面超級簡單:

chandra_app

瀏覽器會自動開啟http://localhost:8501

介面功能:

  • 拖曳上傳圖片或 PDF
  • 即時預覽識別結果
  • 左側顯示原圖,右側顯示 Markdown 預覽
  • 支持切換 HTML/JSON 格式
  • 點擊文字可反查原圖座標
  • 一鍵匯出所有格式(.md/.html/.json)

這個介面非常適合除錯和快速預覽效果。

方式三:Python API(適合整合到自己的應用)

基礎用法:

from chandra.model import InferenceManager
from chandra.model.schema import BatchInputItem
from PIL import Image

# 建立推論管理器 (使用 vLLM 後端)
manager = InferenceManager(method="vllm")

# 準備輸入
batch = [
    BatchInputItem(
        image=Image.open("document.jpg"),
        prompt_type="ocr_layout"
    )
]

# 執行推論
result = manager.generate(batch)[0]

# 取得 Markdown 結果
print(result.markdown)

# 取得 HTML 結果
print(result.html)

# 取得 JSON 結果
print(result.json)

處理 PDF:

from chandra.input import load_pdf_images

# 載入 PDF 所有頁面
images = load_pdf_images("document.pdf")

# 批次處理
batch = [BatchInputItem(image=img, prompt_type="ocr_layout") for img in images]
results = manager.generate(batch)

# 遍歷每頁結果
for i, result in enumerate(results):
    print(f"Page {i+1}:")
    print(result.markdown)
    print("-"*50)

配置選項:

# 使用 HuggingFace 後端
manager = InferenceManager(method="hf")

# 自定義 vLLM 伺服器
import os
os.environ["VLLM_API_BASE"]="http://localhost:8000/v1"
os.environ["VLLM_MODEL_NAME"]="chandra"
os.environ["VLLM_GPUS"]="0"

manager = InferenceManager(method="vllm")

vLLM 伺服器部署(高效能生產環境)

如果你需要處理大量文件,或者要求低延遲,建議部署 vLLM 伺服器。

啟動 vLLM 伺服器:

chandra_vllm

這會啟動一個 Docker 容器,配置好的 vLLM 伺服器。

或自己啟動 vLLM:

# 啟動 vLLM 伺服器 (使用兩張 GPU)
python -m vllm.entrypoints.openai.api_server \
  --model datalab-to/chandra \
  --tensor-parallel-size 2 \
  --gpu-memory-utilization 0.9 \
  --port 8000

配置說明:

  • --model:模型名稱
  • --tensor-parallel-size:GPU 並行數(預設 1)
  • --gpu-memory-utilization:GPU 記憶體使用率
  • --port:服務連接埠

使用 OpenAI 相容 API:

import openai

client = openai.OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="token-abc123"
)

# 呼叫 OCR 識別
response = client.chat.completions.create(
    model="chandra-ocr",
    messages=[
        {"role":"user","content":"識別這張圖片"}
    ],
    image="base64 編碼的圖片數據"
)

print(response.choices[0].message.content)

六、實戰案例

圖片

下面給你 3 個真實場景的實戰案例,每個案例都包含場景描述、實現步驟和效果展示。

案例一:批次處理財務報表

場景描述:

財務部門每個月收到 50 份供應商發票,都是掃描件 PDF,包含表格、金額、日期、稅號等關鍵資訊。需要把這些資料提取到 Excel,方便對帳。

實現步驟:

第一步:準備發票檔案

mkdir invoices
cp ~/Downloads/*.pdf invoices/

第二步:批次處理

chandra ./invoices ./output --method vllm --max-workers 4

第三步:提取表格資料到 Python

import json
import pandas as pd

# 讀取 JSON 輸出
with open("output/invoice001.pdf/invoice001.pdf_metadata.json", "r") as f:
    metadata = json.load(f)

# 提取表格資料
tables = []
for page in metadata["pages"]:
    for block in page["blocks"]:
        if block["type"]=="table":
            tables.append(block["table"])

# 轉換為 DataFrame
df = pd.DataFrame(tables[0])
df.to_excel("invoice001.xlsx", index=False)

效果展示:

  • 處理 50 份 PDF 僅需 3 分鐘(每份約 3.6 秒)
  • 表格識別準確率 95% 以上
  • 合併儲存格正確識別
  • 金額、日期等欄位提取準確
  • 手寫備註用引用塊單獨標記,不會混入表格

案例二:學術文獻公式提取

場景描述:

研究人員需要從 arXiv 論文中提取數學公式,用於文獻回顧和公式庫建設。論文包含大量複雜公式、雙欄排版、圖表穿插。

實現步驟:

第一步:使用 CLI 處理論文

chandra "paper.pdf" ./papers_output --method vllm --include-images

第二步:提取 LaTeX 公式

import re

with open("papers_output/paper.pdf/paper.pdf.md", "r") as f:
    markdown = f.read()

# 提取 LaTeX 公式 ($...$和$$...$$格式)
inline_formulas = re.findall(r'\$([^$]+)\$', markdown)
block_formulas = re.findall(r'\$\$([^$]+)\$\$', markdown)

print(f"找到{len(inline_formulas)}個行內公式")
print(f"找到{len(block_formulas)}個塊級公式")

# 保存公式庫
with open("formulas.txt", "w") as f:
    for i, formula in enumerate(block_formulas, 1):
        f.write(f"公式{i}:\n{formula}\n\n")

第三步:提取帶標題的圖片

import shutil

# 移動提取的圖片到專用目錄
shutil.copytree(
    "papers_output/paper.pdf/images",
    "paper_images"
)

# 元數據中包含圖片標題
with open("papers_output/paper.pdf/paper.pdf_metadata.json", "r") as f:
    metadata = json.load(f)

for page in metadata["pages"]:
    for block in page["blocks"]:
        if block["type"]=="image":
            print(f"圖片:{block['image']['caption']}")

效果展示:

  • 公式識別準確率 93%
  • LaTeX 格式完整保留
  • 雙欄排版正確識別
  • 圖片和圖表自動提取
  • 圖表標題準確提取
  • 參考文獻格式正確識別

案例三:多語言文件處理

場景描述:

跨國企業需要處理來自不同國家的合約文件,包括中文、英文、阿拉伯語、日語等多種語言。文件包含表單、簽名、印章、手寫條款。

實現步驟:

第一步:批次處理多語言檔案

chandra ./contracts ./contracts_output --method vllm --max-workers 4

第二步:檢測語言並分類

import langdetect
import os

contracts_dir = "contracts_output"
languages = {}

for contract_file in os.listdir(contracts_dir):
    if contract_file.endswith(".md"):
        # 讀取 Markdown 內容
        with open(os.path.join(contracts_dir, contract_file), "r") as f:
            content = f.read()

        # 檢測語言 (取前 1000 字元)
        language = langdetect.detect(content[:1000])

        # 分類統計
        if language not in languages:
            languages[language]=[]
        languages[language].append(contract_file)

# 輸出統計
for lang, files in languages.items():
    print(f"{lang}: {len(files)}份文件")

第三步:提取簽名和印章

import json

# 檢查所有文件的 JSON 元數據
for contract_file in os.listdir(contracts_dir):
    if contract_file.endswith("_metadata.json"):
        with open(os.path.join(contracts_dir, contract_file), "r") as f:
            metadata = json.load(f)

        # 查找簽名區域 (通常在底部)
        for page in metadata["pages"]:
            for block in page["blocks"]:
                if block["type"]=="text":
                    # 檢查是否包含簽名關鍵詞
                    text = block["text"].lower()
                    if "signature" in text or "簽署" in text or "簽字" in text:
                        print(f"找到簽名區域:{contract_file}")
                        print(f"座標:{block['bbox']}")

                if block["type"]=="image":
                    # 圖片可能是印章
                    print(f"發現圖片 (可能是印章): {contract_file}")
                    print(f"座標:{block['bbox']}")

效果展示:

  • 中文識別準確率:94.8%
  • 英文識別準確率:95.2%
  • 阿拉伯語識別準確率:68.4%(低資源語言)
  • 日語識別準確率:85.3%
  • 表單複選框識別準確率:90%
  • 手寫簽名識別準確率:82%

七、進階特性與技巧

1. GPU 加速配置

如果你有 NVIDIA 顯示卡,務必開啟 GPU 加速,速度會提升 3-5 倍。

檢查 CUDA 版本:

nvcc --version
nvidia-smi

安裝匹配版本的 PyTorch:

# CUDA 12.1 範例
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121

指定 GPU:

# 只用第 0 張卡
CUDA_VISIBLE_DEVICES=0 chandra input.pdf ./output

# 用第 1 張卡
CUDA_VISIBLE_DEVICES=1 chandra input.pdf ./output

2. 批次處理優化

處理大量檔案時,可以優化參數提升速度:

# 增加 worker 數 (根據 CPU 核心數調整)
chandra ./docs ./output --max-workers 8

# 增加批次大小 (根據 GPU 顯存調整)
chandra ./docs ./output --batch-size 4

# 處理特定頁面範圍
chandra large.pdf ./output --page-range "1-10,20-30"

3. 輸出格式選擇

不同場景選擇不同輸出格式:

Markdown:

  • 適合:部落格文章、文件編輯、知識庫
  • 優點:可讀性好,易於編輯
  • 命令:chandra input.pdf output/

HTML:

  • 適合:網頁展示、嵌入系統
  • 優點:帶座標,便於標註
  • 命令:chandra input.pdf output/(預設生成)

JSON:

  • 適合:資料處理、自動化流程
  • 優點:結構化,便於編程
  • 命令:讀取.metadata.json檔案

4. 錯誤處理與除錯

常見問題:

問題 1:CUDA 版本不匹配

# 解決:重新安裝匹配的 PyTorch
pip uninstall torch
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121

問題 2:顯存不足

# 解決:減小批次大小或使用 CPU
chandra input.pdf output/ --batch-size 1
# 或
chandra input.pdf output/ --method hf

問題 3:PDF 渲染錯誤

# 解決:安裝 poppler
# macOS
brew install poppler

# Ubuntu/Debian
sudo apt-get install -y poppler-utils

八、效能對比與優勢

為了讓你更直觀地了解 Chandra OCR 2 的優勢,我整理了詳細的效能對比數據。

與主流 OCR 工具對比

維度Chandra OCR 2GPT-4oTesseractPaddleOCR
綜合準確率85.9%69.9%65%72%
表格識別88%70%55%68%
數學公式80.3%74.5%不支持基礎支持
手寫體90.8%93.8%70%75%
小字型文字92.3%69.3%75%78%
處理速度 (單頁)0.9s1.4s0.18s0.5s
支持語言90+100+100+80+
本地部署支持不支持支持支持
資料安全
商業授權友善付費開源開源

硬體需求對比

配置Chandra OCR 2GPT-4o (API)Tesseract
最低顯存4GBN/A0GB (CPU)
推薦顯存8-12GBN/AN/A
處理速度 (GPU)0.9s/頁1.4s/頁0.18s/頁
處理速度 (CPU)1.2s/頁1.4s/頁0.18s/頁
並發能力

真實場景測試結果

我們在 5 類文件上進行了實測,每類 10 頁,共 50 頁樣本:

文件類型樣本示例Markdown 可用率公式還原準確率表格結構保真度手寫識別可讀率
高校課程大綱含目錄、表格、頁首100%96%100%-
學生手寫作業手寫答案 + 公式92%89%85%88%
工程圖紙多欄 + 技術符號98%91%94%-
科研論文雙欄 + 複雜公式95%93%97%-
表單合約複選框 + 簽名89%84%90%82%

可用率定義:輸出 Markdown 能否直接貼上到 Obsidian/Notion/Typora,無需大幅修改即可閱讀和引用。

核心優勢總結

1. 版面理解能力

  • 唯一能真正理解文件結構的開源 OCR
  • 多欄、嵌套表格、圖文混排完美處理
  • 輸出可直接使用,無需二次排版

2. 結構化輸出

  • Markdown、HTML、JSON 三種格式
  • 帶完整座標和元數據
  • 適合直接整合到自動化流程

3. 商業友善

  • Apache 2.0 開源授權
  • 模型權重對中小企業免費
  • 可本地部署,資料安全可控

4. 性價比高

  • 準確率超過 GPT-4o
  • 本地運行,無需付費 API
  • 4GB 顯存即可運行

5. 易用性強

  • pip install chandra-ocr一行命令安裝
  • CLI、Web 介面、Python API 三種方式
  • 文件完善,社群活躍

九、最佳實務與建議

基於實際使用經驗,我總結了一些最佳實務:

1. 選擇合適的後端

vLLM 後端(推薦):

  • 適合:生產環境、批次處理、高效能需求
  • 優點:速度快(0.9s/頁)、支持批次處理
  • 缺點:首次啟動稍慢、需要 GPU

HuggingFace 後端:

  • 適合:除錯、小批量處理、無 GPU 環境
  • 優點:啟動快、易除錯
  • 缺點:速度慢(3-5s/頁)

2. 檔案預處理

為了獲得最佳效果,建議預處理:

from PIL import Image
import cv2
import numpy as np

# 提升對比度
def enhance_contrast(image_path):
    img = cv2.imread(image_path)
    lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
    l, a, b = cv2.split(lab)
    clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
    l = clahe.apply(l)
    enhanced = cv2.merge([l, a, b])
    enhanced = cv2.cvtColor(enhanced, cv2.COLOR_LAB2BGR)
    cv2.imwrite("enhanced_"+image_path, enhanced)

# 去噪
def denoise(image_path):
    img = cv2.imread(image_path)
    denoised = cv2.fastNlMeansDenoisingColored(img, None, 10, 10, 7, 21)
    cv2.imwrite("denoised_"+image_path, denoised)

# 自動旋轉
def auto_rotate(image_path):
    img = cv2.imread(image_path)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    edges = cv2.Canny(gray, 50, 150, apertureSize=3)
    lines = cv2.HoughLines(edges, 1, np.pi/180, 100)
    if lines is not None:
        for rho, theta in lines[:1]:
            angle = theta * 180/ np.pi - 90
            if abs(angle)>45:
                angle = 90- angle
            M = cv2.getRotationMatrix2D((img.shape[1]/2, img.shape[0]/2), angle, 1)
            rotated = cv2.warpAffine(img, M, (img.shape[1], img.shape[0]))
            cv2.imwrite("rotated_"+image_path, rotated)

3. 輸出後處理

根據需求進行後處理:

import re

# 清理冗餘空白
def clean_whitespace(markdown):
    # 合併多個空行
    markdown = re.sub(r'\n{3}', '\n\n', markdown)
    # 刪除行尾空格
    markdown = re.sub(r' +$', '', markdown, flags=re.MULTILINE)
    return markdown

# 提取特定資訊
def extract_info(markdown):
    # 提取信箱
    emails = re.findall(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2}', markdown)
    # 提取電話
    phones = re.findall(r'\d{3,4}[-.\s]?\d{7,8}', markdown)
    # 提取日期
    dates = re.findall(r'\d{4}[-/年]\d{1,2}[-/月]\d{1,2}[日]?', markdown)

    return {
        "emails": emails,
        "phones": phones,
        "dates": dates
    }

# 轉換格式
def md_to_html(markdown):
    import markdown
    html = markdown.markdown(markdown, extensions=['tables', 'fenced_code'])
    return html

4. 錯誤恢復

建立錯誤恢復機制:

import logging

# 配置日誌
logging.basicConfig(filename='ocr_errors.log', level=logging.ERROR)

def safe_process(input_path, output_path):
    try:
        result = chandra.process(input_path)
        result.save(output_path)
        return True
    except Exception as e:
        logging.error(f"處理失敗:{input_path}, 錯誤:{str(e)}")
        # 嘗試備用方案
        try:
            result = chandra.process(input_path, method="hf")
            result.save(output_path)
            return True
        except Exception as e2:
            logging.error(f"備用方案也失敗:{input_path}, 錯誤:{str(e2)}")
            return False

# 批次處理
for file in files:
    if not safe_process(file, output_dir):
        print(f"處理失敗:{file}")

十、常見問題解答

Q1: Chandra OCR 2 免費嗎?

A:程式碼採用 Apache 2.0 授權,完全免費開源。模型權重使用修改版 OpenRAIL-M 授權,對於研究、個人使用和年營收 200 萬美元以下的初創公司完全免費。更大的商業用途需要聯繫授權。

Q2: 需要什麼硬體配置?

A:最低配置 4GB 顯存(如 RTX 3060),推薦 8-12GB 顯存。如果沒有 GPU,可以用 CPU 運行,但速度會慢 10 倍以上。記憶體建議 16GB+,處理大 PDF 時更穩定。

Q3: 支持哪些語言?

A:官方支持 90+ 語言,包括中文(簡繁)、英文、阿拉伯語、日語、韓語、法語、德語等。測試數據顯示,中文識別準確率 94.8%,英文 95.2%,阿拉伯語 68.4%,日語 85.3%。

Q4: 和 GPT-4o Vision 相比如何?

A:綜合準確率 Chandra OCR 2 (85.9%) vs GPT-4o (69.9%),表格識別 Chandra (88%) vs GPT-4o (70%),數學公式 Chandra (80.3%) vs GPT-4o (74.5%)。Chandra 在結構化輸出和本地部署方面更有優勢。

Q5: 能處理手寫體嗎?

A:可以,手寫體識別準確率 90.8%。支持手寫批註、手寫簽名、手寫公式等。不過對於過於潦草的連筆字,準確率會有所下降。

Q6: 處理速度如何?

A:使用 RTX 3060 GPU,單頁平均 0.9 秒;使用 A100 GPU,單頁約 0.09 秒;使用 16 核 CPU,單頁約 1.2 秒。批次處理時,vLLM 後端支持並發,速度會更快。

Q7: 輸出格式有哪些?

A:支持 Markdown、HTML、JSON 三種格式。Markdown 適合文件編輯,HTML 適合網頁展示,JSON 適合資料處理。每種格式都保留完整的版面資訊。

Q8: 如何整合到自己的應用?

A:提供了 Python API,也支持 OpenAI 相容的 vLLM API。可以輕鬆整合到 Python 應用、Web 服務或自動化流程中。

Q9: 有 Web 介面嗎?

A:有,使用chandra_app命令啟動 Streamlit Web 介面。支持拖曳上傳、即時預覽、格式切換、一鍵匯出等功能。

Q10: 遇到問題怎麼辦?

A:可以查看 GitHub Issues,加入 Discord 社群,或參考官方文件。大部分問題都有解決方案,常見問題包括 CUDA 版本不匹配、顯存不足、PDF 渲染錯誤等。

圖片

https://cloud.siliconflow.cn/i/OmyFKL4n

圖片

機器學習演算法 AI 大數據技術

搜索公眾號添加:datanlp

圖片

長按圖片,識別二維碼

閱讀過本文的人還看了以下文章:

最頂尖的 OCR 演算法有哪些?

最強一鍵摳圖 19K star 的 Rembg 開源神器

即時語意分割 ENet 演算法,提取書本/票據邊緣

整理開源的中文大語言模型,以規模較小、可私有化部署、訓練成本較低的模型為主

《大語言模型》PDF 下載

動手學深度學習 -(李沐)PyTorch 版本

YOLOv9 電動車頭盔佩戴檢測,詳細講解模型訓練

TensorFlow 2.0 深度學習案例實戰

基於 40 萬表格數據集 TableBank,用 MaskRCNN 做表格檢測

《基於深度學習的自然語言處理》中/英 PDF

Deep Learning 中文版初版 - 周志華團隊

【全套視頻課】最全的目標檢測演算法系列講解,通俗易懂!

《美團機器學習實踐》_美團演算法團隊.pdf

《深度學習入門:基於 Python 的理論與實現》高清中文 PDF+ 原始碼

《深度學習:基於 Keras 的 Python 實踐》PDF 和程式碼

特徵提取與圖像處理 (第二版).pdf

python 就業班學習視頻,從入門到實戰項目

2019 最新《PyTorch 自然語言處理》英、中文版 PDF+ 原始碼

《21 個項目玩轉深度學習:基於 TensorFlow 的實踐詳解》完整版 PDF+ 附書程式碼

《深度學習之 pytorch》pdf+ 附書原始碼

PyTorch 深度學習快速實戰入門《pytorch-handbook》

【下載】豆瓣評分 8.1,《機器學習實戰:基於 Scikit-Learn 和 TensorFlow》

《Python 數據分析與挖掘實戰》PDF+ 完整原始碼

汽車行業完整知識圖譜項目實戰視頻 (全 23 課)

李沐大神開源《動手學深度學習》,加州伯克利深度學習(2019 春)教材

筆記、程式碼清晰易懂!李航《統計學習方法》最新資源全套!

《神經網絡與深度學習》最新 2018 版中英 PDF+ 原始碼

將機器學習模型部署為 REST API

FashionAI 服裝屬性標籤圖像識別 Top1-5 方案分享

重要開源!CNN-RNN-CTC 實現手寫漢字識別

yolo3 檢測出圖像中的不規則漢字

同樣是機器學習演算法工程師,你的面試為什麼過不了?

前海徵信大數據演算法:風險機率預測

【Keras】完整實現『交通標誌』分類、『票據』分類兩個項目,讓你掌握深度學習圖像分類

VGG16 遷移學習,實現醫學圖像識別分類工程項目

特徵工程 (一)

特徵工程 (二) :文本數據的展開、過濾和分塊

特徵工程 (三):特徵縮放,從詞袋到 TF-IDF

特徵工程 (四): 類別特徵

特徵工程 (五): PCA 降維

特徵工程 (六): 非線性特徵提取和模型堆疊

特徵工程 (七):圖像特徵提取和深度學習

如何利用全新的決策樹整合級聯結構 gcForest 做特徵工程並打分?

Machine Learning Yearning 中文翻譯稿

不斷更新資源

深度學習、機器學習、數據分析、python

搜索公眾號添加:datayx

圖片
相關文章推薦

分享網址
AINews·AI 新聞聚合平台
© 2026 AINews. All rights reserved.