diplom_cv_stamp

0

Описание

распознавание основной надписи инженерной документации

Языки

  • Jupyter Notebook72,6%
  • Python27,1%
  • Shell0,3%
10 месяцев назад
год назад
10 месяцев назад
10 месяцев назад
10 месяцев назад
10 месяцев назад
9 месяцев назад
год назад
10 месяцев назад
10 месяцев назад
9 месяцев назад
10 месяцев назад
9 месяцев назад
9 месяцев назад
9 месяцев назад
год назад
10 месяцев назад
9 месяцев назад
9 месяцев назад
README.md

Приложение для распознавания основной надписи на чертежах

Описание

Приложение предназначено для автоматического анализа инженерных чертежей с целью извлечения данных из основной надписи — штампа, содержащего информацию о проекте, документе, исполнителе и т. д.

Работа над данным приложением состояла из 3х основных частей:

  1. Сбор и разметка датасета — автоматизированное формирование обучающей выборки для детекции основной надписи.
  2. Обучение модели детекции — использование YOLOv8 для обнаружения области основной надписи на чертеже.
  3. OCR-обработка — классификация типа штампа и последующее распознавание текста с помощью специализированных моделей OCR.

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

. ├── app.py # Основной файл приложения Streamlit ├── classifyer │ └── detectors.py # Модуль обнаружения и классификации типов основной надписи ├── config.py # Конфигурационные параметры ├── dataset.py # Вспомогательные функции для работы с датасетом ├── ocr │ ├── ocr_models.py # OCR-модели │ └── preprocess.py # Предобработка изображений перед OCR ├── pdf │ └── pdf_readers.py # Чтение PDF-чертежей ├── runs # Результаты обучения модели YOLO │ └── detect │ ├── best.pt # Обученная модель YOLO │ └── val # Валидационные данные и графики ├── _samples # Примеры чертежей и файлов для демонстрации │ └── ... ├── segmentation │ └── stamp_areas.py # Поиск внутренних областей штампа ├── utils │ ├── image_utils.py # Утилиты работы с изображениями │ ├── k_fold_yolo.py # K-fold разметка под YOLO │ ├── os_utils.py # Утилиты работы с ОС │ ├── txt_utils.py # Работа с текстовыми файлами │ └── yolo_annotator.py # Инструменты аннотации под YOLO ├── yolo_train.py # Скрипт обучения модели YOLO └── yolov8n.pt # Предобученная модель YOLOv8n

Стэк

  • Python 3.x
  • YOLOv8 (Ultralytics)
  • OCR (Tesseract / EasyOCR)
  • OpenCV
  • PyPDF2

Подготовка датасета - dataset.py

Назначение

Этот модуль предназначен для автоматизированного сбора и разметки изображений основной надписи (штампа) на инженерных чертежах. Основная цель — создать обучающую выборку для модели детекции YOLO.

  • Обнаружение штампов с помощью OpenCV (StampDetectorCV)
  • Классификация типов штампов по размерам (форма 1, форма 2, форма 2а)
  • Автоматическая разметка с использованием YOLO-формата (class_id x_center y_center width height)
  • Сохранение изображений и аннотаций
  • Балансировка классов
  • Очистка несогласованных файлов

Работа приложения

Приложение предназначено для автоматического извлечения данных из основной надписи (штампа) на инженерных чертежах. На вход подаётся PDF-файл, на выходе — структурированный текст из ключевых полей штампа.

Этапы работы:

1 Загрузка PDF-чертежа
Поддерживается загрузка файлов в формате .pdf Каждая страница преобразуется в изображение с помощью PdfReader

2 Обнаружение штампа
Используется обученная модель YOLO (best.pt) для поиска области основной надписи Обнаруженный фрагмент вырезается из изображения страницы

3 Классификация типа штампа
Определяется форма штампа (например: form_1, form_2, form_2a) Это позволяет понять, какие поля и где находятся внутри штампа

4 Предобработка изображения штампа
Применяются операции улучшения качества изображения: Увеличение резкости Преобразование в оттенки серого Адаптивное масштабирование

5 OCR-распознавание текста
Текст распознаётся в заранее заданных зонах штампа Поддерживаются несколько OCR-моделей: EasyOCR (по умолчанию) Tesseract OCR (опционально) Surya OCR

6 Результат
На выходе получается словарь с текстом по ключевым полям, например:

{ 'proj_code': 'ТИТУЛ', 'proj_name': 'Система Водоснабжения', 'sheet_num': 'Л.2', 'sheet_name': 'Внутренний водопровод' }

Результат может быть сохранён в json или использован в дальнейшей обработке

!!!ЕСТЬ НЮАНС СОВМЕСТИМОСТИ PyTorch и Streamlit!!! Если вылетает ошибка RuntimeError streamlit/watcher/local_sources_watcher.py , нужно запускать приложение со следующими параметрами streamlit run app.py --server.fileWatcherType none . Однако при этом сервер не перезапускается при изменении файлов. Нужно будет это делать вручную