# cv-candidates/ — JSON кандидатов из OpenCV pipeline

Этот каталог — детерминированный результат работы `scripts/cv-extract.py`
(см. секцию «CV extraction pipeline» в основном `README.md`).

Каждый JSON содержит кандидатов на стены/столбы, извлечённых из
`preprocessed/<name>.rotated.png` через HoughLinesP + HoughCircles.
**LLM нигде не участвует.** Бюджет $0.

## Регенерация

```bash
cd 01-plan-school
# зависимости (раз):
pip install --break-system-packages opencv-python-headless numpy

# все 3 этажа:
for f in plan-bti-1-floor plan-bti-2-floor plan-bti-3-floor; do
  python3 scripts/cv-extract.py \
    --input  preprocessed/${f}.rotated.png \
    --output cv-candidates/${f}.json
done
```

## Файлы (актуальный прогон)

| Файл                          | walls (high/med/low) | columns | размер |
| ----------------------------- | -------------------- | ------- | ------ |
| `plan-bti-1-floor.json`       | 52 / 447 / 2219      | 152     | ~534 KB |
| `plan-bti-2-floor.json`       | 43 / 372 / 1089      | 84      | ~295 KB |
| `plan-bti-3-floor.json`       | 42 / 239 / 1209      | 88      | ~295 KB |

## Формат JSON

```json
{
  "image": { "source": "plan-bti-1-floor.rotated.png", "width": 2383, "height": 1684 },
  "scale_px_per_m": 30,
  "walls_candidates": [
    { "from": [x1, y1], "to": [x2, y2], "length_px": 245.3, "angle_deg": 0.5, "confidence": "high" }
  ],
  "dimensional_lines": [
    { "from": [x1, y1], "to": [x2, y2] }
  ],
  "columns_candidates": [
    { "x": 1234, "y": 567, "radius_px": 8.5, "size_mm_estimate": 566.7 }
  ],
  "stats": {
    "walls_high_conf": 52,
    "walls_med_conf": 447,
    "walls_low_conf": 2219,
    "columns": 152,
    "dimensional_lines_filtered": 0
  }
}
```

## Использование

Через URL editor v2 — добавь `&candidates=../cv-candidates/<file>.json`:

```
viewer/editor-v2.html?image=../preprocessed/plan-bti-1-floor.rotated.png&candidates=../cv-candidates/plan-bti-1-floor.json
```

Workflow приёма — см. основной `README.md`.
