example_ROI_detection

0
22 дня назад
22 дня назад
22 дня назад
22 дня назад
README.md

Прототип системы детекции уборки столиков по видео

Упрощенный рабочий прототип для одного видео и одного выбранного столика (ROI).

Требования и установка

  1. Убедись, что установлен Python 3.8+
  2. Установи зависимости:

Запуск

При запуске:

  1. На первом кадре появится окно выбора ROI (
    cv2.selectROI
    ) — выдели один четко видимый столик.
  2. Далее скрипт обработает видео, запишет результат в
    output.mp4
    и посчитает аналитику.

Какой столик выбран

  • Видео:
    video1.mp4
  • Столик: тот, который ты выделил(а) мышкой в окне ROI на первом кадре.
  • Координаты ROI будут напечатаны в консоль в формате
    ROI выбран: (x, y, w, h)
    — при необходимости вставь их в этот README.

Логика детекции событий

Детекция людей выполняется YOLOv8n (

ultralytics
) класса
person
.

Для событий учитывается только выбранная область стола (ROI):

  1. Человек считается находящимся в ROI, если bbox человека пересекается с ROI и пересечение покрывает долю bbox площади не меньше
    0.05
    .
  2. События подтверждаются антидребезгом:
  • Стол занят (OCCUPIED)
    : человек должен детектироваться в ROI минимум
    N=15
    кадров подряд.
  • Стол пуст (EMPTY)
    : отсутствие человека должно подтверждаться минимум
    M=25
    кадров подряд.
  1. Подход к столу (APPROACHED)
    : момент первого детектирования человека в ROI после подтвержденной пустоты (событие фиксируется до подтверждения
    OCCUPIED
    ).

Аналитика (Pandas)

Все события пишутся в

pandas.DataFrame
с полями:
frame
,
timestamp_sec
,
event_type
,
details
.

Для каждого момента

EMPTY
находится следующий
APPROACHED
и считается задержка:

  • time_to_next_approach = APPROACHED.timestamp_sec - EMPTY.timestamp_sec

Среднее значение:

  • выводится в консоль
  • сохраняется в файл
    analytics_report.txt

Результат работы

  1. output.mp4
    : видео с рамкой ROI вокруг столика; цвет рамки меняется по состоянию:
  • зеленый —
    EMPTY
  • красный —
    OCCUPIED
  1. example_problem_frame.png
    : сохраняется кадр на момент фиксации
    APPROACHED
    (может быть использован как “пример проблемного кадра”).

Пример задержки

В репозитории уже лежит пример результата в

analytics_report.txt
:
Средняя задержка: 4.53 сек (EMPTY -> APPROACHED).

После запуска на твоем

video1.mp4
значение будет пересчитано.