- FastAPI app with SQLite DB (projects, pages, issues, feedback) - OpenSeadragon DZI viewer with inline SVG overlays - Dashboard: upload, project list, tiling toggle, review mode - Pipeline integration: tiling OCR → layout → elements → rules QC → DZI → DB - Feedback collection: true_positive / false_positive / not_sure per issue
123 lines
4.2 KiB
Markdown
123 lines
4.2 KiB
Markdown
# 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
|