Files
wehub-resource-sync 9f97f3abbe
CI - Node Bindings / Build darwin-arm64 (push) Waiting to run
CI - Node Bindings / Build darwin-x64 (push) Waiting to run
CI - Node Bindings / Test win32-x64-msvc (push) Blocked by required conditions
CI - Node Bindings / Build linux-arm64-gnu (push) Waiting to run
CI - Node Bindings / Build linux-x64-gnu (push) Waiting to run
CI - Node Bindings / Build linux-x64-musl (push) Waiting to run
CI - Node Bindings / Build win32-arm64-msvc (push) Waiting to run
CI - Node Bindings / Build win32-x64-msvc (push) Waiting to run
CI - Node Bindings / Test darwin-arm64 (push) Blocked by required conditions
CI - Node Bindings / Test darwin-x64 (push) Blocked by required conditions
CI - Node Bindings / Test linux-x64-gnu (push) Blocked by required conditions
CI - Node Bindings / Test linux-x64-musl (push) Blocked by required conditions
CI - Node Bindings / Test win32-arm64-msvc (push) Blocked by required conditions
CI - Python Bindings / Build aarch64-pc-windows-msvc (push) Waiting to run
CI - Python Bindings / Build x86_64-pc-windows-msvc (push) Waiting to run
CI - Python Bindings / Build x86_64-apple-darwin (push) Waiting to run
CI - Python Bindings / Build aarch64-apple-darwin (push) Waiting to run
CI - Python Bindings / Build aarch64-unknown-linux-gnu (push) Waiting to run
CI - Python Bindings / Test x86_64-apple-darwin (push) Blocked by required conditions
CI - Python Bindings / Test aarch64-apple-darwin (push) Blocked by required conditions
CI - Python Bindings / Test x86_64-unknown-linux-gnu (push) Blocked by required conditions
CI - Python Bindings / Test x86_64-unknown-linux-musl (push) Blocked by required conditions
CI - Python Bindings / Test aarch64-pc-windows-msvc (push) Blocked by required conditions
CI - Python Bindings / Test x86_64-pc-windows-msvc (push) Blocked by required conditions
CI / build-and-test (macos-26-intel) (push) Waiting to run
CI / build-and-test (macos-latest) (push) Waiting to run
CI / build-and-test (windows-11-arm) (push) Waiting to run
CI / build-and-test (windows-latest) (push) Waiting to run
CI - Python Bindings / sdist (push) Failing after 1s
CI - Python Bindings / Build x86_64-unknown-linux-musl (push) Failing after 1s
CI / fmt (push) Failing after 1s
E2E Output Validation / compare-outputs (push) Failing after 1s
Sync Docs to Developer Hub / sync-docs (push) Failing after 1s
CI - Python Bindings / Build x86_64-unknown-linux-gnu (push) Failing after 1s
CI - WASM Bindings / Build WASM (push) Failing after 0s
CI / clippy (push) Failing after 1s
CI / build-and-test (ubuntu-latest) (push) Failing after 0s
CI - WASM Bindings / Edge runtime PDF parse test (push) Has been skipped
CI - WASM Bindings / Browser PDF parse test (push) Has been skipped
E2E Output Validation / upload-dataset (push) Waiting to run
Deploy Demo to GitHub Pages / deploy (push) Failing after 1s
CI / build-docker-image (push) Failing after 3s
chore: import upstream snapshot with attribution
2026-07-13 12:23:44 +08:00
..

ocr/

Example OCR server implementations that conform to the LiteParse OCR API specification.

These servers allow you to use alternative OCR engines instead of the built-in Tesseract.js.

Why Use an External OCR Server?

Feature Tesseract.js (built-in) EasyOCR PaddleOCR Surya
Setup Zero (included) uv uv uv
Speed Moderate Moderate Fast (2-3x) Moderate (GPU recommended)
Accuracy (Latin) Good Good Good Excellent
Accuracy (CJK) Fair Good Excellent Excellent
Languages 100+ 80+ 80+ 91
Memory In-process Separate Separate Separate

Recommendations:

  • Quick start: Use built-in Tesseract (no setup)
  • Asian languages: Use PaddleOCR (best CJK support)
  • Multilingual / broad scripts: Use Surya (strong multilingual accuracy)
  • General use: EasyOCR (good balance)

Available Servers

easyocr/

Flask server wrapping EasyOCR library.

  • Port: 8828
  • Good general-purpose OCR
  • 80+ languages

paddleocr/

Flask server wrapping PaddleOCR library.

  • Port: 8829
  • Excellent for Chinese, Japanese, Korean
  • 2-3x faster than EasyOCR

suryaocr/

FastAPI server wrapping Surya OCR 2.

  • Port: 8830
  • Multilingual foundation model (90+ languages)
  • Block-level output; GPU recommended

Quick Start

# Start EasyOCR server
cd ocr/easyocr
uv run server.py

# OR start PaddleOCR server
cd ocr/paddleocr
uv run server.py

# OR start Surya OCR server
cd ocr/suryaocr
uv run server.py

Then use with LiteParse:

# CLI
lit parse document.pdf --ocr-server-url http://localhost:8828/ocr

# Code
const parser = new LiteParse({
  ocrServerUrl: 'http://localhost:8828/ocr',
  ocrLanguage: 'en',
});

API Specification

All servers implement the same API (defined in OCR_API_SPEC.md):

Endpoint: POST /ocr

Request:

  • Content-Type: multipart/form-data
  • Fields:
    • file - Image file
    • language - Language code (e.g., 'en', 'zh', 'ja')

Response:

{
  "results": [
    {
      "text": "recognized text",
      "bbox": [x1, y1, x2, y2],
      "confidence": 0.95
    }
  ]
}

Creating a Custom OCR Server

To implement your own OCR server:

  1. Create a Flask/FastAPI/Express server

  2. Accept POST /ocr with multipart form data

  3. Return JSON with results array containing:

    • text - Recognized text string
    • bbox - Bounding box as [x1, y1, x2, y2]
    • confidence - Confidence score (0-1)
  4. (Optional) Implement GET /health endpoint

See the existing servers as reference implementations.

Language Codes

Most servers accept ISO 639-1 codes (e.g., 'en', 'zh', 'ja') and map them internally:

ISO Code Language Notes
en English
zh Chinese (Simplified)
zh-tw Chinese (Traditional)
ja Japanese
ko Korean
fr French
de German
es Spanish
ar Arabic
hi Hindi