Skip to content

kuklevSU10/RD

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

89 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PDF Annotation Tool

Приложение для аннотирования PDF-чертежей с OCR и экспортом в Markdown.

Функциональность

  • ✅ Открытие и просмотр PDF-чертежей
  • Удаление электронных штампов (аннотации, изображения, контейнеры)
  • ✅ Ручное выделение прямоугольных блоков (text/table/image)
  • Автоматическая сегментация блоков (Marker + Datalab API)
  • OCR распознавание (Локальные VLM + Chandra OCR)
    • Локальные VLM серверы: Qwen3-VL-32B, LLaVA и др.
    • Chandra OCR: таблицы, формы, рукописный текст, полная структура
  • ✅ Сохранение разметки в JSON
  • ✅ Экспорт кропов блоков в изображения
  • ✅ Генерация Markdown отчётов по категориям
  • ✅ Перенос разметки на новую версию PDF
  • ✅ Сборка в .exe с PyInstaller

Установка

1. Установите Python 3.11

2. Установите зависимости

pip install -r requirements.txt

3. OCR движки (опционально)

Вариант 1: Локальный VLM сервер (рекомендуется)

  • Запустите Qwen3-VL-32B или другую VLM модель на http://127.0.0.1:1234
  • Используйте LM Studio, vLLM или Ollama
  • Документация: docs/LOCAL_VLM_OCR.md

Вариант 2: Chandra OCR

pip install chandra-ocr
  • GPU рекомендуется для ускорения
  • Документация: docs/CHANDRA_OCR.md

4. Datalab API (опционально)

Для автоматической разметки через Datalab API:

copy .env.template .env

Откройте .env и укажите API ключ от datalab.to

Документация: docs/DATALAB_API_INTEGRATION.md

5. Cloudflare R2 Storage (опционально)

Для автоматической загрузки результатов OCR в облако:

copy .env.template .env

Откройте .env и укажите R2 credentials (Account ID, Access Key, Secret Key)

Быстрый старт: docs/R2_QUICK_START.md
Документация: docs/R2_STORAGE_INTEGRATION.md
Диагностика: docs/R2_TROUBLESHOOTING.md 🔧

Запуск

python app/main.py

Логирование

Приложение автоматически настраивает логирование:

  • Файл логов: logs/app.log (все события с уровнем INFO и выше)
  • Консоль: вывод в реальном времени

Для отладки измените уровень в app/main.py:

setup_logging(log_level=logging.DEBUG)  # Подробное логирование

Структура проекта

RD/
├── app/
│   ├── __init__.py
│   ├── main.py                 # Точка входа
│   ├── models.py               # Дата-классы (Document, Page, Block)
│   ├── pdf_utils.py            # Работа с PDF (PyMuPDF)
│   ├── annotation_io.py        # Сохранение/загрузка JSON
│   ├── cropping.py             # Обрезка и сохранение блоков
│   ├── ocr.py                  # OCR (pytesseract)
│   ├── report_md.py            # Генерация Markdown
│   ├── auto_segmentation.py    # Авто-сегментация (OpenCV)
│   ├── reapply.py              # Перенос разметки
│   └── gui/
│       ├── __init__.py
│       ├── main_window.py      # Главное окно
│       └── page_viewer.py      # Виджет просмотра страниц
├── requirements.txt
└── README.md

Использование

1. Открытие PDF

  • Нажмите "Открыть PDF" и выберите файл
  • Страницы отобразятся в центральной области
  • Для больших PDF: открытие происходит мгновенно

2. Ручная разметка блоков

  • Нарисуйте прямоугольник мышью на странице
  • В правой панели задайте тип блока и описание
  • Навигация: кнопки "Пред." / "След."

3. Автоматическая сегментация

Marker (локально):

  • Нажмите "Marker разметка" (Ctrl+M) для текущей страницы
  • Или "Marker (все стр.)" (Ctrl+Shift+M) для всего документа
  • Блоки определяются локально без интернета

Datalab API (облачно):

  • Нажмите "Datalab разметка" (Ctrl+D) для текущей страницы
  • Или "Datalab (все стр.)" (Ctrl+Shift+D) для всего документа
  • Требуется API ключ от datalab.to
  • Документация: docs/DATALAB_API_INTEGRATION.md

4. Сохранение разметки

  • "Сохранить разметку" → blocks.json
  • "Загрузить разметку" → загрузить существующий blocks.json

5. OCR с учетом типов блоков

  • "Запустить OCR" (Ctrl+R) → выбор движка и режима:

Движки OCR:

  1. Локальный VLM сервер (Qwen3-VL и др.)
    • URL: http://127.0.0.1:1234/v1
    • Модель: qwen3-vl-32b-instruct
    • Отличная работа с русским языком
  2. Chandra OCR
    • HuggingFace (локально) или vLLM сервер
    • Оптимизирована для документов

