feat(ocr): upgrade PaddleOCR to v3.x with PP-OCRv5 and VL model in Docker

This commit is contained in:
Siddharth Kumar Sah
2026-04-12 18:38:40 +08:00
parent 2d9ec4e258
commit 28ee147cc7
2 changed files with 31 additions and 10 deletions
+4 -3
View File
@@ -91,6 +91,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
libimage-exiftool-perl \
python3 python3-pip python3-venv python3-dev \
tesseract-ocr tesseract-ocr-eng tesseract-ocr-deu tesseract-ocr-fra tesseract-ocr-spa \
tesseract-ocr-chi-sim tesseract-ocr-jpn tesseract-ocr-kor \
build-essential \
libgl1 libglib2.0-0 \
libegl1 libwayland-egl1 libwayland-client0 libwayland-cursor0 \
@@ -120,13 +121,13 @@ RUN if [ "$TARGETARCH" = "amd64" ]; then \
/opt/venv/bin/pip install rembg==2.0.62 && \
/opt/venv/bin/pip install realesrgan==0.3.0 \
--extra-index-url https://download.pytorch.org/whl/cu126 && \
/opt/venv/bin/pip install paddlepaddle-gpu==3.0.0 \
/opt/venv/bin/pip install paddlepaddle-gpu>=3.2.1 \
--extra-index-url https://www.paddlepaddle.org.cn/packages/stable/cu126/ && \
/opt/venv/bin/pip install paddleocr==2.9.1 \
/opt/venv/bin/pip install "paddleocr[doc-parser]>=3.4.0,<3.5.0" \
; else \
/opt/venv/bin/pip install "rembg[cpu]==2.0.62" && \
/opt/venv/bin/pip install realesrgan==0.3.0 && \
/opt/venv/bin/pip install paddlepaddle==3.0.0 paddleocr==2.9.1 \
/opt/venv/bin/pip install paddlepaddle>=3.2.1 "paddleocr[doc-parser]>=3.4.0,<3.5.0" \
; fi
# mediapipe 0.10.21 only has amd64 wheels; arm64 maxes out at 0.10.18
+27 -7
View File
@@ -91,24 +91,43 @@ def download_realesrgan_model():
def download_paddleocr_models():
"""Pre-download PaddleOCR models for all supported languages."""
print("=== Downloading PaddleOCR models ===")
"""Pre-download PaddleOCR PP-OCRv5 models for all supported languages."""
print("=== Downloading PaddleOCR PP-OCRv5 models ===")
try:
from paddleocr import PaddleOCR
except ImportError as e:
if "libcuda" in str(e):
# paddlepaddle-gpu can't import without CUDA driver at build time.
# Models will be downloaded on first use at runtime instead.
print(f" Skipping PaddleOCR model pre-download (no CUDA driver at build time)")
print(f" Models will download on first use at runtime.\n")
return
raise
for lang in PADDLEOCR_LANGUAGES:
print(f" Downloading models for lang={lang}...")
PaddleOCR(lang=lang, use_gpu=False, show_log=False)
print(f" Downloading PP-OCRv5 models for lang={lang}...")
PaddleOCR(lang=lang, use_gpu=False, show_log=False, ocr_version="PP-OCRv5")
print(f" {lang} ready")
print(f"All {len(PADDLEOCR_LANGUAGES)} PaddleOCR languages downloaded.\n")
print(f"All {len(PADDLEOCR_LANGUAGES)} PaddleOCR PP-OCRv5 languages downloaded.\n")
def download_paddleocr_vl_model():
"""Pre-download PaddleOCR-VL 1.5 model weights."""
print("=== Downloading PaddleOCR-VL 1.5 model ===")
try:
from paddleocr import PaddleOCRVL
except ImportError as e:
if "libcuda" in str(e):
print(f" Skipping PaddleOCR-VL pre-download (no CUDA driver at build time)")
print(f" Model will download on first use at runtime.\n")
return
raise
print(" Downloading PaddleOCR-VL 1.5 weights (~1.93 GB)...")
try:
PaddleOCRVL(device="cpu")
print(" PaddleOCR-VL 1.5 ready\n")
except Exception as e:
print(f" Warning: PaddleOCR-VL pre-download failed: {e}")
print(f" Model will download on first use at runtime.\n")
def verify_mediapipe():
@@ -164,6 +183,7 @@ def main():
download_rembg_models()
download_realesrgan_model()
download_paddleocr_models()
download_paddleocr_vl_model()
verify_mediapipe()
smoke_test()
print("All models downloaded and verified.")