# Audion Traffic Counter — руководство пользователя

**Содержание**

- [Что нужно](#что-нужно)
- [Запуск и установка](#запуск-и-установка)
- [Как устроено окно](#как-устроено-окно)
- [ЗАПИСИ](#записи)
- [КАМЕРА: линии, ворота, зоны](#камера-линии-ворота-зоны)
- [СЧЁТ](#счёт)
- [ИТОГИ](#итоги)
- [ОБУЧЕНИЕ](#обучение)
- [Работа с Claude и Codex](#работа-с-claude-и-codex)
- [НАСТРОЙКИ](#настройки)
- [Клавиши](#клавиши)
- [Чего ждать от точности](#чего-ждать-от-точности)
- [Где что лежит](#где-что-лежит)
- [Что программа делает в сети и на машине](#что-программа-делает-в-сети-и-на-машине)
- [Если что-то не так](#если-что-то-не-так)

Программа считает машины по записям обычных камер: сколько легковых, автобусов, грузовых и
мотоциклов сделали каждый манёвр. На кадре проводятся линии счёта, запись ставится в
очередь, результат — таблица по манёврам и классам и файл событий по каждой машине.

Счёт идёт на вашей машине. Записи никуда не отправляются.

## Что нужно

- Windows 10 или 11, 64 бита.
- Видеокарта NVIDIA серии RTX, драйвер 570 или новее, — основной путь счёта: через TensorRT
  получасовая запись 640×480 на RTX 5070 считается около пяти минут. Видеокарта NVIDIA GTX
  считает через PyTorch, в несколько раз медленнее. Без NVIDIA программа считает через
  DirectML на любой видеокарте с DirectX 12 (Intel, AMD): на встроенной графике Intel
  получасовая запись считается около полутора часов.
- Интернет на время установки и место на диске: около 5 ГБ на машине без NVIDIA; на машине с
  RTX — около 15 ГБ (PyTorch и TensorRT скачиваются по 3 ГБ каждый).

## Запуск и установка

Распакуйте папку программы куда угодно и запустите `Start.exe`. Программа переносная: всё
своё она держит в этой папке. В Windows ставится одно: Microsoft Visual C++ Redistributable,
который нужен PyTorch, — и только если его там нет. Список записей, линии и итоги счёта
можно держать отдельно от программы — в рабочей папке, см. «НАСТРОЙКИ».

При первом запуске движка счёта ещё нет: окно само открывает раздел **УСТАНОВКА** и
спрашивает, ставить ли его. В вопросе сказано, что без движка программа не считает, сколько
придёт под эту машину (около 15 ГБ на диске с видеокартой RTX, около 5 ГБ без видеокарты
NVIDIA) и что будет поставлено в Windows. Ничего не скачивается, пока вы не ответите
**СКАЧАТЬ И УСТАНОВИТЬ**; после отказа тот же вопрос задаёт кнопка **УСТАНОВИТЬ НУЖНОЕ**:

1. Карточка **ЭТА МАШИНА** показывает видеокарты и что из них следует.
2. Нажмите **УСТАНОВИТЬ НУЖНОЕ** и подтвердите. Зелёным отмечено ровно то, чего не хватает
   этой машине: свой Python, PyTorch под вашу видеокарту, TensorRT для видеокарты RTX,
   библиотека распознавания, FFmpeg. Перед ними программа смотрит, есть ли в Windows
   Microsoft Visual C++ Redistributable, и, если нет, ставит его через winget — Windows
   спросит разрешение администратора.
3. Ход установки виден в журнале (кнопка **ЖУРНАЛ** внизу справа). Установку можно
   остановить кнопкой СТОП и запустить заново.
4. Когда всё установлено, программа сама удаляет скачанные установочные файлы: на машине с
   видеокартой RTX папка программы занимает после этого около 11,5 ГБ.

Установленную папку можно целиком перенести на другую машину с видеокартой NVIDIA: заново
ставить ничего не нужно. На другой видеокарте первый счёт начнётся на полминуты позже —
программа собирает ускоренный движок под эту карту. На машине без видеокарты NVIDIA
откройте раздел УСТАНОВКА: он покажет зелёным, чего ей не хватает.

Остальные кнопки раздела — для починки одной части. TENSORRT — ускоренный счёт на видеокарте
RTX: на машине с такой картой он ставится вместе с окружением. DIRECTML и OPENVINO —
запасные пути счёта; OPENVINO ставить только в крайнем случае: он наименее надёжен для
очереди из многих записей.

В разделе УСТАНОВКА — только то, что ставится для движка счёта. Как работает сама
программа, выбирается в разделе **НАСТРОЙКИ**.

Если драйвер NVIDIA слишком старый, раздел скажет об этом и попросит обновить драйвер.

### Файл проекта

Линии каждой записи программа хранит у себя и вторым экземпляром — в файле проекта
`audion-traffic-counter.json`. По умолчанию он лежит в папке самих видео. Запись узнаётся в
нём по отпечатку файла, а не по имени, поэтому расстановка возвращается сама: перенесли
папку с записями на другую машину, переустановили программу, добавили запись заново — линии
на месте.

Карточка **ФАЙЛ ПРОЕКТА** в разделе НАСТРОЙКИ выбирает место: **РЯДОМ С ЗАПИСЯМИ** или
**В ПАПКЕ ПОЛЬЗОВАТЕЛЯ** — один файл на все записи в выбранной папке. Второе — для записей,
которые лежат на диске только для чтения или в чужой папке.

## Как устроено окно

- **Вверху** — пять разделов работы по порядку: ЗАПИСИ, КАМЕРА, СЧЁТ, ИТОГИ, ОБУЧЕНИЕ. Под
  названием каждого — его состояние: сколько записей, сколько из них без линий, что в
  очереди, чем называются классы.
- **Внизу слева** — УСТАНОВКА, НАСТРОЙКИ и О ПРОГРАММЕ; **внизу справа** — кнопка
  **СЧИТАТЬ**, которая на время счёта становится кнопкой СТОП. УСТАНОВКА — то, что ставится
  для движка счёта (Python, PyTorch, модель, FFmpeg); НАСТРОЙКИ — то, как работает сама
  программа.
- Справа вверху — язык (RU | EN), тёмная и светлая тема, размер шрифта.
- У каждой кнопки и поля есть подробная подсказка: задержите на них мышь.

## ЗАПИСИ

**ДОБАВИТЬ ФАЙЛЫ…** и **ДОБАВИТЬ ПАПКУ…** вносят видео в список. Сами файлы остаются там,
где лежат: программа запоминает путь и ничего не копирует.

В список попадают файлы `.avi`, `.mp4`, `.mov`, `.mkv`, `.mts`, `.m2ts`, `.mpg`, `.wmv`,
`.ts`, `.webm`; файлы с другими расширениями кнопка ДОБАВИТЬ ПАПКУ пропускает. Кодеки —
обычные: H.264, H.265, AV1, MJPEG, MPEG-2, MPEG-4. Если запись редкого формата видна в разделе
КАМЕРА, а счёт на ней «не удался», значит движок счёта её не прочитал: перекодируйте её в
MP4 (H.264). Чересстрочную запись (DV 720×576) перед счётом переведите в прогрессивную.

В строке записи видно: размер кадра и длительность, расставлены ли линии, сколько раз она
посчитана. Отметка слева берёт запись в очередь счёта. Щелчок по строке выбирает запись для
разделов КАМЕРА и ИТОГИ.

Новая запись приходит без линий.

## КАМЕРА: линии, ворота, зоны

Слева — видео выбранной записи, справа — её расстановка. У каждой записи расстановка своя:
правка на одной записи не меняет другие.

### Линия

Возьмите инструмент **ЛИНИЯ**, нажмите на кадре и протяните линию поперёк дороги.

- Линия считает машины, которые пересекают её **по стрелке**. Стрелка стоит в середине
  линии. Её направление задаёт движение мыши: провели снизу вверх — считаются едущие вправо,
  сверху вниз — влево, справа налево — от камеры, слева направо — на камеру.
- Развернуть стрелку можно двумя кнопками-стрелками в строке линии справа.
- В поле **Манёвр** впишите имя, под которым эти машины попадут в итоги.
- Поле **Встречные** обычно пустое. Если вписать имя, та же линия посчитает и встречный
  поток — отдельным числом.
- Кнопка **КОНТРОЛЬНАЯ** — для линии, которая считает поток, посчитанный дальше другими
  линиями: например, весь поток до развилки, за которой стоят линии каждого съезда. Числа
  такой линии видны в итогах, но в строку ИТОГО не входят, иначе одни и те же машины
  посчитались бы дважды.

Ставьте линию там, где машины крупные и не закрывают друг друга: не на стоп-линии, не за
столбом и не у самого края кадра. Машина считается один раз за проезд.

### Ворота

Ворота нужны на перекрёстке и на кольце, когда важно, **откуда и куда** поехала машина.
Инструментом **ВОРОТА** проведите линию поперёк каждой ветки — через её въездные и выездные
полосы сразу — и назовите ветку. По воротам программа сводит въезд и выезд одной машины в
манёвр «А → Б»: налево, прямо, направо, разворот.

На прямой дороге ворота не нужны — хватит линий.

### Зона

Машины вдали занимают несколько пикселей, и программа их пропускает. Инструментом **ЗОНА**
обведите дальнюю часть кадра и выберите увеличение ×2 или ×3: зона считается отдельно, в
увеличенном виде. Линию, которая лежит в зоне, отнесите к ней (переключатель «Зона» в
строке линии). Увеличение замедляет счёт.

### Правка и переход по записям

- Инструмент **УКАЗАТЕЛЬ**: конец линии тянется, сама линия переносится за середину, зона —
  за угол или край. Delete убирает выбранное.
- Под видео: предыдущая запись, кадр назад, пуск, кадр вперёд, следующая запись. Переход к
  соседней записи сам сохраняет правки; закрытие программы и запуск счёта — тоже.
- **КАК У ПРЕДЫДУЩЕЙ** копирует линии, ворота и зоны с записи выше по списку. Удобно для
  записей одной съёмки с одной точки: скопировать и, если кадр сдвинулся, подвинуть концы.
- **ВИДЕО В FFPLAY** открывает запись в отдельном крупном окне с нарисованными линиями.

Так проходятся все записи подряд: провели линии, перешли к следующей.

## СЧЁТ

Вверху слева — **ХОД СЧЁТА**: сколько машин насчитано к этому моменту, скорость и сколько
осталось. Когда записи считаются по нескольку разом, у каждой свой ряд чисел. Справа —
**ЭТА МАШИНА** и **КАК СЧИТАТЬ**, ниже — **ОЧЕРЕДЬ**; длинная очередь прокручивается сама,
остальное стоит на месте.

**ЭТА МАШИНА** — на чём идёт счёт: процессор, память, видеокарта, её драйвер, Windows. Плитка
**ДВИЖОК** показывает, чем считает программа: пока счёт не идёт — выбранное в «Считать на»
(АВТО), во время счёта — то, на чём запись считается на самом деле, например TensorRT.

Карточка **КАК СЧИТАТЬ**:

- **Модель** — от YOLO26N (самая быстрая) до YOLO26X (самая точная и медленная). Крупная
  модель лучше видит дальние и частично закрытые машины. Веса скачиваются сами при первом
  счёте.
- **Считать на** — АВТО выбирает сам: видеокарта NVIDIA (TensorRT, если он установлен, иначе
  CUDA), иначе DirectML. Чего на машине нет, приглушено.

Сколько записей считать разом, потоки и приоритет счёта — в разделе НАСТРОЙКИ.

**ПРОБНЫЙ ПРОГОН** считает первую минуту выбранной записи и сохраняет кадры с рамками и
линиями. Посмотрите их до счёта на часы: рамки должны стоять на машинах, линии — поперёк
потоков.

**СЧИТАТЬ** считает по порядку все отмеченные записи — на видеокарте NVIDIA по нескольку
разом, и тогда в карточке **ХОД СЧЁТА** у каждой записи свой ряд чисел. Очередь можно
оставить на ночь:

- запись без линий пропускается;
- запись, на которой счёт не удался, тоже — остальные считаются;
- запись, которая обрывается (файл повреждён или обрезан), посчитанной не считается: счёт на
  ней «не удался», причина — в журнале. Если до конца не хватило не больше секунды (или одного процента записи), прогон
  остаётся и в ИТОГАХ помечен как прочитанный не до конца;
- отметки в разделе ЗАПИСИ можно менять и во время счёта: запись, до которой очередь ещё не
  дошла, выйдет из неё или войдёт в неё;
- пока идёт счёт, компьютер сам не уснёт (закрытая крышка ноутбука усыпить его может);
- по окончании нижняя строка говорит, сколько посчитано, пропущено и не удалось.

## ИТОГИ

Каждый счёт записи сохраняется отдельным **прогоном** и не затирает прежние.

- **ПРОГОНЫ** — список: когда, какой моделью, на чём, за сколько, сколько машин.
- **ИТОГИ ПРОГОНА** — таблица выбранного прогона: манёвр по строкам, классы по столбцам;
  ниже — манёвры через ворота. Последняя строка, **ИТОГО**, — общее число машин записи:
  сумма по всем манёврам для каждого класса и всех вместе, как столбец «Итого» в ведомости.
  Контрольные линии в неё не входят, у ворот считается только въезд.
- **СРАВНЕНИЕ ПРОГОНОВ** — прогоны столбцами рядом: видно, что сдвинулось от смены модели
  или линий. Последняя строка — ИТОГО каждого прогона.

Во время счёта общее число машин видно в карточке **ХОД СЧЁТА** раздела СЧЁТ — плитка
**ВСЕГО** перед плитками манёвров.

У прогона, посчитанного более ранней версией программы, строки ИТОГО нет: посчитайте запись
заново.
- **ТАБЛИЦА СОБЫТИЙ** открывает файл, где каждая строка — один проезд: кадр, время, манёвр,
  класс, линия. **ПАПКА ПРОГОНА** открывает папку с файлами.

### Отчёт: файлы Word и Excel

Карточка **ОТЧЁТ** вверху раздела выгружает результат в папку, которую вы назовёте:

- **ОТЧЁТ ПО ВСЕМ ЗАПИСЯМ** — по всем посчитанным записям, по последнему прогону каждой;
- **ОТЧЁТ ПО ЭТОМУ ПРОГОНУ** — по одной записи, по прогону, выбранному в списке;
- **ПАПКА ОТЧЁТОВ** — открывает папку последнего отчёта.

Файлов два, оба написаны для инженера-транспортника. **Документ Word** начинается с главных
чисел (сколько записей, автомобилей, легковых, автобусов, грузовых) и сводной таблицы с
интенсивностью в авт/ч; дальше каждая запись на своей странице: число автомобилей,
интенсивность и состав потока в процентах, кадр с сечениями учёта и номерами направлений,
таблица по направлениям, итог. **Ведомость Excel** — те же числа таблицей: лист «Сводная»
(по направлениям, с интенсивностью и составом потока), лист «По 15 минут» (интенсивность по
интервалам от начала записи, с фильтром), лист «Записи» и лист «Служебное» — чем и когда
обработана каждая запись, для того, кто обслуживает программу. Интенсивность — число за
запись, приведённое к часу: запись в 15 минут умножается на четыре. Коэффициентов приведения
к легковому автомобилю в отчёте нет. Имя файла содержит дату и время, поэтому новый отчёт не
затирает прежний.

Запись, числам которой нельзя доверять без проверки, помечена словом **«проверить»**, и
причина написана рядом:

- запись прочитана не до конца — числа только по прочитанной части;
- классы сомнительны — модель классов переназвала слишком много машин, которые детектор
  считал легковыми. Так бывает на камере, непохожей на те, на которых модель училась. Общее
  число машин при этом верно, а делению на легковые, автобусы и грузовые на такой записи
  доверять нельзя.

Если записи считали вручную (см. ниже), в отчёт попадает и сверка с ручным счётом.

### Сверка с ручным счётом

Если запись когда-то считали вручную, программа покажет разницу в процентах рядом с каждым
числом. Для этого положите файл `reference\<имя записи>\<имя записи>.json`, где имя записи —
имя её файла без расширения (для `DSCN0002.AVI` это `reference\DSCN0002\DSCN0002.json`):

```json
{
  "engine_classes": { "car": [0], "bus": [1], "truck": [2, 3] },
  "counts": {
    "N1": [120, 4, 9, 2],
    "N2": [87, 2, 5, 0]
  }
}
```

В `counts` — строка чисел на каждый манёвр, в порядке столбцов вашей ведомости.
`engine_classes` говорит, какие столбцы складываются в классы программы: `car`, `bus`,
`truck`.

## ОБУЧЕНИЕ

Классы машин — легковые, грузовые, автобусы — детектор путает: маршрутку называет то
автобусом, то грузовой, длинный грузовик — автобусом. Раздел ОБУЧЕНИЕ уточняет их.

Карточка **МОДЕЛЬ КЛАССОВ** — чем называть классы при счёте:

- **АВТО** (так стоит с самого начала) — модель классов по умолчанию. Она идёт вместе с
  программой (`system_core\kinds`): ставить и обучать для неё ничего не нужно. Какая модель
  считается моделью по умолчанию, записано в файле `config\classes_default.json`; если её
  файла вдруг нет, классы называет детектор, и подсказка на кнопке говорит об этом;
- **ДЕТЕКТОР** — как раньше, класс по рамкам детектора;
- **модель классов** (та, что идёт с программой, и ваши собственные — файлы
  `models\classes\*.pt`) — при счёте программа сохраняет по три вырезки каждой посчитанной
  машины, и модель называет класс по ним. Что детектор назвал легковой, остаётся легковой,
  пока модель не уверена на 90 %, что это автобус; грузовой легковая детектора не становится
  никогда. То, что детектор назвал грузовой или автобусом, называет модель. Мотоцикл остаётся
  тем, чем его назвал детектор.

Выбор действует на следующий счёт. Вырезки занимают около 50 МБ на получасовую запись и
лежат в папке прогона.

Карточка **МАШИНЫ ПРОГОНА** — вырезки машин выбранного прогона:

- **СПОРНЫЕ** — машины, о которых детектор и модель разошлись, или те, в которых модель не
  уверена; на получасовую запись их обычно несколько десятков — пара сотен;
- **ОТМЕЧЕННЫЕ** — те, которым класс уже поставлен вручную;
- **НЕ ЛЕГКОВЫЕ** — все, кого детектор или итог прогона называют не легковой.

Кнопка под машиной — ЛЕГКОВАЯ, ГРУЗОВАЯ, АВТОБУС, НЕ МАШИНА — ставит её класс. Отметка сразу
исправляет итоги прогона в разделе ИТОГИ; класс детектора и класс модели остаются рядом с
ней в таблице событий (`events.csv`: `detector_class`, `classifier_class`,
`classifier_share`, `mark`), отметки лежат в `review.csv` папки прогона. НЕ МАШИНА убирает
машину из итогов: две машины в одной рамке, не машина трёх классов.

Как размечать: маршрутка — микроавтобус с окнами по всему борту — это **автобус**, как в
ведомостях учётчиков; «Газель» без окон по борту, фургон, бортовая — **грузовая**; минивэн,
«буханка», скорая, пикап — **легковая**.

Отметки — это и примеры для обучения модели классов под ваши камеры. Модель учится командами
движка (проще всего — руками агента, см. «Работа с Claude и Codex») и появляется новым файлом
в `models\classes`, в карточке МОДЕЛЬ КЛАССОВ рядом с прежними. Кнопки обучения в окне нет.

## Работа с Claude и Codex

Программа сделана так, чтобы с ней можно было работать вместе с ИИ-агентом — Claude Code
или Codex, — как работали её авторы. Руководство для агента —
[`Docs\AI_AGENT_GUIDE_RU.md`](AI_AGENT_GUIDE_RU.md) (английское —
[`AI_AGENT_GUIDE_EN.md`](AI_AGENT_GUIDE_EN.md)): команды движка, форматы файлов, порядок
работы и то, что уже измерено.

**Как начать.** Установите программу (УСТАНОВКА, УСТАНОВИТЬ НУЖНОЕ), откройте её папку в
Claude Code или Codex и первым сообщением попросите прочитать `Docs\AI_AGENT_GUIDE_RU.md`.
Дальше говорите обычными словами:

- «Расставь линии по кадрам для всех записей из списка, я проверю картинки» — агент берёт по
  кадру из середины каждой записи, проводит линии и ворота и показывает их на кадре;
- «Посчитай запись DSCN0002 и сравни с ручным счётом»;
- «Почему автобусов меньше, чем в ведомости? Разложи большие машины линии N10 на листы» —
  агент покажет вырезки, и спор решается глазами;
- «Обучи классы под мои камеры: записи в D:\Video, проверка — на другом дне».

**Обучение классов с агентом** идёт так:

1. агент нарезает вырезки всех машин части записи (команда `harvest`) или берёт их из
   прогона, посчитанного с моделью классов;
2. раскладывает их на листы по 48 (`sheets`) — сначала всё, что детектор назвал автобусом
   или грузовой, потом выборку легковых;
3. смотрит листы и ставит каждой машине букву класса (`labels`) — покажите ему, как у вас
   считают маршрутки и «Газели», и посмотрите пару его листов;
4. учит модель (`teach`) — полчаса на процессоре ноутбука, минуты на видеокарте NVIDIA;
5. проверяет её на машинах, которых она не видела (`check-classes`), и говорит, на сколько
   процентов по каждому классу расходится счёт;
6. вы выбираете модель в разделе ОБУЧЕНИЕ, и следующий счёт идёт с ней.

Главное, что мы узнали: решает не длина обучения, а примеры с камер того же вида и
правильная граница классов. Двести размеченных машин своей камеры дают больше, чем тысячи
чужих. Подробно — в руководстве для агента, раздел «Обучение классов под камеры
пользователя».

**О записях.** Агент работает на вашей машине, и сами записи никуда не уходят. Но то, что
агент рассматривает — кадр для расстановки линий, листы вырезок для разметки, — уходит в
сервис, на котором он работает (Anthropic у Claude, OpenAI у Codex). Если записи нельзя
показывать посторонним, размечайте сами: кнопками раздела ОБУЧЕНИЕ или буквами в файлах
рядом с листами — агенту хватит команд, на картинки ему смотреть не нужно.

Счёт очереди записей агент сам не запускает: это кнопка СЧИТАТЬ.

## НАСТРОЙКИ

Как работает сама программа (кнопка внизу слева, между УСТАНОВКОЙ и О ПРОГРАММЕ).

Карточка **СКОРОСТЬ СЧЁТА** — на числа счёта эти настройки не влияют, только на время:

- **Записей разом** — сколько записей очереди считаются одновременно на видеокарте NVIDIA,
  по умолчанию четыре. Когда одна досчитана, её место занимает следующая. На машине без
  видеокарты NVIDIA записи считаются по одной.
- **Потоки** — сколько потоков считают моделью внутри одной записи; 0 — программа выбирает
  сама.
- **Приоритет** — ФОНОВЫЙ оставляет компьютер пригодным для работы на время счёта.

В НАСТРОЙКАХ есть поле для каждого рода данных: записи, рабочая папка, отчёты, файл проекта,
данные обучения. Записи и отчёты воспроизводимы — записи можно скопировать заново, отчёт
выгрузить ещё раз; то, чему программа обучена (модель классов), лежит в самой программе.

Карточка **ЗАПИСИ** — папка, в которой лежат видеозаписи. Программа их только читает. С этой
папки открывается выбор файлов в разделе ЗАПИСИ. Если записи перенесли на другой диск или
скопировали заново, выберите здесь новую папку: записи списка, которых нет на прежнем месте,
программа найдёт в ней и в её подпапках по имени и отпечатку файла, и линии с итогами
останутся при них. То же она делает при каждом запуске.

Карточка **ОТЧЁТЫ** — папка, в которую выгружаются отчёты Word и Excel; кнопки отчёта в
разделе ИТОГИ открывают выбор папки на этом месте.

Карточка **РАБОЧАЯ ПАПКА** — где лежит то, что программа пишет о ваших записях: список
записей, линии и ворота, итоги счёта, ведомости ручного счёта для сверки, журнал.
**В ПАПКЕ ПРОГРАММЫ** (по умолчанию) — всё это в папке самой программы. **В ПАПКЕ
ПОЛЬЗОВАТЕЛЯ** — в выбранной папке, а в папке программы остаётся только программа и её
настройки: её можно копировать на другую машину, чистить и передавать, не унося с собой
списки, линии и итоги. Раскладка в рабочей папке та же, что в программе: `config\recordings.json`,
`config\cameras\`, `output\`, `reference\`, `logs\`. Выбор папки ничего не переносит: чтобы
взять прежнюю работу с собой, закройте программу и перенесите эти папки и файл списка в
новую рабочую папку. Папка меняется без перезапуска; во время счёта сменить её нельзя.

Карточка **ФАЙЛ ПРОЕКТА** — где хранится вторая копия линий записей (см. «Файл проекта»).

Карточка **ДАННЫЕ ОБУЧЕНИЯ** — где лежат вырезки машин, листы, метки и наборы для обучения
модели классов: **РЯДОМ С ЗАПИСЯМИ** (папка `classes` рядом с видео — по умолчанию, данные
переезжают вместе с записями) или **В ПАПКЕ ПОЛЬЗОВАТЕЛЯ**. Программа их не стирает, и в
публикацию программы они не попадают.

## Клавиши

| Клавиши | Что делают |
|---|---|
| Ctrl+1 … Ctrl+8 | разделы по порядку |
| Ctrl+J | журнал |
| F1 | это руководство |
| Esc | из УСТАНОВКИ, НАСТРОЕК и О ПРОГРАММЕ — назад; в КАМЕРЕ — вернуть указатель |
| Пробел | КАМЕРА: пустить или остановить видео |
| ← → | КАМЕРА: кадр назад и вперёд |
| Page Up, Page Down | КАМЕРА: предыдущая и следующая запись |
| Delete | КАМЕРА: убрать выбранную линию или зону |

## Чего ждать от точности

- Вблизи камеры, где машины крупные, счёт сходится с ручным в пределах одного-двух процентов
  (на проверочной записи — +0,8 % и −0,1 % на двух линиях у камеры).
- Вдали, где машина — несколько пикселей, часть машин теряется. Помогают зона с увеличением
  и модель крупнее; совсем мелкие съезды на записи низкого разрешения программа не видит.
- Классы — легковой, автобус, грузовой, мотоцикл. Легковые считаются точно. Автобусы и
  грузовые одним детектором — приблизительно (на проверочной записи у одной линии автобусов
  −53 %, грузовых +39 %); с моделью классов, обученной на камере того же типа, — в пределах
  нескольких процентов (там же +6 % и +4 %; см. раздел ОБУЧЕНИЕ). Грузовые по числу осей не
  делятся.
- Номера машин программа не читает.
- На разных путях счёта (TensorRT, CUDA, DirectML) числа различаются на единицы машин.
  Сравнивайте прогоны, сделанные на одном и том же.

## Где что лежит

| Папка | Что в ней |
|---|---|
| `App\`, `Start.exe` | окно программы |
| `runtime\`, `models\`, `Tools\` | Python с библиотеками, веса моделей, FFmpeg — ставятся разделом УСТАНОВКА |
| `models\classes\` | ваши собственные модели классов для раздела ОБУЧЕНИЕ |
| `system_core\kinds\` | модель классов, которая идёт с программой |
| `classes\` рядом с видео | данные обучения: вырезки, листы, метки, наборы и копии моделей (или папка, выбранная в НАСТРОЙКАХ) |
| `config\settings.json` | настройки программы — всегда в её папке |
| рабочая папка | список записей, линии, итоги, ручные счёты и журнал — четыре строки ниже. Это папка программы, пока в НАСТРОЙКАХ не выбрана другая |
| `config\recordings.json`, `config\cameras\` | список записей и расстановки линий, по файлу на запись |
| `output\<запись>\<дата-время>_<модель>\` | прогон: `events.csv`, `summary.json`, линии, с которыми считали; с моделью классов — `crops\` (вырезки машин) и `review.csv` (отметки) |
| `reference\` | ручные счёты для сверки |
| `audion-traffic-counter.json` в папке видео | файл проекта: вторая копия линий, рядом с записями |
| `logs\` | журнал, по файлу на день |

## Что программа делает в сети и на машине

Ничего не собирает и не отправляет. В сеть выходит только при установке и при первом счёте
новой моделью — скачать Python (python.org), библиотеки (PyPI, pytorch.org), веса модели
(GitHub), FFmpeg (gyan.dev, GitHub) и 7-Zip для его распаковки (7-zip.org).

В систему ничего не ставит: ни служб, ни заданий планировщика, ни записей в реестре. Чтобы
удалить программу, удалите её папку.

## Если что-то не так

| Что видно | Что делать |
|---|---|
| «Движок счёта не установлен» | раздел УСТАНОВКА, кнопка УСТАНОВИТЬ НУЖНОЕ |
| «FFmpeg не найден», в КАМЕРЕ нет видео | раздел УСТАНОВКА, кнопка FFMPEG |
| раздел УСТАНОВКА просит обновить драйвер NVIDIA | обновите драйвер и нажмите ПРОВЕРИТЬ СНОВА |
| у записи «линий нет», в очереди «будет пропущена» | проведите линии в разделе КАМЕРА |
| линия ничего не считает | стрелка смотрит не в ту сторону: разверните её кнопкой-стрелкой в строке линии |
| дальняя линия считает намного меньше, чем есть | обведите зону с увеличением, возьмите модель крупнее |
| «правки линий не сохранены … — запись не посчитана» | у записи есть линия без имени манёвра или не осталось ни одной линии: поправьте в разделе КАМЕРА и посчитайте её снова |
| «счёт не удался» у одной записи | файл не читается как видео, обрывается раньше конца или кадр другого размера, чем у её линий; подробности в журнале |
| «движок молчал … — остановлен» | движок завис; очередь пошла дальше. Посчитайте эту запись ещё раз; если повторяется — выберите в разделе СЧЁТ другой путь счёта |
| счёт идёт медленно | счёт на DirectML или на процессоре: посмотрите строку «Считать на» в разделе СЧЁТ |
