copilot-swe-agent[bot]
8a2a4dc2b3
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 >
2026-02-24 16:28:14 +00:00
..
2025-03-26 16:27:36 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:12:11 +00:00
2026-02-13 09:12:11 +00:00
2026-02-23 22:12:08 +00:00
2026-02-10 15:53:11 +00:00
2026-02-14 00:05:57 +00:00
2026-02-13 09:10:52 +00:00
2026-02-12 03:21:41 +00:00
2026-02-23 23:24:27 +00:00
2026-02-13 09:10:52 +00:00
2026-02-23 09:33:48 +00:00
2026-02-12 03:21:41 +00:00
2026-02-17 11:40:34 +00:00
2026-02-13 09:10:52 +00:00
2026-02-14 00:17:16 +00:00
2026-02-13 09:10:52 +00:00
2026-02-22 16:02:00 +00:00
2026-02-23 09:33:48 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-23 21:14:08 +00:00
2026-02-14 00:16:21 +00:00
2026-02-13 09:10:52 +00:00
2026-02-22 20:56:58 +00:00
2026-02-12 03:21:41 +00:00
2026-02-08 08:16:54 +00:00
2026-02-22 14:24:27 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-15 10:24:48 +00:00
2026-02-13 09:10:52 +00:00
2026-02-14 00:16:21 +00:00
2026-02-13 09:10:52 +00:00
2026-02-12 03:21:41 +00:00
2026-02-23 20:23:06 +00:00
2026-02-23 12:54:34 +00:00
2026-02-14 00:12:30 +00:00
2026-02-13 09:10:52 +00:00
2026-02-16 15:37:22 +00:00
2026-02-21 09:40:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-22 20:56:58 +00:00
2026-02-13 09:10:52 +00:00
2026-02-23 23:23:28 +00:00
2026-02-13 09:10:52 +00:00
2026-02-23 23:59:50 +00:00
2026-02-13 22:39:34 +00:00
2026-02-22 16:27:37 +00:00
2026-02-14 00:30:52 +00:00
2026-02-23 23:23:28 +00:00
2026-02-13 16:12:39 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-14 00:16:21 +00:00
2026-02-23 23:23:28 +00:00
2026-02-13 16:51:07 +00:00
2026-02-23 19:42:03 +00:00
2026-02-12 03:21:41 +00:00
2026-02-13 22:39:34 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-12 03:21:41 +00:00
2026-02-15 10:24:48 +00:00
2026-02-16 15:54:13 +00:00
2026-02-22 15:25:48 +00:00
2026-02-15 10:28:44 +00:00
2026-02-13 23:40:31 +00:00
2026-02-12 03:21:41 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-14 00:34:34 +00:00
2026-02-22 16:12:58 +00:00
2026-02-14 00:05:57 +00:00
2026-02-14 00:16:21 +00:00
2026-02-12 17:32:17 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-16 15:56:19 +00:00
2026-02-09 20:56:35 +00:00
2026-02-12 03:21:41 +00:00
2026-02-13 09:10:52 +00:00
2026-02-24 16:28:14 +00:00
2026-02-24 13:22:39 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-23 23:00:45 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-09 15:14:40 +00:00
2026-02-22 15:25:48 +00:00
2026-02-13 22:39:34 +00:00
2026-02-13 16:51:07 +00:00
2026-02-16 20:40:44 +00:00
2026-02-23 12:28:59 +00:00
2026-02-12 03:21:41 +00:00
2026-02-16 15:47:20 +00:00
2026-02-13 09:10:52 +00:00
2026-02-12 03:21:41 +00:00
2026-02-12 03:21:41 +00:00
2026-02-13 09:10:52 +00:00
2026-02-23 23:09:55 +00:00
2026-02-14 00:16:21 +00:00
2026-02-13 16:51:07 +00:00
2026-02-13 23:33:25 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 23:45:11 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-17 04:35:00 +00:00
2026-02-17 11:40:34 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 16:51:07 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 23:36:32 +00:00
2026-02-09 20:55:53 +00:00
2026-02-13 09:10:52 +00:00
2026-02-12 03:21:41 +00:00
2026-02-24 00:04:42 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-14 00:16:21 +00:00
2026-02-17 12:01:40 +00:00
2026-02-12 03:21:41 +00:00
2026-02-24 00:04:42 +00:00
2026-02-23 23:23:28 +00:00
2026-02-23 10:01:07 +00:00
2026-02-23 10:01:07 +00:00