Простой счётчик людей по пересечению линии на видео или RTSP-потоке.
Проект запускает YOLO-модель, отслеживает людей трекером и считает, кто пересёк заданную линию в направлениях in и out.
- детектирует людей (класс
person) на кадрах; - отслеживает объекты между кадрами;
- считает пересечения линии в обе стороны;
- сохраняет события в
jsonlфайл по дням; - сохраняет последние кадры (оригинал и с разметкой).
linecount.py— основной запуск и логика подсчёта;config.json.example— пример конфигурации;config.json— ваш рабочий файл конфигурации;models/— папка с весами YOLO;outputs/— результаты работы.
- Python 3.10+;
- установленный
ffmpegв системе; - CUDA (опционально; рекомендуется для
torchизrequirements.txt).
- Клонируйте репозиторий:
git clone https://github.com/fibit/yolo-linecount
cd yolo-linecount- Создайте и активируйте виртуальное окружение:
python -m venv .venv
.venv\Scripts\activate- Установите зависимости:
pip install -r requirements.txt- Поместите файл модели в папку
models/(например,models/yolo26n.pt).
Скопируйте пример:
copy config.json.example config.jsonПараметры конфигурации:
model— имя файла модели внутриmodels/(например,yolo26n.pt);source— источник видео:- RTSP/HTTP URL (
rtsp://...,http://...); - путь к видеофайлу;
- индекс камеры (например,
0);
- RTSP/HTTP URL (
resize— размер кадра для инференса (например,320);line_start— стартовая точка линии[x, y];line_end— конечная точка линии[x, y];output— имя подпапки вoutputs/, куда сохраняются результаты.
python linecount.py --config config.jsonYYYY-MM-DD.jsonl— события пересечения линии, по одному JSON-объекту в строке;last_original.jpg/last_annotated.jpg— периодические кадры;last_original_in.jpg/last_annotated_in.jpg— последний кадр при входе;last_original_out.jpg/last_annotated_out.jpg— последний кадр при выходе.
Пример строки события:
{"timestamp":"2026-04-23T12:00:00.123","direction":"in","track_id":7}