feat(ocr): auto-install Tesseract/EasyOCR languages from settings
- Add app/utils/ocr_language_manager.py: detects tessdata dir, downloads missing .traineddata files via wget/curl from tessdata_fast GitHub repo, pre-downloads EasyOCR models, exposes async background-thread helper - TesseractOCRProvider.process() calls ensure_tesseract_languages() before running pytesseract; raises clear error if languages remain unavailable - EasyOCRProvider.process() logs informational message when models download - app/main.py: calls ensure_ocr_languages_async() at startup - app/utils/settings_sync.py: triggers language re-check after every settings reload so UI changes take effect without container restart - app/api/settings.py: adds POST /api/settings/install-ocr-languages endpoint for on-demand language installation from the admin UI - Dockerfile: adds wget for runtime tessdata downloads - docs/ConfigurationGuide.md: documents automatic language download - tests/test_ocr_language_manager.py: 29 unit tests Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
@@ -71,6 +71,17 @@ def notify_settings_updated() -> None:
|
||||
except Exception as exc:
|
||||
logger.warning(f"Could not reload in-process settings: {exc}")
|
||||
|
||||
# Re-check OCR language availability in the background whenever settings
|
||||
# are updated. This ensures that if a user changes tesseract_language or
|
||||
# easyocr_languages via the UI, the new language data is downloaded without
|
||||
# requiring a container restart.
|
||||
try:
|
||||
from app.utils.ocr_language_manager import ensure_ocr_languages_async
|
||||
|
||||
ensure_ocr_languages_async()
|
||||
except Exception as exc:
|
||||
logger.warning(f"Could not schedule OCR language check: {exc}")
|
||||
|
||||
|
||||
def register_settings_reload_signal() -> None:
|
||||
"""
|
||||
@@ -96,6 +107,13 @@ def register_settings_reload_signal() -> None:
|
||||
reload_settings_from_db(settings)
|
||||
_last_seen_version = current_version
|
||||
logger.info(f"Worker settings reloaded (version={current_version})")
|
||||
# Ensure OCR language data is up to date after a settings reload.
|
||||
try:
|
||||
from app.utils.ocr_language_manager import ensure_ocr_languages_async
|
||||
|
||||
ensure_ocr_languages_async()
|
||||
except Exception as lang_exc:
|
||||
logger.warning(f"Could not schedule OCR language check on worker: {lang_exc}")
|
||||
except Exception as exc:
|
||||
logger.debug(f"Settings version check skipped: {exc}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user