# Blueprint QC Backend FastAPI backend для сбора, хранения и разметки замечаний QC по чертежам. ## Архитектура ``` ┌─────────────┐ ┌──────────────┐ ┌─────────────┐ │ React UI │────▶│ FastAPI │────▶│ SQLite │ │ (viewer) │◀────│ Backend │◀────│ Database │ └─────────────┘ └──────────────┘ └─────────────┘ │ ▼ ┌──────────────┐ │ OCR + QC │ │ Pipeline │ └──────────────┘ ``` ## Установка ```bash cd backend pip install -r requirements.txt ``` ## Запуск ```bash python -m uvicorn app.main:app --reload --port 8000 ``` API будет доступен на http://localhost:8000 Документация (Swagger): http://localhost:8000/docs ## API Endpoints ### Проекты | Method | Endpoint | Описание | |--------|----------|----------| | POST | `/api/projects/upload` | Загрузка PDF, запуск обработки | | GET | `/api/projects` | Список проектов | | GET | `/api/projects/{id}` | Детали проекта | ### Замечания (Issues) | Method | Endpoint | Описание | |--------|----------|----------| | GET | `/api/projects/{id}/issues` | Замечания проекта | | GET | `/api/issues/{id}` | Одно замечание | ### Feedback (разметка) | Method | Endpoint | Описание | |--------|----------|----------| | POST | `/api/feedback` | Отметить TP/FP | | GET | `/api/feedback/stats` | Статистика | ### Обучение | Method | Endpoint | Описание | |--------|----------|----------| | GET | `/api/training/data` | Данные для обучения | | POST | `/api/training/export` | Скачать JSON | | GET | `/api/stats` | Общая статистика | ### Viewer | Method | Endpoint | Описание | |--------|----------|----------| | GET | `/viewer/{project_id}/{page}` | HTML viewer | | GET | `/viewer_tiles/{project_id}/{path}` | DZI тайлы | ## Workflow 1. **Загрузка**: `POST /api/projects/upload` с PDF 2. **Обработка**: Backend запускает OCR → QC → DZI (фоново) 3. **Просмотр**: `GET /viewer/{id}/{page}` — viewer с overlay 4. **Разметка**: Пользователь кликает замечания → `POST /api/feedback` (is_true_positive: true/false) 5. **Обучение**: `GET /api/training/data` — экспорт размеченных данных ## Feedback Schema ```json { "issue_id": 123, "is_true_positive": true, // true = реальная проблема, false = ложное срабатывание "comment": "Размер действительно плохо читается", "action_taken": "fixed" // fixed / ignored / not_sure } ``` ## Training Data Каждый размеченный пример содержит: - `bbox`: координаты на PNG - `issue_type`: тип проблемы - `is_true_positive`: метка от пользователя - `image_path`: путь к PNG страницы - `dimension_text`: текст размера (если есть) - `confidence`: OCR confidence Накопив 100-200 размеченных примеров, можно: 1. Fine-tune VLM (few-shot prompting) 2. Обучить YOLO-детектор под ваши типы чертежей 3. Дообучить правила QC (эвристики) ## Модели БД ### Project - id, name, pdf_filename, status, created_at, output_folder ### Page - id, project_id, page_number, png_path, ocr_data, vlm_description ### Issue - id, project_id, page_id, issue_type, severity, message, bbox, dimension_text, confidence ### Feedback - id, issue_id, is_true_positive, comment, action_taken, created_at