mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
feat(ocr): upgrade PaddleOCR to v3.x with PP-OCRv5 and VL model in Docker
This commit is contained in:
+4
-3
@@ -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
|
||||||
|
|||||||
@@ -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.")
|
||||||
|
|||||||
Reference in New Issue
Block a user