Files
ozone-tech_owl_prime/vision_classifier/README.md
2026-08-03 01:26:42 +07:00

62 lines
3.2 KiB
Markdown
Raw 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.
# 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)