opencode/backend/README.md
Кирилл Блинов f37c477a0a Add FastAPI backend with DZI viewer and feedback system
- 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
2026-06-01 12:29:41 +03:00

123 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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