Режимы:

  • По блокам: распознавание с учетом типа каждого блока
    • TEXT/TABLE: OCR через Chandra/Qwen
    • IMAGE: детальное описание на русском
  • Вся страница: автоматическая структура документа

Обработка по типам:

  • ✅ TEXT/TABLE: таблицы в Markdown, формы, структура
  • ✅ IMAGE: подробное описание + ссылка на кроп
  • ✅ Рукописный текст
  • ✅ Полное сохранение layout

Настройка промптов:

  • Промпты хранятся в папке prompts/
  • Редактируйте .txt файлы для настройки OCR
  • Подробнее: prompts/README.md

Результат:

  • Структурированный Markdown документ
  • Кропы изображений в temp_crops/
  • Описания изображений на русском языке
  • Автоматическая загрузка в R2 (если настроен)

Документация: docs/MARKER_OCR_INTEGRATION.md

7. Экспорт

  • "Экспорт кропов" → сохранить изображения блоков в папки:
    output/
      text/src/
      table/src/
      image/src/
    
  • "Генерация MD" → создать Markdown отчёты по категориям

8. Перенос разметки

  • Загрузите старую разметку (blocks.json)
  • "Перенос разметки" → выберите новый PDF
  • Координаты блоков будут автоматически адаптированы

Сборка в EXE

pyinstaller --onefile --windowed --name="PDFAnnotation" app/main.py

Исполняемый файл будет в папке dist/.

Модули и их назначение

Модуль Назначение Особенности
models.py Дата-классы для документа, страниц и блоков Сериализация в JSON
pdf_utils.py Открытие PDF и рендеринг страниц через PyMuPDF ✨ Функции + класс, логирование, обработка ошибок
annotation_io.py Сохранение/загрузка разметки в JSON Логирование операций
cropping.py Обрезка блоков и сохранение в изображения Прогресс-логирование
ocr.py OCR движки (LocalVLM + Chandra) Высокоточное распознавание документов
report_md.py Генерация Markdown отчётов Группировка по типам
auto_segmentation.py Автоматическое выделение блоков (OpenCV) Эвристики для типов блоков
reapply.py Перенос разметки на новый PDF Автоматическое масштабирование координат
gui/main_window.py Главное окно приложения Интеграция всех компонентов
gui/page_viewer.py Виджет для просмотра страниц и рисования блоков Интерактивное рисование

📚 Документация

Быстрый старт

Интеграции OCR

Архитектура

Примеры кода

🔧 API для разработчиков

1. Рендеринг PDF

from app.pdf_utils import open_pdf, render_page_to_image, render_all_pages

# Открыть PDF
doc = open_pdf("document.pdf")  # Обработка ошибок встроена

# Одна страница
image = render_page_to_image(doc, page_index=0, zoom=2.0)

# Все страницы
images = render_all_pages(doc, zoom=2.0)

doc.close()

Параметры zoom: 1.0 (72 DPI), 2.0 (144 DPI) ⭐, 3.0 (216 DPI)

2. Модели данных

from app.models import Block, BlockType, BlockSource, PageModel

# Создать блок с двумя системами координат
block = Block.create(
    page_index=0,
    coords_px=(100, 200, 500, 600),  # Пиксели: x1, y1, x2, y2
    page_width=1600,
    page_height=2400,
    category="Заголовок",
    block_type=BlockType.TEXT,
    source=BlockSource.USER
)

# coords_norm вычислены автоматически (0..1)
print(block.coords_norm)  # (0.0625, 0.0833, 0.3125, 0.25)

# Модель страницы с изображением
page = PageModel(page_index=0, image=image)
page.add_block(block)

# Фильтрация блоков
text_blocks = page.get_blocks_by_type(BlockType.TEXT)
user_blocks = page.get_blocks_by_source(BlockSource.USER)

Ключевые особенности:

  • Уникальные ID блоков (UUID)
  • Двойная система координат: пиксели + нормализованные (0..1)
  • Автоматическая конвертация между форматами
  • Перенос разметки между версиями PDF через norm координаты

Документация:


Недавние обновления

  1. Cloudflare R2 Storage - автоматическая загрузка результатов OCR в облако
  2. Редактируемые промпты OCR - настройка через файлы в prompts/
  3. Marker + OCR интеграция - обработка блоков по типам
  4. IMAGE распознавание - детальное описание на русском через Qwen
  5. Структурированный Markdown - генерация с описаниями изображений

Следующие шаги

  1. Улучшение автосегментации (ML-модели)
  2. Горячие клавиши и удобства UI
  3. Пакетная обработка нескольких PDF
  4. Прогресс-бары для длительных операций
  5. Экспорт в другие форматы (DOCX, HTML)

Версия: 1.0.0
Python: 3.11
GUI: PySide6

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages