MyTetra Share
Делитесь знаниями!
Как настроить чувствительность определения движения в ZoneMinder
Время создания: 10.07.2015 09:41
Текстовые метки: Linux, ZoneMinder, настройка, чувствительность, установка, видеонаблюдение, датчик движения, определение движения
Раздел: Компьютер - Linux - Видео в Linux - ZoneMinder
Запись: xintrea/mytetra_syncro/master/base/1436510490u2tux7ywax/text.html на raw.github.com

В ZoneMinder встроена программная функция определения движения на основе анализа захватываемого камерой изображений.


В стандартной настройке камеры чувствительность детектора движения достаточно низкая. И событие Alarm возникает при крупных перемещениях в центральной зоне картинки с камеры. Таким образом, при записи в режиме Modect (запись только событий движения) перемещения могут просто не записаться, потому что система не включит состояние Alarm.


Чтобы увеличить чувствительность алгоритма определения движения, нужно зайти в настройку зон наблюдения для каждой камеры (Столбец Zones на главном экране). По-умолчанию у каждой камеры есть одна зона, которая покрывает все пространство кадра, и называется All. В настройках этой зоны есть несколько параметров, изменяя которые можно изменить порог срабатывания детектора движения.





Детектор на основе блобов Alarm Check Method: Blobs, который выставляется по-умолчанию, очень ненадежный. Даже если установить настройки согласно пресету Preset: Best, High Sensitivity, то определение наличия людей все равно будет надежно срабатывать только на светлом фоне. Например, на фоне стены или пола движение человека будет обнаружено. Но на фоне шкафов и мебели - далеко не факт.


Чтобы понять, как работает детектирование по блобам, и на каких зонах изображения оно срабатывает, можно залезть в кеш изображений и посмотреть на обработанное изображение. Почему-то в ZoneMinder нет настройки просмотра обнаруженных областей движения, хотя картинки с такими областями сохраняются на диске. Кеш с изображениями каждого события (event) обычно расположен в каталоге:


/var/cache/zoneminder/events/Монитор/Год/Месяц/День/Час/Минута/Секунда


Видеопоток представлен просто в виде последовательности jpg-файлов.


Если включен режим обнаружения движения по блобам, то в каталоге будут файлы с именами вида:


XXXXX-capture.jpg

XXXXX-analyse.jpg


Файлы capture содержат просто поток, а файлы analyse содержат картинку с обнаружением зоны движения. Вот пример файла с анализом движения:





Таким образом, просмотрев каталог с одним эвентом, можно понять, в какой момент срабатывает детектор движения и в какой момент он перестает срабатывать (просто по наличию красной обводки движущегося объекта или, что то же самое, по наличию самих analyse файлов). И окажется, что очень много явного движения человека в зоне камеры детектор просто не замечает даже в максимальных настройках.


Чтобы подтвердить свою догадку о том, что Blob-детектор плохо обнаруживает движение, можно посмотреть две настройки: галка на мониторе - Edit - вкладка Buffers. Настройки называются Pre Event Image Count и Post Event Image Count. У меня стоят следующие значения:


Pre Event Image Count: 25

Post Event Image Count: 50


Так вот, в каждом каталоге с событием, в моем случае будет четко 25 capture изображений (т. е. кадры до события), потом несколько capture и analyse изображений (которые показывают, что обнаружил Blob- алгоритм определения движения), а потом еще 50 capture изображений (т. е. кадры после события). И оказывается, что и в кадрах ДО и в кадрах ПОСЛЕ есть очень много движений, которых детектор не обнаруживает.


Еще один признак плохой работы Blob-детектора, это то, что при наличии двух камер одна камера показывает, что человек явно зашел в зону видимости второй камеры, но у второй камеры нет события, что человек появился. То есть происходит ситуация, что мы видим, что человек прошел возле камеры, а что он делал дальше возле другой - неизвестно, хотя вторая камера должна была зафиксировать движение (это я говорю про режим Modect).


Попытка понизить параметр Min/Max Pixel Threshold с Min 20 до Min 5 (похоже, что это параметр допустимого изменения яркости анализируемой точки), привела только к тому, что стала более обширна зона на кадрах, где движение обнаружено. Кадры с явным движением, на которых движение не обнаружилось, как были, так и остались.


Путем долгих проб были найдены параметры, которые для вышеприведенного кадра размером 703x575 более-менее отлавливают небольшие области движения:





Параметры следующие:


Units: Percent

Alarm Check Method: Blobs

Min/Max Pixel Threshold (0-255): 15 - 0

Filter Width/Height (pixels): 3x3

Zone Area: 100

Min/Max Alarmed Area: 1 - 0

Min/Max Filtered Area:1 - 0

Min/Max Blob Area: 1 - 0

Min/Max Blobs: 1 - 0


Как видно, параметры Alarmed, Filtered, Blob Area выставлены в 1%. Задать размер области меньше одного процента интерфейс не позволяет. Вместе с тем, даже этот 1% не определит движение у объекта, размером с девушку в белом платье на предыдущей картинке.


Поэтому, нужно тестировать режим Alarm Check Method: AlarmedPixels. Это более простой режим, который просто ищет различия в одинаковый точках двух последовательных кадров. Но проблема в том, что увидеть, какие точки алгоритм посчитал измененными, невозможно. Данный алгоритм не сохраняет analyse кадры на диске, и поэтому сложно понять на каких кадрах было обнаружено движение. Для того, чтобы этот режим определял движение небольших объектов, нужно выставить размер тревожной области в 1%:


Min/Max Pixel Threshold (0-255): 15 - 0

Min/Max Alarmed Area: 1 - 50


Практика показывает, что метод AlarmedPixels гораздо лучше определяет движение мелких объектов в затемненных местах, чем метод Blobs. Пока что я остановился именно на нем.



Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования