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
|