Компоненты

ZoneMinder не является единым монолитным приложением, а состоит из нескольких компонентов. Эти компоненты в основном включают исполняемые скомпилированные бинарные файлы, которые выполняют основную обработку видео, скрипты на языке Perl, которые обычно выполняют вспомогательные и/или внешние интерфейсные задачи, и скрипты на языке PHP, используемые для веб-интерфейса.

Системный обзор

Ниже изображена высокоуровневая диаграмма системы ZoneMinder с ключевыми компонентами

../_images/zm-system-overview.jpg

Краткое описание каждого из основных компонентов следует.

Бинарные файлы

zmc

Это дескриптор захвата ZoneMinder. Задача этого двоичного файла - сидеть на видеоустройстве и как можно быстрее вытягивать кадры из него, что должно работать примерно с постоянной скоростью.

zma

Это анализатор дескриптора зоны. Это компонент, который просматривает захваченные кадры и проверяет их на наличие движения, которое может вызвать сигнал тревоги или событие. Он обычно идет в ногу с дескриптором захвата, но если очень занят, может пропустить некоторые кадры, чтобы не отставать.

zms

Это сервер потокового вещания ZoneMinder. Веб-интерфейс подключается к нему для получения изображений в реальном времени или исторических потоков. Он работает только тогда, когда просматривается живой мониторный поток или поток событий, и умирает, когда событие заканчивается или закрывается связанная веб-страница. Если вы обнаружите, что у вас запущено несколько процессов zms, когда ничего не просматривается, вероятно, вам потребуется патч для Apache (см. раздел «Трудности»). Также установлена необработанная версия zms, называемая nph-zms, которая может использоваться вместо нее в зависимости от конфигурации вашего веб-сервера.

zmu

Это утилита ZoneMinder. По сути, это удобный командный интерфейс к нескольким полезным функциям. Она не предназначена для использования кем-либо, кроме веб-страницы (пока что в ней ограниченная помощь), но может быть использована, если необходимо, особенно для отладки проблем с видео.

PHP

Кроме того, в веб-каталоге находятся файлы PHP для веб-сайта. В настоящее время они состоят из одного шаблона с классическим и плоским стилями.

Классический

Оригинальная тема ZoneMinder

Плоский

Обновленная версия классической кожи, сохраняющая тот же макет с более современным стилем. Изначально это была кожа, а теперь это просто стиль CSS.

Perl

Наконец, некоторые скрипты на языке Perl в директории /scripts. Эти скрипты содержат некоторую конфигурацию в начале файлов, которую следует просмотреть и при необходимости изменить. Они следующие.

zmpkg.pl

Это скрипт управления пакетом ZoneMinder. Этот скрипт используется веб-интерфейсом и скриптами службы для управления выполнением всей системы.

zmdc.pl

Это скрипт управления демоном ZoneMinder. Этот скрипт используется веб-интерфейсом и скриптом zmpkg.pl для управления и поддержания выполнения демонов захвата и анализа, а также других демонов. Вам, вероятно, не придется запускать этот скрипт самостоятельно, но вы можете использовать его для запуска/остановки отдельных процессов ZoneMinder.

zmfilter.pl

Этот скрипт контролирует выполнение сохраненных фильтров и запускается и останавливается через веб-интерфейс в зависимости от того, были ли определены фильтры для автономной работы (фоновой). Этот скрипт также отвечает за автоматическую загрузку событий на сервер 3-й стороны. До версии 1.32 был один процесс zmfilter.pl. С версии 1.32 мы запускаем процесс zmfilter.pl для каждого фонового фильтра, чтобы время обработки одного фильтра не задерживало обработку другого фильтра.

zmaudit.pl

Этот скрипт используется для проверки согласованности файловой системы событий и базы данных. Он может удалять события-сироты, то есть те, которые присутствуют в одном месте, но отсутствуют в другом, а также проверять, что все различные таблицы событий находятся в порядке. Его можно запустить в интерактивном или пакетном режиме либо из командной строки, либо через cron-задание или аналогичное. В zmconfig.pl есть опция, позволяющая указать быстрое удаление событий, при котором веб-интерфейс удаляет только запись об событии из базы данных. Если эта опция установлена, то именно этот скрипт приводит остальную часть в порядок. Мы не рекомендуем быстрое удаление событий и не рекомендуем запускать zmaudit.pl в фоновом режиме. Это очень ресурсоемкая программа, постоянно сканирующая каждое событие. Пожалуйста, запустите его вручную или через cron-задание в выходные дни или что-то еще.

zmwatch.pl

Это простой скрипт, который просто следит за демонами захвата и перезапускает их, если они зависают. Было известно, что проблемы синхронизации видеодрайверов могут вызывать это, поэтому этот скрипт гарантирует, что ничего важного не будет пропущено.

zmupdate.pl

В настоящее время этот скрипт отвечает за проверку наличия новой версии ZoneMinder и другие случайные действия, связанные с обновлениями и миграциями. Он также предназначен быть «одним окном» для любых обновлений и выполнит все необходимое для обновления вашей установки до новой версии.

zmvideo.pl

Этот скрипт используется через веб-интерфейс для генерации видеофайлов в различных форматах стандартным образом. Вы также можете использовать его с командной строки в определенных обстоятельствах, но это обычно не требуется.

zmx10.pl

Это необязательный скрипт, который можно использовать для инициирования и мониторинга событий домашней автоматизации X10 и взаимодействия с системой сигнализации либо путем генерации сигналов X10 на события ZoneMinder, либо путем запуска мониторинга ZoneMinder и захвата при получении сигналов X10 из других источников, например, при срабатывании ИК-датчика. Например, у меня есть несколько камер, которые не начинают обнаруживать движение, пока я не активирую свою систему сигнализации, после чего они переходят в режим активного наблюдения при генерации сигнала X10 системой сигнализации и его получении ZoneMinder.

zmtrigger.pl

Это необязательный скрипт, который представляет собой более общий вариант для внешнего запуска сигналов тревоги. Он может обрабатывать внешние подключения через интернет-сокет, сокет UNIX или интерфейсы файлов/устройств. Вы можете либо использовать его «как есть», если вы можете взаимодействовать с существующим форматом, либо переопределить соединения и каналы, чтобы адаптировать его к вашим потребностям. Формат триггеров, используемых zmtrigger.pl, следующий: «<идентификатор>|<действие>|<оценка>|<причина>|<текст>|<показать текст>» где

  • „id“ - это номер или имя монитора ZM.

  • „action“ может быть „on“, „off“, „cancel“ или „show“, где „on“ вызывает состояние тревоги, „off“ отменяет состояние тревоги, а „cancel“ отменяет предыдущие состояния „on“ или „off“. Действие „show“ просто обновляет некоторые вспомогательные тексты, которые могут отображаться в изображениях, захваченных монитором. Обычно вы используете „on“ и „cancel“, „off“ обычно используется для подавления событий, основанных на движении. Кроме того, „on“ и „off“ могут принимать дополнительную временную задержку, например, on+20, которая автоматически отменяет предыдущее действие через это количество секунд.

  • „score“ - это оценка, присваиваемая сигналу тревоги, обычно для указания его важности. Для триггеров «включено» она должна быть ненулевой, иначе она должна быть равна нулю.

  • «Потому что» - это строка максимум 32 символа, указывающая причину или источник сигнала тревоги, например, «Открытый реле 1». Это сохраняется в поле «Причина» события. Не учитывается для сообщений «выключить» или «отменить».

  • „текст“ является полем дополнительной информации максимальной длиной 256 символов, которое сохраняется в поле „Описание“ события. Игнорируется для сообщений „off“ или „отмена“.

  • «showtext» может содержать до 32 символов текста, который можно отобразить в метке времени, добавляемой к изображениям. Действие «show» предназначено для обновления этого текста без влияния на сигналы тревоги, но текст обновляется, если он присутствует, для любого из действий. Это позволяет внешним данным появляться на изображениях, например, температура или персональная идентификация и т.д.

Обратите внимание, что несколько сообщений могут быть отправлены одновременно и должны быть разделены символами новой строки или CRLF. Этот скрипт не обязательно предназначен для самостоятельного решения проблемы, но предназначен для использования в качестве «клея», чтобы помочь ZoneMinder взаимодействовать с другими системами. Он, скорее всего, потребует некоторой настройки, прежде чем вы сможете извлечь из него какую-либо пользу. Если все, что вам нужно сделать, это сгенерировать сигналы тревоги из внешних источников, использование модуля ZoneMinder::SharedMem на языке Perl, вероятно, будет проще.

zmcamtool.pl

Этот необязательный скрипт является новым для предстоящего выпуска 1.27 ZoneMinder. Он предназначен для того, чтобы сделать простым следующее: добавить новые функции управления панорамированием и настройками камеры, преобразовать существующие мониторы в настройки, и экспортировать пользовательские функции управления панорамированием и настройки. Для первоначального выпуска этот скрипт не интегрирован в интерфейс и должен вызываться из командной строки. Тип „zmcamtool.pl –help“ из командной строки, чтобы получить объяснение различных аргументов, которые можно передать скрипту.

zmcontrol-*.pl

Это набор примерных скриптов, которые можно использовать для управления камерами Pan/Tilt/Zoom класса. Каждый скрипт преобразует набор стандартных параметров, используемых для управления камерой, в фактические команды протокола, отправляемые камере. Если вы используете протокол управления камерой, который не указан в списке, вам придется создать аналогичный скрипт, хотя его можно создать полностью отдельно от ZoneMinder и он не обязательно должен называться так же, как эти скрипты. Хотя эти скрипты используются для выполнения команд, исходящих из веб-интерфейса, их также можно использовать напрямую или из других программ или скриптов, например, для периодического сканирования к разным предустановкам.

zmtrack.pl

Этот скрипт используется для управления функцией экспериментального отслеживания движения. Он отвечает за обнаружение того, что происходит срабатывание сигнала тревоги, и перемещение камеры к месту срабатывания тревоги, а затем последующее возвращение ее в определенную позицию ожидания. Кроме того, он также контролирует, когда обнаружение движения приостанавливается и возобновляется, так что действие отслеживания камерой не вызывает бесконечных дальнейших ложных тревог, которые не оправданы.

zm

Это (необязательная) начальная скрипт ZoneMinder, см. ниже для подробностей.

zmeventnotification.pl

Это опциональный сервер реального времени для уведомлений о событиях от сторонних разработчиков, который также предоставляет push-уведомления для ZmNinja и использует машинное обучение для обнаружения объектов и лиц. Пожалуйста, ознакомьтесь с документацией по серверу уведомлений о событиях https://zmeventnotification.readthedocs.io/en/latest/index.html для получения дополнительной информации (обратите внимание, что компоненты машинного обучения являются необязательными и разрабатываются на Python3)

Наконец, также включено несколько модулей ZoneMinder на языке Perl. Эти модули используются скриптами выше, но также могут использоваться вашими собственными или сторонними скриптами. Полная документация для большинства модулей доступна в форме «pod» через «perldoc», но общее назначение каждого модуля следующее.

ZoneMinder.pm

Это общий модуль контейнера ZoneMinder. Он включает в себя модули Base.pm, Config.pm, Debug.pm, Database.pm и SharedMem.pm, описанные ниже. Он также экспортирует все их символы по умолчанию. Если вы используете другие модули напрямую, вам придется запросить, какие символы тегов импорта следует импортировать.

ZoneMinder/Base.pm

Это базовый модуль ZoneMinder на языке Perl. Он содержит только простую информацию, такую как версия. Он включен во все другие модули ZoneMinder на языке Perl

ZoneMinder/Config.pm

Этот модуль импортирует конфигурацию ZoneMinder из базы данных.

ZoneMinder/Debug.pm

Этот модуль содержит определенные функции отладки и ошибки и т.д., которые используются скриптами для генерации диагностической информации в стандартном формате.

ZoneMinder/Database.pm

Этот модуль содержит определения доступа к базе данных и функции. В настоящее время в этом модуле немного, но он включен как заготовка для будущего развития.

ZoneMinder/Event.pm

Этот модуль содержит функции для загрузки, манипулирования, удаления, копирования и перемещения событий.

ZoneMinder/Filter.pm

Этот модуль содержит функции для загрузки, выполнения и т.д. фильтров.

ZoneMinder/SharedMem.pm

Этот модуль содержит стандартные функции доступа к общей памяти. Эти функции можно использовать для доступа к текущему состоянию мониторов и т.д., а также для выдачи команд мониторам для включения и выключения. Этот модуль фактически предоставляет API ZoneMinder.

ZoneMinder/ConfigAdmin.pm

Этот модуль является специализированным модулем, который содержит определение и другую информацию о различных параметрах конфигурации. Он не предназначен для использования третьими сторонами.

ZoneMinder/Control/*.pm

Эти модули содержат реализации различных протоколов PTZ.

ZoneMinder/Trigger/*.pm

Эти модули содержат определения триггерных каналов и соединений, используемых скриптом zmtrigger.pl. Хотя их можно использовать ‘как есть’, они на самом деле предназначены в качестве примеров, которые могут быть адаптированы или специализированы для разных интерфейсов. Предложенные модули для новых каналов или соединений будут приветствоваться и включены в будущие версии ZoneMinder.