Настройка минимальной длительности сессии движения

43 views
Skip to first unread message

Анатолий Городилов

unread,
Sep 15, 2022, 1:12:15 AM9/15/22
to avreg-users
Повесил камеру в деревне, очень много событий от детектора движения длиной менее 1 секунды (в основном ночью от насекомых, летящих на ИК подсветку).
Как настроить запись "выборочно", но только если сессия движения, например, более 5 секунд?

Sep 15 04:33:56 avreg avregd: cam[2]: motion session finished (00:00:00), rec_id #170, rec.target "self"
Sep 15 04:29:42 avreg avregd: cam[4]: motion session finished (00:00:01), rec_id #842, rec.target "self"
Sep 15 04:24:59 avreg avregd: cam[4]: motion session finished (00:00:00), rec_id #841, rec.target "self"
Sep 15 04:20:00 avreg avregd: cam[4]: motion session finished (00:00:00), rec_id #839, rec.target "self"

Копался в интерфейсе, не нашел.

Andrey Nikitin

unread,
Sep 15, 2022, 2:35:41 AM9/15/22
to avreg...@googlegroups.com
Анатолий Городилов писал(а):
> Повесил камеру в деревне, очень много событий от детектора движения длиной
> менее 1 секунды (в основном ночью от насекомых, летящих на ИК подсветку).
> Как настроить запись "выборочно", но только если сессия движения, например,
> более 5 секунд?

Да, есть такое. Наш встроенный детектор очень прост
и будет ложно срабатывать от таких артефактов.

Что можно посоветовать:
1) использовать два набора настроек детектора, днём и ночью.
На 100% это вряд ли поможет, хорошо, если кол-во ложных сработок детектора
станет меньше. Покрутить можно noise_threshold (в сторону загрубления)
и diff_pxls_threshold (загрубить в % или использовать абсолютные значения,
подбираемые опытным путём).
За основу механизма переключения настроек по времени
можно взять технику изложенную в этом руководстве:
http://avreg.net/manual_applications_schedule-recording.html

2) Если у вас настроены какие-то действия по сработкам, например,
через event-collector, то в этом случае также можно использовать
отложенную реакцию на сработку. Например, при начале сеанса движения
взводить таймер на неск. секунд, при окончании - сбрасывать его.
Если таймер сработал, значит сеанс движения достаточно продолжительный для реагирования.
Такую логику сложно реализовать в shell-скриптах, однако event-collector можно написать
на любом языке.

3) Если каким-то образом смущают ролики малой длительности в ночное время,
то их можно просто удалять по cron-у. Собственно, такой же механизм делал бы сам демон avregd,
если бы в теории нужна была эта ф-ция из коробки. Почему - потому что не начать запись по сработке,
он не может или сложные решения пришлось бы применять с временными записями.

P.S. С п.3 можем помочь с реализацией (скрипт + sql).

Анатолий Городилов

unread,
Sep 15, 2022, 3:25:38 AM9/15/22
to avreg-users
Понял, если из коробки такой настройки нет, что-нибудь придумаю. У меня event-collector внутри on_video_saved() делает
  if [[ $cam_nr -eq 4 ]] || [[ $cam_nr -eq 2 ]]; then
    ffmpeg -y -i /var/spool/avreg/$filename -t 5 -an /tmp/out.gif && telegram-send -g --animation /tmp/out.gif  
  fi

Смысл - когда появилось движение, сформировать короткую гифку и прислать в тг. Была идея сделать это внутри on_motion_session(), но тогда придется источником видео использовать саму камеру (например через /avreg-cgi), не хочется так усложнять.
Из простых костыльных решений, чтобы не переписывать event-collector, попробую уменьшить motion_session_end (потому что сейчас ролики по 10 секунд, даже если движение было в одном кадре) и обрабатывать только видео длиннее 5 секунд. Если не взлетит, буду учиться программировать

четверг, 15 сентября 2022 г. в 09:35:41 UTC+3, avreg-support:

Andrey Nikitin

unread,
Sep 15, 2022, 4:15:44 AM9/15/22
to avreg...@googlegroups.com
Анатолий Городилов писал(а):
> event-collector внутри on_video_saved() делает
> if [[ $cam_nr -eq 4 ]] || [[ $cam_nr -eq 2 ]]; then
> ffmpeg -y -i /var/spool/avreg/$filename -t 5 -an /tmp/out.gif &&
> telegram-send -g --animation /tmp/out.gif
> fi
>
> Смысл - когда появилось движение, сформировать короткую гифку и прислать в
> тг. Была идея сделать это внутри on_motion_session(), но тогда придется
> источником видео использовать саму камеру (например через /avreg-cgi), не
> хочется так усложнять.
> Из простых костыльных решений, чтобы не переписывать event-collector,
> попробую уменьшить motion_session_end (потому что сейчас ролики по 10
> секунд, даже если движение было в одном кадре) и обрабатывать только видео
> длиннее 5 секунд. Если не взлетит, буду учиться программировать

в on_video_saved() передаётся время начала и окончания записи
(прим. не путать с сеансом движения в котором может быть один или несколько файлов).
Соотв., можно вычислить продолжительность ролика, см. duration в секундах
в нашем примере event-collector.
Если от duration отнять
1. значение pre_record,
2. значение motion_session_end (дурацкое название, в 7.0 оно другое уже),
вы получите длительность от первой неспокойного кадра в ролике до последнего неспокойного,
скажем так, real_motion_duration_in_current_file.
Далее, фильтруете это значение по мин. порогу и отправляете в телеграм.

P.S. В гифку видео перегонять для телеграмма... Ну, такое.
Главное чтобы вы помнили, что если заблочится на долгое время процесс event-collector (на перекоде или отправке),
это может привести к остановке avregd. Общими рекомендациями являются использование
коротких по времени (ограниченных заданными таймаутами), нересурсоёмких синхронных операций
(перекод с уменьшением разрешения, например).
Или нужно писать асинхронное полноценное приложение с вытекающими отсюда сложностями.



Анатолий Городилов

unread,
Sep 17, 2022, 12:52:57 PM9/17/22
to avreg-users
Всё получилось, спасибо.  motion_session_end уменьшил до 2, стал фильтровать видео длиннее 10 секунд, срабатываний стало 4 вместо 400 за ночь.
Формирование роликов для предпросмотра и отправку в телеграм вынес в отдельный скрипт, чтобы запускалось асинхронно, во избежание.

           if [[ $diff_sec -gt 10 ]]; then
                /etc/avreg/scripts/notifier.sh $filename $cam_nr $motion_session &

Про скрипт+sql для удаления коротких видео (1-2 секунд) по крону может напишете в документации на сайте, вдруг я не один с такой проблемой?
четверг, 15 сентября 2022 г. в 11:15:44 UTC+3, avreg-support:

Andrey Nikitin

unread,
Sep 20, 2022, 5:45:58 AM9/20/22
to avreg...@googlegroups.com
Анатолий Городилов писал(а):
> Про скрипт+sql для удаления коротких видео (1-2 секунд) по крону может
> напишете в документации на сайте, вдруг я не один с такой проблемой?

С реализацией функционала не так всё просто.
Например, маленький файл может быть последним в сеансе движения.
А также стоит ли учитывать текущие значения prerecord и motion_session_end.
Добавили в TODO.
Reply all
Reply to author
Forward
0 new messages