diplom_cv_stamp
Описание
распознавание основной надписи инженерной документации
Языки
- Jupyter Notebook72,6%
- Python27,1%
- Shell0,3%
Приложение для распознавания основной надписи на чертежах
Описание
Приложение предназначено для автоматического анализа инженерных чертежей с целью извлечения данных из основной надписи — штампа, содержащего информацию о проекте, документе, исполнителе и т. д.
Работа над данным приложением состояла из 3х основных частей:
- Сбор и разметка датасета — автоматизированное формирование обучающей выборки для детекции основной надписи.
- Обучение модели детекции — использование YOLOv8 для обнаружения области основной надписи на чертеже.
- 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 . Однако при этом сервер не перезапускается при изменении файлов. Нужно будет это делать вручную