# Audion Traffic Counter

[English](README_EN.md) · [Руководство](USER_GUIDE_RU.md)

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

- [Зачем](#зачем)
- [Как устроено](#как-устроено)
- [Что внутри](#что-внутри)
- [Какие записи берёт](#какие-записи-берёт)
- [Запуск](#запуск)
- [Что ставится и что дают гигабайты](#что-ставится-и-что-дают-гигабайты)
- [С Claude и Codex](#с-claude-и-codex)
- [Чего программа не делает](#чего-программа-не-делает)
- [Из чего сделано](#из-чего-сделано)

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

## Зачем

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

Она рассчитана на то, что есть на деле: старые записи низкого разрешения с бытовых камер,
десятки и сотни файлов подряд.

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

- **Линия** проводится поперёк дороги и считает машины, которые пересекают её по стрелке.
  Стрелка стоит в середине линии и разворачивается одной кнопкой.
- **Ворота** — для перекрёстка и кольца: по ним программа сводит въезд и выезд одной машины
  в манёвр «откуда → куда».
- **Зона** увеличивает дальнюю часть кадра, где машины занимают несколько пикселей.
- У каждой записи расстановка своя. По записям ходят кнопками под видео; линии соседней
  записи копируются одной кнопкой.
- Каждый счёт сохраняется отдельным прогоном: прогоны разных моделей стоят в одной таблице,
  рядом с ручным счётом, если он есть.

## Что внутри

| Раздел | Что делает |
|---|---|
| ЗАПИСИ | Список видео: добавить файлы или папку, отметить, что считать. Файлы остаются на месте |
| КАМЕРА | Видео с линиями, воротами и зонами поверх него; переход по записям; FFplay с линиями |
| СЧЁТ | Модель (YOLO26N … YOLO26X), на чём считать, сколько записей разом, очередь, пробный прогон, ход счёта |
| ИТОГИ | История прогонов, таблица по манёврам и классам с общим числом машин, сравнение прогонов, сверка с ручным счётом и отчёт по всем записям файлами Word и Excel |
| ОБУЧЕНИЕ | Модель классов (легковые, грузовые, автобусы): одна идёт с программой и включена с самого начала, свою можно обучить под ваши камеры; и вырезки спорных машин, которым класс ставится одной кнопкой |
| УСТАНОВКА | Видеокарты машины и кнопка, которая ставит ровно то, чего ей не хватает |
| НАСТРОЙКИ | Как работает сама программа: скорость счёта (сколько записей разом, потоки, приоритет) и где хранится файл проекта с линиями записей |

## Какие записи берёт

Файлы `.avi`, `.mp4`, `.mov`, `.mkv`, `.mts`, `.m2ts`, `.mpg`, `.wmv`, `.ts`, `.webm` с
обычными кодеками: H.264, H.265, AV1, MJPEG, MPEG-2, MPEG-4. Файлы с другими расширениями в
список не попадают. Проверена программа на записи MJPEG AVI 640×480, AV1 — на коротком
пробном ролике; остальные форматы читают те же библиотеки, но на записях они не испытаны. Чересстрочную запись (DV 720×576)
перед счётом нужно перевести в прогрессивную.

## Запуск

Запустите `Start.exe`, откройте раздел УСТАНОВКА и нажмите **УСТАНОВИТЬ НУЖНОЕ**: программа
скажет, что скачает под вашу машину, и спросит, потом поставит свой Python, PyTorch под вашу
видеокарту, TensorRT для видеокарты RTX, библиотеку распознавания и FFmpeg в свою папку. В
Windows ставится одно: Microsoft Visual C++ Redistributable, который нужен PyTorch, — если
его там нет. Дальше — по [руководству](USER_GUIDE_RU.md).

Основной путь счёта — видеокарта NVIDIA серии RTX через TensorRT: получасовая запись 640×480
на RTX 5070 считается около пяти минут. Видеокарта NVIDIA GTX считает через PyTorch (CUDA),
в несколько раз медленнее. Без NVIDIA программа считает через DirectML на любой видеокарте с
DirectX 12, ещё медленнее.

## Что ставится и что дают гигабайты

Любой машине ставятся свой Python, библиотека распознавания, веса модели (20 МБ) и FFmpeg
(около 0,7 ГБ). Остальное — по видеокарте:

| | Без видеокарты NVIDIA | NVIDIA GTX | NVIDIA RTX |
|---|---|---|---|
| Как считает | DirectML, на любой видеокарте с DirectX 12 | PyTorch с CUDA | TensorRT поверх PyTorch с CUDA |
| Что ставится под неё | PyTorch для процессора и DirectML | PyTorch с CUDA, около 3 ГБ скачивания | PyTorch с CUDA и TensorRT, по 3 ГБ скачивания |
| Место на диске | около 5 ГБ | не измерялось | около 15 ГБ на время установки, 11,5 ГБ после неё |
| Получасовая запись 640×480 | около полутора часов | 24 минуты (см. ниже) | 5 минут |
| Очередь | записи по одной | — | четыре записи разом: двести получасовых записей — около 12 часов |
| Обучение модели типов автомобилей, 25 эпох на 3500 вырезках | полчаса | не измерялось | 5,6 минуты |

Времена — автора. Столбец без NVIDIA — ноутбук со встроенной графикой Intel (счёт) и его
процессор (обучение); столбец RTX — RTX 5070. На видеокарте GTX программа не запускалась:
24 минуты в её столбце — тот же путь счёта, PyTorch с CUDA без TensorRT, измеренный на RTX 5070; карта GTX
слабее и считает дольше. Видеокарта NVIDIA старше GTX 10-й серии считается как её отсутствие:
эта сборка PyTorch на ней не считает, счёт идёт через DirectML.

**Откуда размер.** На машине с RTX из 11,5 ГБ: PyTorch с CUDA — 7 ГБ (в нём библиотеки NVIDIA
для вычислений на видеокарте), TensorRT — 3,3 ГБ, FFmpeg — 0,7 ГБ, остальное — Python,
библиотека распознавания и модели. Без видеокарты NVIDIA вместо первых двух ставится PyTorch
для процессора, около 3 ГБ. Скачанные установочные файлы — ещё около 3,5 ГБ на машине с RTX —
после установки удаляются.

**Для чего.** TensorRT собирает модель в один движок под вашу видеокарту — при первом счёте
каждой модели около минуты — и считает в 4,7 раза быстрее, чем PyTorch с CUDA на той же карте:
140 кадров в секунду против 30. Числа счёта от пути почти не зависят: между TensorRT, CUDA и
DirectML они расходятся на единицы автомобилей.

## С Claude и Codex

С программой можно работать вместе с ИИ-агентом — Claude Code или Codex. Руководство для
агента — [`Docs\AI_AGENT_GUIDE_RU.md`](AI_AGENT_GUIDE_RU.md). Откройте папку программы в
агенте, попросите прочитать его — и он расставит линии по кадрам записей, посчитает запись,
разложит спорные машины на листы и обучит модель классов под ваши ракурсы: нарежет вырезки,
разметит их, обучит и проверит на машинах, которых модель не видела. Как это устроено и что
агент при этом видит — в [руководстве](USER_GUIDE_RU.md#работа-с-claude-и-codex).

## Чего программа не делает

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

Точность зависит от размера машины в кадре: вблизи камеры счёт сходится с ручным в пределах
одного-двух процентов, вдали часть машин теряется, совсем мелкие не видны вовсе. Легковые
отделяются от остальных точно, автобусы и грузовые — приблизительно.

## Из чего сделано

Окно — C# на Avalonia 12 (.NET 10). Движок счёта — Python: Ultralytics YOLO и трекер
ByteTrack, PyTorch, TensorRT, ONNX Runtime с DirectML, OpenCV; видео читает FFmpeg. Значки — Lucide,
шрифты — JetBrains Mono и Inter. Сторонние программы и библиотеки скачиваются по вашей
кнопке и остаются под своими лицензиями.

На снимке окна — кадр свободного видео, а не запись заказчика: «Motorway A40: on bridge
above the traffic», автор Kathinka Engels (Sounds of Changes), Wikimedia Commons, лицензия
CC BY 3.0.
