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 \ libimage-exiftool-perl \
python3 python3-pip python3-venv python3-dev \ python3 python3-pip python3-venv python3-dev \
tesseract-ocr tesseract-ocr-eng tesseract-ocr-deu tesseract-ocr-fra tesseract-ocr-spa \ 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 \ build-essential \
libgl1 libglib2.0-0 \ libgl1 libglib2.0-0 \
libegl1 libwayland-egl1 libwayland-client0 libwayland-cursor0 \ 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 rembg==2.0.62 && \
/opt/venv/bin/pip install realesrgan==0.3.0 \ /opt/venv/bin/pip install realesrgan==0.3.0 \
--extra-index-url https://download.pytorch.org/whl/cu126 && \ --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/ && \ --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 \ ; else \
/opt/venv/bin/pip install "rembg[cpu]==2.0.62" && \ /opt/venv/bin/pip install "rembg[cpu]==2.0.62" && \
/opt/venv/bin/pip install realesrgan==0.3.0 && \ /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 ; fi
# mediapipe 0.10.21 only has amd64 wheels; arm64 maxes out at 0.10.18 # 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(): def download_paddleocr_models():
"""Pre-download PaddleOCR models for all supported languages.""" """Pre-download PaddleOCR PP-OCRv5 models for all supported languages."""
print("=== Downloading PaddleOCR models ===") print("=== Downloading PaddleOCR PP-OCRv5 models ===")
try: try:
from paddleocr import PaddleOCR from paddleocr import PaddleOCR
except ImportError as e: except ImportError as e:
if "libcuda" in str(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" Skipping PaddleOCR model pre-download (no CUDA driver at build time)")
print(f" Models will download on first use at runtime.\n") print(f" Models will download on first use at runtime.\n")
return return
raise raise
for lang in PADDLEOCR_LANGUAGES: for lang in PADDLEOCR_LANGUAGES:
print(f" Downloading models for lang={lang}...") print(f" Downloading PP-OCRv5 models for lang={lang}...")
PaddleOCR(lang=lang, use_gpu=False, show_log=False) PaddleOCR(lang=lang, use_gpu=False, show_log=False, ocr_version="PP-OCRv5")
print(f" {lang} ready") 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(): def verify_mediapipe():
@@ -164,6 +183,7 @@ def main():
download_rembg_models() download_rembg_models()
download_realesrgan_model() download_realesrgan_model()
download_paddleocr_models() download_paddleocr_models()
download_paddleocr_vl_model()
verify_mediapipe() verify_mediapipe()
smoke_test() smoke_test()
print("All models downloaded and verified.") print("All models downloaded and verified.")