Детектор движения в видеозаписи - Видео лаборатория - eMule-Rus.Net Форум муловодов

Перейти к содержимому



Детектор движения в видеозаписи


  • Вы не можете ответить в тему
  • Вы не можете создать новую тему
Сообщений в теме: 2

#1 OFFLINE   Al71

 

    Мастер

  • [eMule-Rus]
  • сообщений: 3 275
    Последний визит:
    21 ноя 2022 23:59
  • Пол:Мужчина
  • Откуда:Москва
 

Отправлено 11 Сентябрь 2018 - 10:03

Бывают ситуации, когда нужно определить наличие изменений в видеозаписи на общем неподвижном фоне. У меня такая потребность возникла после того, как я записал на экшен-камеру первое подводное видео на рыбалке. Рыба в кадр попадает нечасто, а сидеть и не отрываясь просматривать двухчасовое видео -- занятие не очень благодарное. Я уже был немного знаком с пакетом motion для видеонаблюдения под линукс, но он не подходил по ряду причин. Основная причина заключалась в том, что он работает только в реальном времени, то есть обрабатывает непосредственно видеопоток с камеры. У меня же была запись. Кроме того, он фиксирует только отрывочные куски видео, а не полную картину в ее развитии. По той же причине я отказался от встроенного датчика движения в экшен-камере -- настроек у него вообще не было, а срабатывал он как бог на душу положит.
Порывшись в сети и не найдя ничего по-русски, я набрел на эту англоязычную статью. В ней автор сетует, что кто-то ворует его пиво, и решает изобличить вора с помошью мини-ПК Raspberry Pi, веб-камеры и собственной программы motion_detector.py, написанной на питоне. Весь код, разбитый по частям, подробно разъясняется автором в статье. Повторять все здесь я не буду, скажу лишь, что там, помимо прочего, использована библиотека OpenCV и метод простого вычитания фона. Программа может обрабатывать как непосредственно видео с камеры, так и записанное в файл. Вот пример ее работы:



Алгоритм здесь предельно прост -- записывается первый кадр (фон), который вычитается из всех последующих. При наличии движения (изменений, превышающих заданный порог по интенсивности и минимальный размер по площади), кадру присваивается статус "Оccupied" (в комнате кто-то есть), что отображается на экране. Это все, что умеет программа.
Для своих целей я написал скрипт на bash, который разбивает всю видеозапись на короткие фрагменты (например, по десять секунд), запускает motion_detector.py, сортирует фрагменты по папкам "fish" и "nomotion"), а затем склеивает фрагменты с рыбой. Исходный код на питоне при этом пришлось немного модифицировать. Так так с этим языком (и вообще с программированием) я знаком лишь поверхостно, то не придумал ничего лучше, чем передавать статус фрагмента в скрипт через файл fstatus, после чего код приобрел тот вид, который приводиться в прикрепленном файле. (Расширение .txt после скачивания удалить. В выделенной звездочками строке два числа означают уровень шума и порог, при котором фиксируется движение. Их можно настраивать. Минимальная площадь задается опцией --min-area при запуске или в 12-й строке кода по умолчанию).
Поскольку эту программу можно запускать как на линуксе, так и на винде, приведу здесь лишь универсальные команды ffmpeg, которые я использовал для разбивки видео на фрагменты:
ffmpeg -i input.mp4 -c copy -segment_time 10 -f segment -reset_timestamps frag%03d.avi
и склейки отсортированных фрагментов:
ffmpeg -f concat -safe 0 -i flist -c copy output.mp4
где flist -- список склеиваемых файлов.
В заключении стоит добавить, что приведенный простейший алгоритм не учитывает изменения фона с учетом условий освещенности. Существуют более мощные адаптивные модели обработки кадров, вроде функций cv2.BackgroundSubtractorMOG или cv2.BackgroundSubtractorMOG2, но они требуют куда больше вычислительных ресурсов, чем может обеспечить Raspberry Pi. Я пробовал реализовать их на своем компьютере, но ощутимой выгоды не получил. Напротив, задать универсальные настройки, срабатывающие на любое движение, оказалось проблематично. Поэтому и остановился на первоначальном варианте.

Прикрепленный файл  motion_detector.py.txt   3,25К   221 Количество загрузок:

Сообщение отредактировал Al71: 12 Сентябрь 2018 - 04:04


#2 OFFLINE   Al71

 

    Мастер

  • [eMule-Rus]
  • сообщений: 3 275
    Последний визит:
    21 ноя 2022 23:59
  • Пол:Мужчина
  • Откуда:Москва
 

Отправлено 11 Сентябрь 2018 - 10:08

Почему-то не могу прикрепить файл в этом разделе. А при вставке кода текстом съедается табуляция, что для питона принципиально.

#3 OFFLINE   Viktor@s

 

    Знаток

  • Юзвери
  • PipPipPipPipPipPipPipPipPipPipPipPip
  • сообщений: 6 524
    Последний визит:
    25 дек 2019 06:51
  • Пол:Мужчина
  • Откуда:Lithuania
 

Отправлено 12 Сентябрь 2018 - 03:54

в целях безопасности питоновские файлы на форуме запрещены

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

Загрузи его как текст на  .txt права есть

i
Ramerup:
убрал не относящееся к теме..






Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных