62 lines
3.2 KiB
Markdown
62 lines
3.2 KiB
Markdown
# Vision Classifier — трек 3 (RealSense D415 на Orange PI)
|
||
|
||
## Правила ТЗ (фиксированные)
|
||
|
||
1. Габариты строго `>10×10×10` и `<450×320×320` мм → иначе **C**
|
||
2. Иначе если `r_in/r_out ≥ 0.8` (вид сверху **или** ≥2 поперечных среза) → **D**
|
||
3. Иначе → **B**
|
||
|
||
Стабилизация: медиана 12 кадров + голосование ≥2/3 окна → **LOCK**.
|
||
После LOCK зона не меняется, пока объект не убрали. Без «достройки» круга на коробках.
|
||
|
||
**Пограничные случаи:** если консенсуса нет `uncertain_after_frames` кадров
|
||
(ratio у порога 0.8, сторона у лимита 450/320) — товар помечается **«неуверенно»**
|
||
и уходит в безопасную зону (`uncertain_fallback_zone: C`), а не в основной поток.
|
||
Все LOCK-решения пишутся в `logs/decisions.jsonl` (метрики для отчёта: зоны,
|
||
габариты, ratio, доля неуверенных).
|
||
|
||
## Калибровка (обязательно перед замером габаритов!)
|
||
|
||
Габариты считаются через фокусное `fx/fy`. Дефолт `670` — расчёт по спецификации
|
||
D415 @ 640×480 (старое значение 430 завышало размеры в ~1.56 раза). Уточнить под
|
||
свою камеру по коробке известного размера (рулеткой, высота коробки ≥ 30 мм):
|
||
|
||
```bash
|
||
.venv/bin/python calibrate.py --length 300 --width 200
|
||
```
|
||
|
||
Скрипт сам замерит высоту ленты и запишет `fx/fy` + `belt_distance_mm` в `config.yaml`.
|
||
|
||
## Фоновая карта глубины
|
||
|
||
Сегментация умеет работать относительно карты фона (а не одной высоты):
|
||
товар не сливается с платформой/бортами накопителя, а предмет, лежащий
|
||
на другом предмете, выделяется отдельно.
|
||
|
||
- `main.py`: `use_background_map: true` в конфиге — карта снимается при старте
|
||
(лента должна быть **пустой**);
|
||
- `demo.py`: кнопка **«Авто-высота»** снимает карту фона (уберите объекты);
|
||
ручное движение ползунка высоты сбрасывает карту.
|
||
|
||
## Демо
|
||
|
||
```bash
|
||
cd vision_classifier
|
||
./demo.sh
|
||
```
|
||
|
||
Браузер: **http://127.0.0.1:8080/** (Ctrl+F5 после перезапуска)
|
||
|
||
Ползунки сверху: высота ленты, уверенность, мин. высота, порог круга, площадь.
|
||
**Авто-высота** — калибровка по пустой ленте. Выход: `Ctrl+C`.
|
||
|
||
Проверка без камеры:
|
||
|
||
```bash
|
||
.venv/bin/python test_classify.py
|
||
.venv/bin/python test_geometry.py
|
||
```
|
||
|
||
**Полный запуск / стоп:** [START.md](START.md)
|
||
Боевой режим (MQTT + шаговик + серво): [INTEGRATION.md](INTEGRATION.md)
|