Spaces:
Running
on
Zero
Running
on
Zero
A newer version of the Gradio SDK is available:
6.5.1
metadata
title: Local OCR Demo
emoji: 🔍
colorFrom: blue
colorTo: indigo
sdk: gradio
app_file: app_hf.py
pinned: false
license: apache-2.0
DeepSeek-OCR-2 & MedGemma-1.5 Multimodal Analysis
Локальна демонстрація OCR та мультимодального аналізу, що стикає дві найсучасніші моделі Hugging Face: deepseek-ai/DeepSeek-OCR-2 для загального OCR і google/medgemma-1.5-4b-it для медичних зображень.
🚀 Що тут є
- Гнучкий Gradio-інтерфейс: підтримка завантаження PDF та зображень, вибір моделі, додатковий промпт, клавіші «очистити», «запустити», «зберегти в файл» і автоматичне очікування відповідей.
- ZeroGPU-готовність:
app_hf.pyоптимізовано для Hugging Face Spaces з переходом моделей на GPU тільки на час inference. - Локальна версія з MPS:
app.pyпідтримує запуск на Python + Metal (Mac) без ZeroGPU. - Модулі для порівняння:
compare_models.py,test_real_docs.pyта інші демонструють, як застосувати моделі скриптово. - Підтримка PDF: усереднювання через PyMuPDF (
fitz) і перетворення кожної сторінки в зображення для подальшого аналізу. - Збереження результатів: усі результати пишуться до
outputs/ocr_result_<timestamp>.txt, а окремі структури для відлагодження (outputs/,ocr_results*,temp_comp.png).
🧠 Архітектура
- ModelManager (
app_hf.py/app.py) кешує завантаження під різні моделі, налаштовуєpad_token_id,eos_token_idта відповідніgeneration_config. - Вхід — зображення або PDF (через
gr.Imageчиgr.File). Якщо це PDF, кожна сторінка рендериться черезfitz.Matrix(2, 2). - DeepSeek запускається через метод
model.infer()з файлами з диску. MedGemma — черезprocessor.apply_chat_template+model.generate(). - Вивід накопичується в пам’яті і показується в текстовому полі Gradio, кастомний промпт передається до обох моделей.
🧰 Потрібне середовище
- Python 3.10+ (рекомендується 3.10/3.11 через сумісність із
transformers). - CUDA 11+ та GPU, якщо хочете запускати DeepSeek/MedGemma локально на CUDA; Mac з MPS теж підтримується.
hf_token(особливо для MedGemma) з повноваженнями моделі.- Залежності:
pip install -r requirements.txt.
⚙️ Налаштування
1. Загальні кроки
git clone https://github.com/deepseek-ai/DeepSeek-OCR-2.git
cd DeepSeek-OCR-2
python -m venv venv # або ваш улюблений venv
source venv/bin/activate
pip install -r requirements.txt
2. Для Hugging Face Spaces (ZeroGPU)
- У Settings ➜ Variables and secrets додайте
HF_TOKEN=<ваш токен>(потрібен дляgoogle/medgemma-1.5-4b-it). - Переконайтеся, що
app_hf.pyвикористовується якapp_file(вказано у metadata). - Spaces автоматично запускає
demo.queue().launch(); GPU буде використовуватися тільки в@spaces.GPU. - У критичних системах з нульовим GPU подбайте про
TRANSFORMERS_CACHE,HF_HOME,HF_HUB_CACHE— вони вже прив’язані до~/.cache/huggingfaceабо/data/.huggingface.
3. Локальний запуск
source venv/bin/activate
python app.py # Створює інтерфейс Gradio з підтримкою MPS/CUDA
- Для MPS (Mac) переконайтеся, що
torch.backends.mps.is_available()повертаєTrue; після завершення скрипт викликаєtorch.mps.empty_cache(). - При запуску на CUDA рекомендується додати перемінну
TRANSFORMERS_VERBOSITY=infoдля діагностики та вивчати журнали.
🎮 Як користуватись
- У веб-інтерфейсі завантажте зображення (
.png,.jpg,.jpeg) або PDF. - Оберіть модель: DeepSeek для OCR або MedGemma для медичних сценаріїв.
- За потреби напишіть користувацький промпт (див.
prompt_input). - Натисніть «Запустити аналіз».
- Результат з’явиться у текстовому полі; можна зберегти кнопкою 💾 або завантажити файл.
- «Очистити» скидає усі поля.
💾 Результати і структура виводу
outputs/ocr_result_<YYYYMMDD_HHMMSS>.txt: основний текстовий файл із результатами (згенеровано черезsave_result_to_file).ocr_results/таocr_results_pdf12/: історичні папки для тестових документів.temp_comp.png: проміжні зображення, які створюються під час розробки.ocr_results_package.zip: приклад пакетованих результатів.
🧪 Тестування та сценарії
test_inference.py,test_real_docs.py,test_minimal.py,test_medgemma.py— приклади запуску обох моделей без Gradio.compare_models.py— бенчмарк порівняння DeepSeek і MedGemma.ocr_full_pdf12.py— повна обробка PDF довжиною до 12 сторінок.generate_test_image.py— генерація синтетичного зображення для швидких перевірок.- Запускайте тести через
python test_real_docs.pyтощо, переконайтесь, що моделі завантажені і в кеші.
🛠️ Поширені проблеми
The following generation flags are not valid... temperature: виникає при передачі параметрів із CLI – лог зараз приглушений.attention mask and pad token id were not set: переконайтеся, щоpad_token_id/eos_token_idвстановлені в токенізаторі йgeneration_config.MedGemmaвимагаєHF_TOKENіз доступом до моделі — без нього завантаження не пройде.CUDAабоMPSможе бути відсутній:run_ocrавтоматично використовуєcontextlib.nullcontextі не вимагає GPU.- Якщо бачите
torch.cuda.empty_cache()абоgc.collect()у логах — це нормальна очистка ZeroGPU-ресурсів.
🗂️ Структура проекту
app_hf.py: Gradio demo для Hugging Face Spaces + ZeroGPU, GPU-секція охопленаspaces.GPU.app.py: локальний Gradio-інтерфейс із підтримкою MPS.compare_models.py: скрипт порівняння.convert_docs.py,convert_full_pdf.py: конвертери та допоміжні утиліти.requirements.txt: основні залежності (transformers,gradio,torch,Pillow,PyMuPDF,huggingface_hub).doc_images,doc_for_testing: набір тестових файлів.
🤝 Контрибуція
- Створіть issue з описом завдання/помилки.
- Відгалужте репозиторій, реалізуйте зміни, напишіть тести/опис.
- Відкрийте PR із обґрунтуванням впливу.
📜 Ліцензія
Проект поширюється під ліцензією Apache-2.0. Деталі див. у LICENSE.