Как написать программу для видеонаблюдения

Здравствуйте, уважаемые пользователи!
Шарю в базовом программировании на php в том числе, html,css,sql,js немного, но до уровня фреймворков не дотягиваю. Чувствую пятой точкой, что мне нужны именно они.
Задача у меня следующая. В больнице есть около 100 палатных камер. Нужно собрать все в единую систему в виде веб приложения. Должна быть реализована функция разграничения пользователей по правам. То есть одному пользователю вывести такие то 9 камер, другому такие то 6.

ГЛАВНЫЙ ВОПРОС: посоветуйте, пожалуйста фреймворк, который ускорит реализацию этой системы. И если можно развернутый ответ, как бы вы делали такую систему, с чего начали и чем закончили. Премного благодарен.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

Время на прочтение
6 мин

Количество просмотров 5.1K

На Geektimes я часто встречаю и с удовольствием читаю посты из серии DIY. Решив сделать небольшой вклад в копилку ценного опыта, собранного здесь, я собираюсь подробно описать процесс создания клиента для веб, базирующегося на серверах «Линия».

Система видеонаблюдения «Линия» предоставляет открытое API, и разработчики заявляют, что на его основе можно написать собственный клиент для просмотра видеоархива и камер онлайн. Также при желании можно реализовать такие функции, как добавление событий в архив, наложение OSD поверх видео. Описание всех возможностей представлено в спецификации на официальном сайте.

Данная статья — это реальный пример, как я, пользователь с начальными знаниями JS, HTML, написал собственное приложение, реализующее базовые принципы работы с серверами «Линия» через встроенный web-сервер.

Вводные данные

Автор — новичок в разработке HTML-клиента, имею отношение к разработке системы видеонаблюдения «Линия».
Уровень знаний JS, HTML — начальный.
Задача — написать HTML-клиент для работы с устройствами на базе программного обеспечения «Линия» с помощью спецификации с сайта.

Главную интригу раскрою сразу – я пришел к двум выводам:

  1. Спецификация реальная, описано достаточно понятно, написать клиент можно, используя C++, PHP.
  2. Полноценный HTML-клиент, используя только лишь JS, написать нельзя — только онлайн-наблюдение по спецификации до RPC.

Первый вывод вполне закономерен, если учесть большое количество интеграций со сторонними программами. Все они описаны на сайте: тут есть СКУД, весовые, POS-системы, программы для определения автомобильных номеров и 1С.

Второй вывод более интересен, рассмотрим его ниже.

Почему нельзя создать полноценный клиент на HTML + JS?

Ответ: кросс-доменные запросы.

На данный момент веб-сервер «Линии» ограничен, и путем простого копирования кода в папку www доступ получить нельзя. Однако разработчики обещают, что в новой версии для Linux и в «Линии 8.0» веб-сервер будет работать стандартно: в случае запроса, при наличии файла, будет его возвращать.

Сейчас же создаем новый проект и начинаем кодить. Как и все новички в программировании для веб, уточнив, что сервер «Линии» отвечает «*» в заголовке Access-Control-Allow-Origin, я начал усиленно трудиться над кодом, проверяя результат на Firefox 57.0.4 (64-бит). Запросы на сервер отправлял XMLHttpRequest.

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

На момент написания статьи четыре основных современных браузера не дают прочитать заголовки, получаемые от сервера. Согласно спецификации необходимо реализовать Digest-авторизацию, что без заголовков невозможно.

К концу первого дня я понял, что без добавления в веб-сервер «Линии» обработки OPTIONS ничего не получится, так как для запросов с «непростым» методом или особыми заголовками браузер делает предзапрос OPTIONS, указывая их в Access-Control-Request-Method и Access-Control-Request-Headers. Поэтому я начал искать другие варианты авторизации, а настоящие Basic или Digest не взлетели.

Альтернативный способ уже был описан в спецификации, оставалось потратить какое-то время на переписку с программным отделом «Линии». Так как подобные трудности возникают не в первый раз, уже есть костыль для авторизации, и он даже упомянут в спецификации:

На клиентах, где невозможно авторизовать запрос стандартными средствами (HTTP Digest/Basic Authentication), возможна передача заголовка Authorization одним из параметров запроса, например
/kfd3ado1sdrms/streaming/main.flv?authorization=Basic%20d2ViOg==

После всех манипуляций стандартный кросс-доменный запрос стал корректно выполняться! Необходимо также добавить в запрос заголовок Accept c правильным типом — я решил использовать JSON.

Код запроса:

function get_request_url(method,current_server_data, resource, additional){
    var request = current_server_data.server_ip + ':' +current_server_data.port +resource+'?authorization=Basic '+ utf8_to_b64(current_server_data.user+':'+current_server_data.password);
    if (additional != '' && typeof additional  != "undefined") {
        request += '&' + additional;
    }
    return request;
}

function http_request_of_resource (server_index , resource, auth_attempt) {
    var request = get_request_url('GET', servers_array[server_index], resource,'');
    var req_ = new XMLHttpRequest();
    req_.open('GET', 'http://'+ request, true);
    //req_.timeout = 9000;
    // выполнить код, когда придёт ответ
    req_.onreadystatechange = function() {
        if (this.readyState == 2) {
           if (this.status == 401) {
                //console.log('---unauthorized');
                hideModal();
                update_nessecary_structure(resource, 'unauthorized', server_index);
            }
        } else if (this.readyState === 4) {
            if (this.status === 0) {
                hideModal();
                update_nessecary_structure(resource, 'server_down',server_index)
            }
            if (this.status == 200) {
                if (auth_attempt) hideModal();
                else resource =(resource =='/cameras') ? resource+'_update_info': resource;
                //console.log('200' + this.responseText);
                update_nessecary_structure(resource, this.responseText, server_index);
            } else if (this.status == 404) {
                //console.log('404');
                update_nessecary_structure(resource, '404', server_index);
            }
        }
    };
    
    // Оправка запроса
    req_.setRequestHeader('Content-type', 'text/plain; charset=utf-8');
    req_.setRequestHeader('Accept', 'application/json');
    req_.send();
        
}

Меняем resource на нужный нам согласно спецификации и получаем те или иные данные. Переменная additional содержит дополнительные параметры для запроса, если таковые необходимы. На этом освоение первой половины спецификации, а именно получение/отправки текстовых данных посредством GET-запросов, можно считать закрытым.

Далее я столкнулся с тем, что тэг IMG в IE не воспроизводит MJPEG-поток и нужно самостоятельно реализовать обновление изображений с камер. Код открыт, его можно посмотреть и при желании изменить. В текущей реализации доступно одновременное воспроизведение максимум шести MJPEG потоков, так что работу с видом, отображающим большее количеством камер, придется делать самим. Все это есть в примере, при желании можно найти и разобраться, но если возникнут вопросы, обязательно задавайте в комментариях.

Спецификация RPC

Нам предложено отправлять и получать данные либо в JSON (версия сервера «Линии 7.1.1» и выше) или MessagePack (версия «Линия 7.0» и выше). Упоминают, что MessagePack меньше весит и работает быстрее, но, если честно, я бы выбрал JSON (он уже встроен в JS), если бы не одно но в спецификации: получение кадров из архива возможно только в MessagePack. Пришлось идти на их официальный сайт и качать JS-файл, который имеет на борту методы encode и decode.

Функция отправки запроса готова! Но праздновать победу рано: при попытке поменять заголовок запроса Content-type браузер ругается и не отправляет данные серверу. Дело в том, что сервер «Линии» анализирует это поле и в зависимости от типа производит парсинг. Своими силами дальше обойтись не смог.

Отправил заявку в программный отдел, и после обсуждения мне добавили костыль, как и в случае с авторизацией, — Content-type будет передаваться в url-запросе:

function rpc_request_of_resource (current_server_data , rpc_method, rpc_request) {
    var request = get_request_url('POST', current_server_data, '/rpc','');
    //console.log("i'm here request = " + request + '  '+ current_server_data.user);
    request += "&content-type='application/x-msgpack'";
    var req_ = new XMLHttpRequest();
    req_.open('POST', 'http://'+ request, true);   
    // выполнить код, когда придёт ответ
    req_.responseType = 'arraybuffer';
    req_.onreadystatechange = function() {
        if (this.readyState == 2) {
           if (this.status == 401) {
                //console.log('401' + this.getAllResponseHeaders());
                console.log('unauthorized');
            }
        } else if (this.readyState == 4) {
           if (this.status == 200) {
                //if (auth_attempt) hideModal();
                //console.log('200' + this.responseText);
                rpc_update_nessecary_method(rpc_method, this.response);
            } else if (this.status == 404) {
                console.log('404');
            } else if (this.status == 500) {
                //console.log('500');
                rpc_update_nessecary_method(rpc_method, '500');
            }
        }

      };
    
    // Оправка запроса
    //req_.setRequestHeader('Content-type', 'text/plain; charset=utf-8');
    //req_.setRequestHeader('Content-type', 'application/x-msgpack');
    req_.setRequestHeader('Accept', 'application/x-msgpack');
    req_.send(rpc_request);
        
}

Данное изменение будет работать с версии «Линия 7.4.1» и выше. Для всех серверов ниже этой версии работа с ресурсом /rpc будет недоступна.

В конце хочу поблагодарить всех клиентов, которые нам присылали вопросы/пожелания, связанные с реализацией приложений на базе нашего API. Благодаря вам было проведено исследование, в рамках которого выявлены и исправлены некоторые недочеты.

Пример, который описан в данной статье, постепенно вырастет в полноценный HTML-клиент «Линии». Весь код будет читабельным, вы его сможете менять или использовать как основу для построения собственных решений. API же со временем наполнится еще большим количеством возможностей, о которых мы обязательно проинформируем.

В OpenCV существует множество вариантов для трансляции видеопотока. Можно использовать один из них – IP-камеры, но с ними бывает довольно трудно работать. Так, некоторые IP-камеры не позволяют получить доступ к RTSP-потоку (англ. Real Time Streaming Protocol). Другие IP-камеры не работают с функцией OpenCV cv2.VideoCapture. В конце концов, такой вариант может быть слишком дорогостоящим для ваших задач, особенно, если вы хотите построить сеть из нескольких камер.

Как отправлять видеопоток со стандартной веб-камеры с помощью OpenCV? Одним из удобных способов является использование протоколов передачи сообщений и соответствующих библиотек ZMQ и ImageZMQ.

Поэтому сначала мы кратко обсудим транспорт видеопотока вместе с ZMQ, библиотекой для асинхронной передачи сообщений в распределенных системах. Далее, мы реализуем два скрипта на Python:

  1. Клиент, который будет захватывать кадры с простой веб-камеры.
  2. Сервер, принимающий кадры и ищущий на них выбранные типы объектов (например, людей, собак и автомобили).

Для демонстрации работы узлов применяются четыре платы Raspberry Pi с подключенными модулями камер. На их примере мы покажем, как использовать дешевое оборудование в создании распределенной сети из камер, способных отправлять кадры на более мощную машину для дополнительной обработки.

Передача сообщений и ZMQ

Передача сообщений – парадигма программирования, традиционно используемая в многопроцессорных распределенных системах. Концепция предполагает, что один процесс может взаимодействовать с другими процессами через посредника – брокера сообщений (англ. message broker). Посредник получает запрос, а затем обрабатывает акт пересылки сообщения другому процессу/процессам. При необходимости брокер сообщений также отправляет ответ исходному процессу.

ZMQ является высокопроизводительной библиотекой для асинхронной передачи сообщений, используемой в распределенных системах. Этот пакет обеспечивает высокую пропускную способность и малую задержку. На основе ZMQ Джефом Бассом создана библиотека ImageZMQ, которую сам Джеф использует для компьютерного зрения на своей ферме вместе с теми же платами Raspberry Pi.

Пишем программу для автоматического распознавания объектов с веб-камер

Начнем с того, что настроим клиенты и сервер.

Конфигурирование системы и установка необходимых пакетов

Пишем программу для автоматического распознавания объектов с веб-камер

Сначала установим opencv и ZMQ. Чтобы избежать конфликтов, развертывание проведем в виртуальной среде:

        $ workon <env_name> # например, py3cv4
$ pip install opencv-contrib-python
$ pip install zmq
$ pip install imutils
    

Теперь нам нужно клонировать репозиторий с ImageZMQ:

        $ cd ~
$ git clone https://github.com/jeffbass/imagezmq.git
    

Далее, можно скопировать директорию с исходником или связать ее с вашим виртуальным окружением. Рассмотрим второй вариант:

        $ cd ~/.virtualenvs/py3cv4/lib/python3.6/site-packages
$ ln -s ~/imagezmq/imagezmq imagezmq
    

Библиотеку ImageZMQ нужно установить и на сервер, и на каждый клиент.

Примечание: чтобы быть увереннее в правильности введенного пути, используйте дополнение через табуляцию.

Подготовка клиентов для ImageZMQ

В этом разделе мы осветим важное отличие в настройке клиентов.

Наш код будет использовать имя хоста клиента для его идентификации. Для этого достаточно и IP-адреса, но настройка имени хоста позволяет проще считать назначение клиента.

В нашем примере для определенности мы предполагаем, что вы используете Raspberry Pi с операционной системой Raspbian. Естественно, что клиент может быть построен и на другой ОС.

Чтобы сменить имя хоста, запустите терминал (это можно сделать через SSH-соединение) и введите команду raspi-config:

        $ sudo raspi-config
    

Вы увидите следующее окно терминала. Перейдите к пункту 2 Network Options.

Пишем программу для автоматического распознавания объектов с веб-камер

На следующем шаге выберите опцию N1 Hostname.

Пишем программу для автоматического распознавания объектов с веб-камер

На этом этапе задайте осмысленное имя хоста (например, pi-livingroom, pi-bedroom, pi-garage). Так вам будет легче ориентироваться в клиентах сети и сопоставлять имена и IP-адреса.

Пишем программу для автоматического распознавания объектов с веб-камер

Далее, необходимо согласиться с изменениями и перезагрузить систему.

В некоторых сетях вы можете подключиться через SSH, не предоставляя IP-адрес явным образом:

        $ ssh pi@pi-frontporch
    

Определение отношений сервер-клиент

Прежде чем реализовать стриминг потокового видео по сети, определим отношения клиентов и сервера. Для начала уточним терминологию:

  • Клиент – устройство, отвечающее за захват кадров с веб-камеры с использованием OpenCV, а затем за отправку кадров на сервер.
  • Сервер — компьютер, принимающий кадры от всех клиентов.

Конечно, и сервер, и клиент могут и принимать, и отдавать какие-то данные (не только видеопоток), но для нас важно следующее:

  • Существует как минимум одна (а скорее всего, несколько) система, отвечающая за захват кадров (клиент).
  • Существует только одна система, используемая для получения и обработки этих кадров (сервер).

Структура проекта

Структура проекта будет состоять из следующих файлов:

        $ $ tree
.
├── MobileNetSSD_deploy.caffemodel
├── MobileNetSSD_deploy.prototxt
├── client.py
└── server.py
 
0 directories, 4 files
    

Два первых файла из списка соответствуют файлам предобученной нейросети Caffe MobileNet SSD для распознавания объектов. В репозитории по ссылке можно найти соответствующие файлы, чьи названия, правда, могут отличаться от приведенных (*.caffemodel и deploy.prototxt). Сервер (server.py) использует эти файлы Caffe в DNN-модуле OpenCV.

Скрипт client.py будет находиться на каждом устройстве, которое отправляет поток на сервер.

Реализация клиентского стримера на OpenCV

Начнем с реализации клиента. Что он будет делать:

  1. Захватывать видеопоток с камеры (USB или RPi-модуль).
  2. Отправлять кадры по сети через ImageZMQ.

Откроем файл client.py и вставим следующий код:

        # импортируем необходимые библиотеки
from imutils.video import VideoStream  # захват кадров с камеры
import imagezmq
import argparse  # обработка аргумента командной строки, содержащего IP-адрес сервера
import socket    # получение имени хоста Raspberry Pi
import time      # для учета задержки камеры перед отправкой кадров
 
# создаем парсер аргументов и парсим
ap = argparse.ArgumentParser()
ap.add_argument("-s", "--server-ip", required=True,
	help="ip address of the server to which the client will connect")
args = vars(ap.parse_args())
 
# инициализируем объект ImageSender с адресом сокета сервера
sender = imagezmq.ImageSender(connect_to="tcp://{}:5555".format(
	args["server_ip"]))
    

Назначение импортируемых модулей описано в комментариях. В последних строчках создается объект-отправитель, которому передаются IP-адрес и порт сервера. Указанный порт 5555 обычно не вызывает конфликтов.

Инициализируем видеопоток и начнем отправлять кадры на сервер.

        # получим имя хоста, инициализируем видео поток, 
# дадим датчику камеры прогреться
rpiName = socket.gethostname()
vs = VideoStream(usePiCamera=True).start()
#vs = VideoStream(src=0).start()
time.sleep(2.0)  # задержка для начального разогрева камеры
 
while True:
	# прочитать кадр с камеры и отправить его на сервер
	frame = vs.read()
	sender.send_image(rpiName, frame)
    

Теперь у нас есть объект VideoStream, созданный для захвата фреймов с RPi-камеры. Если вы используете USB-камеру, раскомментируйте следующую строку и закомментируйте ту, что активна сейчас.

В этом месте вы также можете установить разрешение камеры. Мы будем использовать максимальное, так что аргумент не передастся. Если вы обнаружите задержку, надо уменьшить разрешение, выбрав одно из доступных значений, представленных в таблице. Например:

        vs = VideoStream(usePiCamera=True, resolution=(320, 240)).start()
    

Для USB-камеры такой аргумент не предусмотрен. В следующей строке после считывания кадра можно изменить его размер:

        frame = imutils.resize(frame, width=320)
    

В последних строках скрипта происходит захват и отправка кадров на сервер.

Реализация сервера

На стороне сервера необходимо обеспечить:

  • Прием кадров от клиентов.
  • Детектирование объектов на каждом из входящих кадров.
  • Подсчет количества объектов для каждого из кадров.
  • Отображение смонтированного кадра (панели), содержащего изображения от всех активных устройств.

Последовательно заполним файл с описанием сервера server.py:

        # импортируем необходимые библиотеки
from imutils import build_montages   # монтаж всех входящих кадров
from datetime import datetime
import numpy as np
import imagezmq
import argparse
import imutils
import cv2
 
# создаем парсер аргументов и парсим их
ap = argparse.ArgumentParser()
ap.add_argument("-p", "--prototxt", required=True,
	help="path to Caffe 'deploy' prototxt file")
ap.add_argument("-m", "--model", required=True,
	help="path to Caffe pre-trained model")
ap.add_argument("-c", "--confidence", type=float, default=0.2,
	help="minimum probability to filter weak detections")
ap.add_argument("-mW", "--montageW", required=True, type=int,
	help="montage frame width")
ap.add_argument("-mH", "--montageH", required=True, type=int,
	help="montage frame height")
args = vars(ap.parse_args())
    

Библиотека imutils упрощает работу с изображениями (есть на GitHub и PyPi).

Пять аргументов, обрабатываемых с помощью парсера argparse:

  • --prototxt: путь к файлу прототипа глубокого изучения Caffe.
  • --model: путь к предообученной модели нейросети Caffe.
  • --confidence: порог достоверности для фильтрации случаев нечеткого обнаружения.
  • --montageW: количество столбцов для монтажа общего кадра, состоящего в нашем примере из 2х2 картинок (то есть montageW = 2) . Часть ячеек может быть пустой.
  • --montageH: аналогично предыдущему пункту — количество строк в общем кадре.

Вначале инициализируем объект ImageHub для работы с детектором объектов. Последний построен на базе MobileNet Single Shot Detector.

        imageHub = imagezmq.ImageHub()
 
# инициализируем список меток классов сети MobileNet SSD, обученной
# для детектирования, генерируем набор ограничивающих прямоугольников
# разного цвета для каждого класса
CLASSES = ["background", "aeroplane", "bicycle", "bird", "boat",
	"bottle", "bus", "car", "cat", "chair", "cow", "diningtable",
	"dog", "horse", "motorbike", "person", "pottedplant", "sheep",
	"sofa", "train", "tvmonitor"]
 
# загружаем сериализованную модель Caffe с диска
print("[INFO] loading model...")
net = cv2.dnn.readNetFromCaffe(args["prototxt"], args["model"])
    

Объект ImageHub используется сервером для приема подключений от каждой платы Raspberry Pi. По существу, для получения кадров по сети и отправки назад подтверждений здесь используются сокеты и ZMQ .

Предположим, что в системе безопасности мы отслеживаем только три класса подвижных объектов: собаки, люди и автомобили. Эти метки мы запишем в множество CONSIDER, чтобы отфильтровать прочие неинтересные нам классы (стулья, растения и т. д.).

Кроме того, необходимо следить за активностью клиентов, проверяя время отправки тем или иным клиентом последнего кадра.

        # инициализируем выбранный набор подсчитываемых меток классов,
# словарь-счетчик и словарь фреймов
CONSIDER = set(["dog", "person", "car"])
objCount = {obj: 0 for obj in CONSIDER}
frameDict = {}
 
# инициализируем словарь, который будет содержать информацию
# о том когда устройство было активным в последний раз
lastActive = {}
lastActiveCheck = datetime.now()
 
# храним ожидаемое число клиентов, период активности
# вычисляем длительность ожидания между проверкой
# на активность устройства

ESTIMATED_NUM_PIS = 4
ACTIVE_CHECK_PERIOD = 10
ACTIVE_CHECK_SECONDS = ESTIMATED_NUM_PIS * ACTIVE_CHECK_PERIOD
 
# назначаем ширину и высоту монтажного кадра
# чтобы просматривать потоки от всех клиентов вместе
mW = args["montageW"]
mH = args["montageH"]
print("[INFO] detecting: {}...".format(", ".join(obj for obj in
	CONSIDER)))
    

Далее необходимо зациклить потоки, поступающие от клиентов и обработку данных на сервере.

        # начинаем цикл по всем кадрам
while True:
	# получаем имя клиента и кадр,
	# подтверждаем получение
	(rpiName, frame) = imageHub.recv_image()
	imageHub.send_reply(b'OK')
 
	# если устройства нет в словаре lastActive,
	# это новое подключенное устройство
	if rpiName not in lastActive.keys():
		print("[INFO] receiving data from {}...".format(rpiName))
 
	# записываем время последней активности для устройства,
	# от которого мы получаем кадр
	lastActive[rpiName] = datetime.now()
    

Итак, сервер забирает изображение в imageHub, высылает клиенту сообщение о подтверждении получения. Принятое сервером сообщениеimageHub.recv_image содержит имя хоста rpiName и кадр frame. Остальные строки кода нужны для учета активности клиентов.

Затем мы работаем с кадром, формируя блоб (о функции blobFromImage читайте подробнее в посте pyimagesearch). Блоб передается нейросети для детектирования объектов.

Замечание: мы продолжаем рассматривать цикл, поэтому здесь и далее будьте внимательны с отступами в коде.

        	# изменяем размер кадра, чтобы ширина была не больше 400 пикселей,
	# захватываем размеры кадров и создаем блоб
	frame = imutils.resize(frame, width=400)
	(h, w) = frame.shape[:2]
	blob = cv2.dnn.blobFromImage(cv2.resize(frame, (300, 300)),
		0.007843, (300, 300), 127.5)
 
	# передаем блоб нейросети, получаем предсказания
	net.setInput(blob)
	detections = net.forward()
 
	# сбрасываем число объектов для интересующего набора
	objCount = {obj: 0 for obj in CONSIDER}
    

Теперь мы хотим пройтись по детектированным объектам, чтобы посчитать и выделить их цветными рамками:

        	# циклически обходим детектированные объекты
	for i in np.arange(0, detections.shape[2]):
		# извлекаем вероятность соответствующего предсказания
		confidence = detections[0, 0, i, 2]
 
		# отфильтруем слабые предсказания,	
		# гарантируя минимальную достоверность
		if confidence > args["confidence"]:
			# извлекаем индекс метки класса
			idx = int(detections[0, 0, i, 1])
 
			# проверяем, что метка класса в множестве интересных нам
			if CLASSES[idx] in CONSIDER:
				# подсчитываем детектированный объект
				objCount[CLASSES[idx]] += 1
 
				# вычисляем координаты рамки, ограничивающей объект
				box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
				(startX, startY, endX, endY) = box.astype("int")
 
				# рисуем рамку вокруг объекта
				cv2.rectangle(frame, (startX, startY), (endX, endY),
					(255, 0, 0), 2)
    

Далее, аннотируем каждый кадр именем хоста и количеством объектов. Наконец, монтируем из нескольких кадров общую панель:

        	# отобразим имя клиента на кадре
	cv2.putText(frame, rpiName, (10, 25),
		cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)
 
	# отобразим число объектов на кадре
	label = ", ".join("{}: {}".format(obj, count) for (obj, count) in
		objCount.items())
	cv2.putText(frame, label, (10, h - 20),
		cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255,0), 2)
 
	# обновим кадр в словаре кадров клиентов
	frameDict[rpiName] = frame
 
	# построим общий кадр из словаря кадров
	montages = build_montages(frameDict.values(), (w, h), (mW, mH))
 
	# покажем смонтированный кадр на экране
	for (i, montage) in enumerate(montages):
		cv2.imshow("Home pet location monitor ({})".format(i),
			montage)
 
	# детектируем нажатие какой-либо клавиши
	key = cv2.waitKey(1) & 0xFF
    

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

        	# если разница между текущим временем и временем последней активности 
	# больше порога, производим проверку
	if (datetime.now() - lastActiveCheck).seconds > ACTIVE_CHECK_SECONDS:
		# циклично обходим все ранее активные устройства
		for (rpiName, ts) in list(lastActive.items()):
			# удаляем клиент из словарей кадров и последних активных
			# если устройство неактивно
			if (datetime.now() - ts).seconds > ACTIVE_CHECK_SECONDS:
				print("[INFO] lost connection to {}".format(rpiName))
				lastActive.pop(rpiName)
				frameDict.pop(rpiName)
 
		# устанавливаем время последней активности
		lastActiveCheck = datetime.now()
 
	# если нажата клавиша `q`, выходим из цикла
	if key == ord("q"):
		break
 
# закрываем окна и освобождаем память
cv2.destroyAllWindows()
    

Запускаем стриминг видео с камер

Теперь, когда мы реализовали и клиент, и сервер, проверим их. Загрузим клиент на каждую плату Raspberry Pi с помощью SCP-протокола:

        $ scp client.py pi@192.168.1.10:~
$ scp client.py pi@192.168.1.11:~
$ scp client.py pi@192.168.1.12:~
$ scp client.py pi@192.168.1.13:~
    

Проверьте, что на всех машинах установлены импортируемые клиентом или сервером библиотеки. Первым нужно запускать сервер. Сделать это можно следующей командой:

        $ python server.py --prototxt MobileNetSSD_deploy.prototxt 
	--model MobileNetSSD_deploy.caffemodel --montageW 2 --montageH 2
    

Далее запускаем клиенты, следуя инструкции (будьте внимательны, в вашей системе имена и адреса могут отличаться):

  1. Откройте SSH-соединение с клиентом: ssh pi@192.168.1.10
  2. Запустите экран клиента: screen
  3. Перейдите к профилю: source ~/.profile
  4. Активируйте окружение: workon py3cv4
  5. Установите ImageZMQ, следуя инструкциям библиотеки по установке
  6. Запустите клиент: python client.py --server-ip 192.168.1.5

Ниже представлено демо-видео панели с процессом стриминга и распознавания объектов с четырех камер на Raspberry Pi.

Аналогичные решения из кластера камер и сервера можно использовать и для других задач, например:

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

А какие у вас есть идеи для использования нескольких камер и OpenCV?

Первостепенная задача для любой модели компьютерного зрения – генерация датасета. Мне необходимо было сформировать датасет для реализации модели детектирования действий клиентов по камерам видеонаблюдения, о чем и поговорим сегодня.

Рассмотрим с вам вариант доступа к камерам ТСВ посредством web api на примере api trassir. Доступ к api предоставляется с помощью http get запроса к серверу следующего вида:

https://{ip сервера}:{порт}/{команда}?{параметры выполнения запроса}

В качестве ответа будет получен json, который содержит статус выполнения запроса и сам ответ.

API trassir позволяет получить доступ к real-time видеопотоку и хранилищу с архивом видео путем непосредственного чтения видеофайла (по протоколу TCP/IP, RTSP) или путем генерации скриншотов. Для получения полноценного доступа к api trassir необходимо:

  1. Создать сессию с заданным сервером trassir
  2. Получить перечень каналов (ip-камер), доступных для просмотра на сервере.

Рассмотрим подробнее данные этапы.

Под созданием сессии понимается получение идентификатора sid. Данный идентификатор позволяет пользователю взаимодействовать с сервером trassir через его api. Для того, чтобы создать сессию с сервером, необходимо авторизоваться на сервере выполнив следующий get запрос:

https://{ip сервера}:8080/login?{логин пользователя} =login&password={пароль}

Такие параметры подключения, как ip сервера, логин пользователя и пароль можно узнать у администратора необходимого вам сервера trassir.

Результатом выполнения запроса является json, содержащий 2 параметра:

  1. Success – статус выполнения запроса (1-успешно, 0 – произошла ошибка)
  2. Sid – идентификатор текущей сессии на сервере trassir. Данный идентификатор имеет TTL = 15 минут, который обновляется при каждом совершенном запросе к серверу.

Ниже представлен результат выполнения запроса:

{
«sid»: «CUNKJyO3»,
«success»: 1
}

Далее необходимо получить список каналов (ip-камер) для возможности взаимодействия с ними. Для получения перечня каналов выполняется следующий get запрос:

https://{ip сервера}:8080/channels?sid={полученный id сессии на предыдущем шаге}

  1. Channels – действующие каналы (ip-камеры)
  2. Zombies – каналы, которые недоступны для просмотра по различным техническим причинам

Для нас интересны только действующие каналы, которые представляют собой массив json объектов следующего вида:

{
«guid»: «{Идентификатор камеры}»,
«name»: «{Наименование камеры}»,
«rights»: «259»,
«codec»: «h264»,
«have_mainstream»: «1»,
«have_substream»: «1»,
«have_hardware_archive»: «0»,
«have_ptz»: «0»,
«fish_eye»: 0,
«have_voice_comm»: «0»,
«aspect_ratio»: «auto»,
«flip»: «»,
«rotate»: «»
}

В этих объектах нас интересуют поля:

  1. Guid – идентификатор камеры
  2. Name – наименование камеры, задаваемое администратором (необходимо для возможности просмотра фрагмента видео в клиенте trassir)

После получения перечня камер и идентификатора сессии можно полноценно использовать api trassir для получения данных.

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

Для получения скриншота по заданному времени необходимо выполнить следующий get запрос:

https://{ip сервера}:8080/screenshot?sid=sid&guid=guid&timestamp=timestamp}

На выходе мы увидим скриншот с заданной камеры в заданный момент времени.

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

В качестве входных данных используется xlsx файл с таблицей следующего формата:

Сами входные данные сгруппируем и результат занесем в очередь для многопоточной обработки. Ниже представлен код обработки входных файлов:

df = pd.read_csv(‘1.csv’, sep=’;’)
queue = mp.Queue()
servers = {}
df[‘start’] = pd.to_datetime(df[‘start’])
df[‘end’] = pd.to_datetime(df[‘end’])
for row in df.itertuples():
key = (row.ip, row.port, row.username, row.password)
value = (row.start, row.end)
if (row.ip, row.port, row.username, row.password) not in servers:
servers[key] = []
servers[key].append(value)

for key, value in servers.items():
queue.put({key: value})

За многопоточную загрузку отвечает метод load класса ProcessingVideo. Данный класс принимает на вход 2 параметра: очередь обработки и количество обработчиков. Внутри данного объекта мы инициализируем объекты Worker, которые в свою очередь создают отдельный поток для загрузки на локальную машину скриншотов посекундно.

class Worker(mp.Process):

def __init__(self, queue):
mp.Process.__init__(self)
self.queue = queue

def run(self):
while True:
if self.queue.empty():
break
data = self.queue.get()
for (ip, port, username, password), operations in data.items():

trass = RemoteTrassirArchive(ip, port, username, password)
trass.load_screenshots(operations)
print(‘done’)

class ProcessingVideo:

def __init__(self, queue, count_proc=2):
self.count_proc = count_proc
self._process_list = []
self.queue = queue
self._killer = ProcessKiller(self._process_list)

def initialize_workers(self):
for i in range(self.count_proc):
self._process_list.append(Worker(self.queue))

def load(self):
self.initialize_workers()
try:
for proc in self._process_list:
proc.start()
except KeyboardInterrupt as e:
print(‘Аварийное завершение работы’)

Управление загрузкой скриншотов определено в объекте RemoteTrassirArchive. Данный объект инициализирует объект Request, который отвечает за выполнение запросов к http серверу trassir и определяет работающие камеры на сервере, инициализируя их в объектах Camera. В объекте Camera реализована основная логика загрузки скриншота с конкретной камеры на сервере trassir. Сама загрузка скриншотов с камеры на конкретном сервере производится последовательно. Решение последовательной загрузки скриншотов с одного сервера было принято для того, чтобы максимально минимизировать нагрузку на канал.

class Request:

def __init__(self, ip, port, sid=»):
self.ip = ip
self.port = port
self.session = sid

def create_session(self, username, password):
content_type, value = self.get(f’https://{self.ip}:{self.port}/login’,params={‘username’:username, ‘password’:password})
self.session = value[‘sid’]

def _json_deserialize(self, json_text) -> dict:
return json.loads(json_text[:json_text.index(‘/*’)] if json_text.find(‘/*’)>-1 else json_text)

def get(self, url, params:dict={}):
if self.session != »:
params[‘sid’] = self.session
response = r.get(url, params=params, verify=False)
value = self._json_deserialize(response.text) if response.headers[‘Content-Type’].startswith(‘application/json’) else response.content
return response, value

class Camera:

def __init__(self, server, guid, name):
self._request = server
self._guid = guid
a = ‘:\/*?<>|»‘
self.name = name
for char in a:
self.name = self.name.replace(char, ‘-‘)

def _save_image(self, path, img):

with Image(f'{path}.jpeg’, ‘wb’) as f:
f.write(img)

def load_screenshot(self, path: str, timestamp):
print(path)
response, img = self._request.get(f’https://{self._request.ip}:{self._request.port}/screenshot/{self._guid}’, params={‘timestamp’: str(timestamp)})
if not response.headers[‘Content-Type’].startswith(‘image/jpeg’):
print(f’Изображение с камеры {self._guid} по таймкоду {timestamp} не удалось загрузить’)
return

self._save_image(path+’_’+str(timestamp), img)

def load_video(self, dt_start, dt_end):
dt_s = int(dt_start.timestamp())
dt_e = int(dt_end.timestamp())
if not os.path.isdir(‘data’):
os.mkdir(‘data’)

path = f’data/{self._guid}_{self.name}_{dt_s}_{dt_e}’.replace(‘:’, ‘-‘)

for i in range(dt_e-dt_s):
timestamp = dt_s + i
self.load_screenshot(path, timestamp)

class RemoteTrassirArchive:

def __init__(self, ip, port, username, password, mock=False):
self.url = f’https://{ip}:{port}’
self._server = Request(ip, port)
self._server.create_session(username, password)
self.camers={}

response, channels = self._server.get(self.url+’/channels’)

self.camers = {}

for channel in channels[‘channels’]:
self.camers[channel[‘name’]] = Camera(self._server, channel[‘guid’], channel[‘name’])

def load_screenshots(self, operations):
for cam_name, dt_s, dt_e in operations:
print(cam_name in self.camers.keys())
if cam_name in self.camers:
self.camers[cam_name].load_video(dt_s, dt_e)

Сами загруженные картинки записываются в папку data со следующим шаблоном {сервер}_{камера}_{дата начала}_{ дата конца}_{момент времени}.jpeg

В итоге имеем инструмент, позволяющий автоматизировано собирать датасет для обучения моделей компьютерного зрения используя доступные камеры видеонаблюдения. Полный код данной программы выложен на github.

Спасибо за прочтение! Буду рад вашим комментариям!

Уважаемые читатели Low-voltage Blog! В заметке о результатах блога за два первых месяца я обещал начать серию обучающих статей о принципах и особенностях проектирования в специализированных CAD системах. Сегодня обсудим существующее программное обеспечение по проектированию систем видеонаблюдения.


Содержание:

1. CCTVCAD Software (VideoCAD)
2 Joint Video Surveillance Group JVSG (IP Video System Design Tool)
3. Программное обеспечение и плагины от производителей оборудования
3.1 Програмное обеспечение Pelco 3D Camera Tool
3.2 Плагин Axis Camera Extension для SketchUP
3.3 Плагин Axis Camera Families для Autodesk® Revit®


Кому адресован этот блог и почему моему мнению можно доверять.

Мои контакты — пишите по любым интересующим вопросам, в том числе предложения о сотрудничестве.


По данной тематике есть статья в уважаемом издании Алгоритм Безопасности.

1. CCTVCAD Software (VideoCAD)

CCTVCAD Software — российская компания, основана в 2003 г. Помимо своего основного продукта — VideoCAD (и нескольких его усеченных версий), имеет целую линейку дополнительных программ, плагинов и калькуляторов для автоматизации различных аспектов проектирования систем видеонаблюдения, среди которых VideoCAD Plugin for SketchUp, CCTVCAD Lab Toolkit, IP Camera CCTV Calculator, CCTV Design Lens Calculator и др.

VideoCAD

VideoCAD 8 Professional — интерфейс гибко настраивается

depth of focus

Моделирование параметров глубины резкости в VideoCAD

Основные функции и возможности VideoCAD:

    1. Расчёты (геометрических параметров зоны обзора в любых положениях камеры; горизонтальных проекций зон обнаружения человека и опознавания человека, чтения автомобильного номера; расчет сколько % от размера экрана, пикселей, миллиметров (дюймов в случае английского формата измерений) будет занимать изображение на мониторе любого объекта в зоне обзора; расчет глубины резкости каждой камеры в проекте; расчет длин и электрических параметров кабелей; расчет освещенности, создаваемой светильниками, включая разрядные лампы со сложным спектром и инфракрасные светодиодные прожектора и др.)
    2. Работа с 2D проекциями (отображение на 2D планировке результатов расчетов: проекций зон обзора, проекций зон обнаружения и опознавания человека, глубины резкости, тестового объекта, кабелей и светильников; визуализация разным цветом или типом штриховки пространственное разрешение и размер поля зрения; построение горизонтальных проекций зон контроля камер с учётом затенений, создаваемых препятствиями на сцене; возможность выбирать место установки и визуализировать зоны контроля поворотных камер, dome камер и камер с круговым обзором; моделирование горизонтальной проекции зоны обзора и визуализация распределения пространственного разрешения камер с панорамным обзором fisheye / panoramic; моделирование влияния дисторсии объектива на форму зоны обзора и её проекций и на распределение пространственного разрешения; корректное моделирование широкоугольных объективов с сильной дисторсией и др.)
    3. 3D моделирование объекта видеонаблюдения и зон обзора камер (трехмерная визуализация границ зон обзора камер с учетом пространственного разрешения, затенений, дисторсии объектива; трехмерная визуализация зоны контроля поворотных камер, dome камер и камер с круговым обзором; визуализация покрытия зоной контроля окружающих предметов и распределения пространственного разрешения камер с панорамным обзором fisheye / panoramic; возможность загрузки готовых 3D моделей из 3ds max и Sketchup; возможность использования 3D моделей-территорий, для размещения внутри них камер, построений и других 3D моделей и др.)
    4. Моделирование изображений от камер с учетом параметров камеры и условий сцены (моделирование параметров наблюдаемой сцены (освещение, ограничения видимости); моделирование светильников с фотометрической точностью, с учётом спектра излучения и спектральной чувствительности сенсоров видеокамер, включая разрядные лампы со сложным спектром и инфракрасные светодиодные прожектора; моделирование параметров видеокамер (спектральная чувствительность; количество пикселей видеосенсора, разрешение; минимальная освещённость при известном отношении сигнал/шум, IRE и апертуре; максимальное отношение сигнал/шум; электронный затвор; АРУ; компенсация встречной засветки; гамма коррекция; камеры день/ночь, частота кадров, чересстрочная развёртка, global shutter и rolling shutter); моделирование параметров объективов (фокусное расстояние; диафрагма; АРД DC и Video Drive, разрешение); моделирование изображения от мегапиксельных камер с количеством пикселей превышающим количество пикселей на экране Windows (до 100 мегапикселей и более!) с использованием PiP (Picture in Picture) и без PiP; возможность рассчитать и смоделировать глубину резкости каждой видеокамеры в проекте; возможность моделировать яркость. контраст. компрессию, резкость по горизонтали и вертикали; возможность моделировать движущиеся объекты, частоту кадров видеокамер, создавать анимированные изображения с движущимися 3D моделями; возможность моделирования размытие и искажения движущихся 3D моделей в зависимости от параметров камеры (время экспозиции, чересстрочная развёртка, rolling shutter); моделирование изображений с учетом дисторсии объектива (бочкообразной и подушкообразной); корректное моделирование широкоугольных объективов с сильной дисторсией; моделирование разрешения изображения и ограничения поля зрения камер с панорамным обзором fisheye / panoramic; на основании моделей сцены и оборудования получить модель реальной картинки с каждой видеокамеры в проекте и др.)
    5. Проектирование интерфейса оператора (возможность моделировать размер и разрешение мониторов; возможность создавать анимированные модели мониторов в виде html файлов, с движущимися 3D моделями, учитывая частоту кадров каждой камеры и др.)
    6. Импорт из других программ (возможность размещать видеокамеры на готовых планировках в форматах *.bmp, *.jpg, *.emf, *.wmf, *.png, *.gif, *.tif, *.pdf, AutoCAD *.dwg, *.dxf.; возможность импорта построений с 2D подложки в формате AutoCAD *.dwg, *.dxf в 3D построения VideoCAD в полуавтоматическом режиме; импорт 3D моделей предметов и 3D моделей территорий через плагин к SketchUP; импорт растровых изображений для отображения в 3D; импорт параметров моделей камер через вставку из Excel в Таблицу Моделей камер и др.)
    7. Экспорт (возможность экспортировать полученный чертёж в любой из следующих графических форматов: *.bmp, *.jpg, *.emf, *.wmf, *.png, *.gif, *.tif, AutoCAD *.dxf, AutoCAD *.dwg, *.pdf (raster and vector), PLT (HPGL/2), CGM (Computer Graphic Metafile), SWF (Adobe Flash); расширенный экспорт в форматы AutoCAD *.dwg, *.dxf.; экспорт в файл DXF 3D зон обзора и покрытия с учетом дисторсии объектива, пространственного разрешения, затенений и ограничений; экспорт 3D моделей изображений камер в любой из форматов: *.bmp, *.jpg, *.gif, *.tif, *.png.; экспорт анимированных моделей изображений с движущимися 3D моделями в формат animated gif; экспорт изображений с мониторов в форматы *.bmp, *.jpg,*.gif,*.tif,*.png.; экспорт мониторов в анимированные модели мониторов в виде html файлов, с движущимися 3D моделями, учитывая частоту кадров каждой камеры; возможность получить текстовый отчет, оформленный в соответствии с ГОСТ 2.105-95, с полным описанием всех видеокамер в проекте, зон обзора и кабелей для вставки в пояснительную записку проекта; возможность получить кабельный отчет; получение отчета в формате PDF, с полным описанием всех видеокамер в проекте, зон обзора и кабелей; возможность получить развёрнутую настраиваемую таблицу всех исходных и рассчитанных параметров камер в проекте в форматы *.txt, *.csv, *.rtf, *.xls, *.htm. и др.)
    8. Печать (печать 2D чертежа в векторном или растровом виде на одном или нескольких листах под склейку, использование заготовленных рамок со стандартными штампами и логотипами; печать моделей изображений от камер и мониторов; печать 3D изображений из окна 3D Мир; печать таблицы камер и таблицы моделей камер целиком или отдельных фрагментов и др.)
    9. База данных моделей камер (ведение базы данных моделей видеокамер, назначать камерам в проекте разные модели, сравнивать модели между собой).

VideoCAD

VideoCAD 8 Professional — широкие функциональные возможности

AESG VideoCAD

Настройка параметров экспозиции в VideoCAD, моделирование «смаза» из-за движения авто

Скажу честно, то что я до сих пор не использовал колоссальные возможности специализированных CAD-систем при проектировании — моя ошибка, просто посыпаю голову пеплом 🙁 . Срочным порядком начинаю изучать VideoCAD 8.1 Professional, и, конечно, буду делиться с вами, уважаемые читатели Low-voltage Blog, своими новыми навыками. Планируется создание видео-обзора данной темы на собственном канале youtube. Следите за новостями в блоге!


Смотрите так же статью Как загрузить базу моделей камер в VideoCAD?

и Распознавание автомобильных номеров: проектирование, часть 1


2. Joint Video Surveillance Group JVSG (IP Video System Design Tool)

JVSG — так же российская компания. Основной продукт — IP Video System Design Tool. Есть так же старая версия — CCTV Design Tool.

 IP Video System Design Tool

IP Video System Design Tool — интерфейс

Камеры АЗС

IP Video System Design Tool — интерфейс

Основные функции и возможности IP Video System Design Tool:

    1. Расчёты (углов обзора, фокусных расстояний для объективов; размера жестких дисков для хранения видеоархива; сетевого трафика для IP камер; горизонтальных проекций зон детектирования, распознавания, идентификация человека; построение горизонтальных проекций зон контроля камер с учётом затенений, создаваемых препятствиями на сцене и др.)
    2. Работа с 2D проекциями (построение горизонтальных проекций зон контроля камер с учётом затенений, создаваемых препятствиями на сцене и др.)
    3. 3D моделирование объекта видеонаблюдения и зон обзора камер (отображение зон идентификации, распознавания, детекции на 3D виде; настройка уровня прозрачности зон идентификации, распознавания, детектирования и мониторинга; отображение под 3D видом лица человека с плотностью пикселей соответствующей заданному расстоянию от камеры, углу обзора, и разрешающей способности камеры; дополнительные 9 тестовых 3D моделей людей с различными лицами (3 европейца, 3 араба, 3 темнокожих) для тестирования распознавания лиц оператором по методике Европейского стандарта EN50132-7; функция добавления изображений, вывесок, знаков на стены; поддержка мультисенсорных камер компании Dallmeier electronic включая мультифокальные матричные камеры Panomera® и др.)
    4. Моделирование изображений от камер с учетом параметров камеры и условий сцены кно “Виды с камер” (режим видеорегистратора) для отображения от 2 до 16 камер)
    5. Импорт из других программ (возможность размещать видеокамеры на готовых планировках в форматах PDF, JPEG, BMP, PNG,  AutoCAD 2013, 2014, 2015 DWG, DXF; импорта пользовательских 3D моделей из Goolge 3D Warehouse или SketchUP в формате Collada и др.)
    6. Экспорт (возможность экспортировать полученный чертёж в PDF; функция для публикации изображения в облако для быстрого обмена изображениями)

 IP Video System Design Tool

IP Video System Design Tool — план

Кассовая зона

IP Video System Design Tool — 3D моделирование

Функционал

Основной паттерн работы в IP Video System Design Tool следующий:

    1. загружаем подложку в одном из графических форматов — bmp, jpg, jpeg, png, pdf либо подложку из AutoCAD в форматах dwg, dxf
    2. создаем на основе 2D подложки 3D модель объекта за счет встроенных в программу инструментов — стен, окон, дверей, проемов, готовых 3D-моделей людей, транспорта и бытовых предметов. Также есть возможность загрузить любые 3D модели формата DAE (Collada Format) — для лучшей визуализации.
    3. загружаем на полученную 3D модель объекта камеры видеонаблюдения, используя базу данных камер видеонаблюдения, имеющуюся в программе, либо самостоятельно заполнив необходимые параметры
    4. на вкладке План местности получаем параметры зоны обзора, в том числе т.н. “мертвую зону” под камерой, учитываем “затенение” от препятствий на плане, считаем пространственное разрешение (число пикселей на метр в зависимости от удаления от камеры), учитываем решение задачи гарантированной идентификации, идентификации, распознавания, обзора, детекции или мониторинга по критериям, прописанным в европейских нормах BS EN 62676-4
    5. на вкладках 3D вид и Виды с камеры получаем модель изображения с камеры, которую при желании можно экспортировать в jpg, pdf или xml формат для согласования с заказчиком или оформления коммерческого предложения (КП)
    6. на вкладке 3D вид можно изменять основные параметры камеры, следя за изменением модели формируемого программой изображения. В частности можно изменить высоту установки камеры, выбрать другую модель камеры, изменить фокусное расстояние камеры (для вариофокальных моделей), повернуть камеру в горизонтальной и вертикальной плоскости
    7. На вкладке Трафик и объем диска можно рассчитать битрейт с камер и требуемый объем архива для подбора сетевого оборудования и системы хранения данных (жестких дисков). Впрочем пользоваться данной возможностью не удобно, потому как не реализована автоматическая подгрузка данных о количестве и типе камер из основного проекта
    8. После окончательного согласования оборудования и мест расположения можно сформировать отчет о проекте в pdf, куда включить название проекта, подгрузить свой логотип и написать имя автора (проектировщика), включить план местности, информацию о камерах, изображение с камер, места установки камер и карту, оценку трафика (битрейта) от камер

 IP Video System Design Tool

IP Video System Design Tool — 3D моделирование картинки с камер видеонаблюдения

Магазин при АЗС

IP Video System Design Tool — добавление 3D моделей машин, людей, предметов

Плюсы и минусы

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

    • нет возможности экспорта в dwg формат, что ставит крест на использовании в связке с AutoCAD
  • нет моделирования освещенности, параметров чувствительности видеокамер, учета влияния дисторсии объектива, времени экспозиции, учета влияния движения объекта в кадре, глубины резкости, др. параметров камеры и объектива, а также сцены съемки и параметров монитора оператора

Тем не менее для составления коммерческих предложений для заказчиков систем видеонаблюдения при стандартных, не слишком сложных задачах программа IP Video System Design Tool подходит практически идеально. Pro version стоит 17 800 руб., о целесообразности покупки — решайте самостоятельно, сложно что то советовать. Думаю в целом софт себя окупит при грамотном использовании именно за счет увеличения конверсии от составляемых КП.

Да и обосновать большое число камер (если это действительно требуется) перед заказчиком будет куда проще.

Если же требуется программное обеспечение для полноценного проектирования систем видеонаблюдения, то имеет смысл посмотреть в сторону VideoCAD Professional или Lite от компании CCTVCAD Software.

 IP Video System Design Tool

IP Video System Design Tool — добавление 3D моделей машин, людей, предметов


upd

Написал большую статью по новой 11 версии IP Video System Design Tool. Появилось много новых удобных функций.

3. Программное обеспечение и плагины от производителей оборудования

Некоторые производители оборудования создали свои решения по моделированию систем видеонаблюдения.

3.1 Програмное обеспечение Pelco 3D Camera Tool

Инструмент от Pelco by Schneider Electric. Чудес не бывает, инструмент существенно менее функциональный, чем программное обеспечение специализирующихся на этом компаний. Из названия понятно, что данный инструмент позволяет моделировать зоны обзора и изображения от камер Pelco.

3.2 Плагин Axis Camera Extension для SketchUP

Из названия понятно, что данный инструмент позволяет в SketchUP моделировать зоны обзора и изображения от камер AXIS Communications. Более подробно тут.

3.3 Плагин Axis Camera Families для Autodesk® Revit®

Из названия понятно, что данный инструмент позволяет в Autodesk® Revit® моделировать зоны обзора и изображения от камер AXIS Communications.

AXIS plugin for Autodesk Revit

Зона наблюдения видеокамеры в Revit

Что я могу сказать о Axis plugin for Autodesk Revit®?

✅ В плюсах поддержка трёх версий Revit — 2017, 2018 и свежего 2019 — а это дорогого стоит, ведь многие плагины обновляют с сильным запозданием, а прямой совместимости в Revit нет и в помине — что даёт массу неудобств конечным юзерам (но кого они в Autodesk волнуют?)

✅ Функционал — обновление и загрузка в проект семейств камер Axis Communications с довольно обширным набором свойств и настроек

✅ Поиск в базе данных камер по названию и фильтры по характеристикам

AXIS plugin for Autodesk Revit

Product Selector, строенный в Revit

✅ Отображение на планах этажей и 3D видах зон обзора, отдельно показана зона от камеры до заданной в свойствах камеры граничного значения плотности пикселей

✅ В семействах с помощью параметра видимости можно выбрать способ монтажа и соответствующий тип кронштейна

✅ Утилита умеет строить 3D вид, совпадающий с зоной наблюдения выбираемой в проекте камеры

Плагин конечно лучше голого семейства, но по уровню автоматизации не идёт ни в какие сравнения с лидерами рынка софта для проектирования видеонаблюдения Videocad и IP VIDEO SYSTEM DESIGN TOOL. Использовать его в «бою» я бы тоже не решился — по-крайней мере для внутреннего видеонаблюдения, ведь нет элементарных и крайне нужных функций. Например — учёт затенения зоны обзора стенами и другими препятствиями. А чтобы посмотреть объёмную зону обзора внутри здания придется настраивать сечения — это конечно вообще не удобно.

AXIS plugin for Autodesk Revit

Посмотреть 3D зону наблюдения внутри здания — задача не тривиальная в Revit

Пока плагин больше маркетинговый инструмент в ассортименте действительно полезных утилит Axis, чем реальное орудие труда проектировщика видеонаблюдения.


До недавнего времени я сам пользовался целым набором различных утилит, своих / чужих exel-их файлов, AutoCAD-ом с установленными Lisp-ами и прочими отдельными наработками, мало увязанными воедино. Сейчас собираюсь активно изучать VideoCAD. Огромное спасибо команде CCTVCAD Software и лично Станиславу Уточкину за предоставленное на тестирование программное обеспечение.


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


Уважаемые читатели блога, если Вы заметили в статье неточность, сложность в изложении материала либо некорректность используемых терминов — прошу написать в комментариях либо в личном сообщении, все замечания будут обязательно учтены и по-возможности исправлены все недочёты.


Подписывайтесь на выпуски моего подкаста на Podster.fm.

Подписывайтесь на мой канал в Telegram! Помимо новостей блога в канале публикуются мои повседневные наблюдения и заметки околослаботочной тематики ? .


Жду ваших вопросов, комментариев и предложений.

Жмите кнопки социальных сетей, подписывайтесь на email рассылку, добавляйте блог в свою RSS-ленту, вступайте в группы блога в социальных сетях!


Все материалы данного блога принадлежат его автору. Использование без ссылки на данный блог с указанием авторства не допускается!


Похожие статьи

  1. IPICA / JVSG — софт для проектирования видеонаблюдения
  2. Камеры Болид в AutoCAD
  3. Распознавание автомобильных номеров: проектирование, часть 1
  4. VideoCAD 8.1 Professional. Первые результаты использования
  5. Как загрузить базу моделей камер в VideoCAD?
  6. Как загрузить базу моделей камер в AutoCAD?
  7. Плагин Axis Camera Extension для SketchUp® 3D

Разработка интеграционного программного приложения для создания мобильной системы видеонаблюдения

ВС. Никулин, И.Л. Рева ФГОУ ВО Новосибирский государственый технический университет (Новосибирск)

Аннотация: В статье представлено разработанное программное приложение для создания автономной, мобильной,

беспроводной системы видеонаблюдения. Стоит отметить, что главное достоинство беспроводной передачи данных, это мобильность создания интеграционных систем. В ходе работы решается ряд проблем по созданию интеграционной мобильной системы охранного видеонаблюдения. На данный момент потребность таких систем на рынке существенно возрастает и возникает серьёзная проблема с их доступностью, в связи с высокой стоимостью. Авторами предложен подход и решение по созданию беспроводной, мобильной и доступной системы охранного видеонаблюдения, которую легко развернуть рядовому пользователю персонального компьютера — ПК без опыта работы в данной области. Разработанная система позволит сэкономить время и средства на монтаже и обслуживании системы видеонаблюдения.

Ключевые слова: программное приложение, видеокамера, беспроводное видеонаблюдение, передача видеосигнала, мобильные технологии, охранные системы, android.

ВВЕДЕНИЕ

При создании современных систем видеонаблюдения возникают достаточно много вопросов и проблем:

Высокая стоимость оборудования и интеграция систем видеонаблюдения; Качество передаваемого видео сигнала (изображения);

Трудности при подключение

дополнительных модулей; Мобильность системы видеонаблюдения; Доступность системы видеонаблюдения.

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

Технология передачи видеосигнала с камеры мобильного телефона через беспроводной канал связи WI-FI, на ПК находит все больше применение при этом есть некоторые проблемы [1]. Несмотря на это возможность использования смартфонов, сетевого роутера и программного обеспечения открывает большие перспективы в

области систем видеонаблюдения.

ХОД РАБОТЫ

На данный момент на рынке охранных систем, достаточно большое количество предложений, как аналоговых, так и IP камер. По стоимости аналоговое оборудование сейчас дешевле в среднем на 20-30%, но на стадии интеграционных работ, разница снижается до 5-10%. Мы исследовали только IP системы — это системы видеонаблюдения построенные на основе передачи данных по интернет протоколу (Internet Protocol — IP). Но обычная IP система на данный момент не решит одновременно всех вопросов, таких как мобильность системы, доступность, и стоимость. Найти камеры в низкой ценовой категории, и с возможностью работы в беспроводных сетях обычному пользователю не так просто, да и цена у таких камер достаточно высока. Именно поэтому возник вопрос о создании охранной системы видеонаблюдения на базе мобильных телефонов со встроенной операционной системой android версии 2.1 и выше.

Плюсы использования мобильных телефонов в качестве систем охранного наблюдения:

• Доступность — данные аппараты продаются в каждом магазине цифровой техники;

• Стоимость — цена данных устройств на рынке цифровой техники начинается от 1500 рублей, тогда как самая дешевая камера наблюдения с поддержкой Wi-Fi стоит 6500 рублей;

• Мобильность — развернуть систему на мобильных телефонах не составит труда, достаточно лишь разместить камеры наблюдения на нужных позициях и включить передачу видеосигнала с камеры;

• Автономность — Наличие аккумулятора в телефоне дает возможность работать устройству в автономном режиме без использования постоянного источника питания в течении 5-7 часов;

• Качество — качество изображения получаемых с камеры мобильного устройства превосходит по качеству обычные аналоговые камеры на базе

матриц Sony, и не уступает по качеству обычных IP камер [2,3]; На Рис. 1 представлена схема применения мобильных телефонов в системах охранного видеонаблюдения.

Рис. 1. Схема применения мобильных телефонов в системах охранного наблюдения

В сети интернет достаточно много приложений позволяющих передавать изображение с мобильных устройств на ПК, такие приложения разрабатываются для использования мобильных телефонов в место WEB-камер, при этом нет возможности подключить к компьютеру более одного мобильного телефона и записывать видеосигнал. Авторами разработано приложение, позволяющее подключать по беспроводному каналу Wi-Fi к ПК более одного мобильного устройства (телефона, смартфона), выводить видеосигнал в реальном времени и записывать его на ПК или память мобильно устройства с дальнейшей синхронизацией его с ПК. Для примера, на базе роутера TP-LINK серии N создаем беспроводную сеть «NetWorld». Далее подключаем смартфоны Alcatel One Touch 6010d с операционной системой android к данной сети. На смартфоны Alcatel One Touch 6010d

устанавливаем разработанное программное обеспечение, позволяющее в дальнейшем получать транслируемый звуковой и видеосигнал по сети Wi-Fi на принимающем устройстве [4]. После подключения к сети, получаем динамические ip-адреса на смартфонах, по которым мы уже будем получать видео сигнал на принимающем устройстве.

В качестве принимающего устройства может выступать как персональный компьютер, так и любое другое устройство на различных операционных системах (windows, android, iOS), что делает нашу систему еще более доступной. В нашем случае приемным устройством выступает ноутбук HP pavilion g6. По полученному IP адресу наших смартфонов, мы обращаемся с браузера Internet Explorer и получаем видеосигнал с камеры. На Рис. 2 и 3 приведены результаты работы разработанного программного приложения для создания автономной, мобильной, беспроводной системы видеонаблюдения.

MegaFon ^ ^ .ill 73% 1 15:04

Ш) http://192.168.0J 00:8888

Ч ¡Start]

IP: 192.168.0.100 Port: 8888 URL: http://192.168.0.100:8888

IftaTlJ

■m • Г ~ Server started

mä 3111.1

■.Q ; s 1 1» H

и TT к » ni 1 if Il N Л UK J Л 11 H м к it

Start Exit

Рис. 2. Использование приложения

Рис. 3. Полученное видео с камеры смартфона на приемном устройстве

ЗАКЛЮЧЕНИЕ

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

ЛИТЕРАТУРА

[1] Шелухин О.И. и др. Влияние различных типов ошибок в канал беспроводного доступа на качество систем видеонаблюдения — T-Comm — Телекоммуникации и Транспорт № 11, 2012, С 62-66.

[2] Иванов Ю.А. Методика оценки качества декодирования видео стандарта H.264/AVC/SVC в беспроводных сетях / Иванов Ю.А., Лукьянцев С.А. // Электротехнические и информационные комплексы и системы, 2009, т.5, №4, С.35-48.

[3] Шелухин О.И. Оценка качества передачи потокового видео в телекоммуникационных сетях с помощью программно-аппаратных средств / Шелухин О.И., Иванов Ю.А. // Электротехнические и информационные комплексы и системы, 2009, т.5, №4, С.48-56.

[4] Беднаж В.А. Огурцова А.М Особенности трансляции потокового видео по сетям широкополосного беспроводного доступа -Современная наука: актуальные проблемы и пути их решения — № 5., 2013.

Владимир Никулин — бакалавр кафедры защиты информации Новосибирского государственного технического университета по направлению информационная безопасность. E-mail: nikulin-94@inbox.ru

Рева Иван Леонидович —

декан факультета Автоматики и вычислительной техники НГТУ, к.т.н. Основное направление научных

исследований — защита речевой информации. Имеет более 20 публикаций

Е-шаП: reva@corp.nstu.ru

The Development of Integration Software to Create Mobile Applications Surveillance System

VLADIMIR NIKULIN, IVAN REVA

Abstract: This paper presents the developed software application to create autonomous, mobile, wireless surveillance systems. It should be noted that the main advantage of wireless data mobility is the creation of systems integration. During the work a number of problems were solved by the creation of an integration of mobile video surveillance system. At the moment, the need for such systems is increasing and there is a a serious problem with their availability, due to the high cost. The authors of proposed an approach and the decision to create a wireless, mobile and affordable video surveillance system that is easy to deploy average user of a personal computer — PC without experience in this area. The developed system allows saving time and money on installation and maintenance of CCTV systems.

Key words: application software, video camera, wireless video surveillance, video transmission, mobile technology, security systems, android.

REFERENCES

[1] Sheluhin O.I. i dr. Vlijanie razlichnyh tipov oshibok v kanal besprovodnogo dostupa na kachestvo sistem videonabljudenija — T-Comm — Telekommunikacii i Transport № 11, 2012, S 62-66.

[2] Ivanov Ju.A.Metodika ocenki kachestva dekodirovanija video standarta H.264/AVC/SVC v besprovodnyh setjah / Ivanov Ju.A., Luk’jancev S.A. // Jelektrotehnicheskie i informacionnye kompleksy i sistemy, 2009, t.5, №4, S.35-48.

[3] Sheluhin O.I. Ocenka kachestva peredachi potokovogo video v telekommunikacionnyh setjah s pomoshh’ju programmno-apparatnyh sredstv / Sheluhin O.I., Ivanov Ju.A. // Jelektrotehnicheskie i informacionnye kompleksy i sistemy, 2009, t.5, №4, S.48-56.

[4] Bednazh V.A. Ogurcova A.M Osobennosti transljacii potokovogo video po setjam shirokopolosnogo besprovodnogo dostupa — Sovremennaja nauka: aktual’nye problemy i puti ih reshenija — № 5, 2013.

Содержание:

  1. Камера HI3518E_50H10L_S39
    1. Motion
    2. ZoneMinder
    3. AVReg
    4. Pro Surveillance System
    5. Trassir
    6. Xeoma
    1. Установка
    2. Настройка
    3. Android
  2. Выводы

Камера HI3518E_50H10L_S39

При реализации системы видеонаблюдения для загородного дома, в рамках концепции «разумной достаточности», было решено использовать IP-видеокамеры китайского производства максимально удовлетворяющие поставленным задачам, но при минимальной стоимости. Поскольку до этого у меня не было совершенно никакого опыта по организации видеонаблюдения собственными силами, то пришлось действовать осторожно и шаг за шагом входить в чудный мир IP-камер, DVR и NVR. Стараясь минимизировать затраты, я решил набраться знаний из Сети. Но, чтение немногочисленных форумов не привело к четкому пониманию какую же именно модель камеры стоит брать и какими характеристиками она должна обладать. А цены на IP-камеры от известных производителей на местном рынке просто повергают в шок. Я решил рискнуть. Для начала была приобретена одна IP-видеокамера с более-менее удовлетворительными характеристиками — мегапиксельная матрица с хорошими показателями, удовлетворительная мегапиксельная оптика и поддержка стандарта ONVIF. Кроме поддержки стандарта ONVIF, по заявлению продавца, камера способна выдавать поток по стандарту H.264 с максимальным разрешением в 1280х720 пикселей при 25 кадрах в секунду и оснащена автоматической ИК подсветкой. Подключение камеры осуществляется исключительно по витой паре. Я искал именно такую камеру, поскольку, на мой взгляд, протокол MJPEG уже устарел в том плане, что он дает излишне большую нагрузку на сеть. Ведь в MJPEG данные идут практически в несжатом потоке (хотя в сами каждры сжаты по алгоритму JPEG). С моей точки зрения, более совершенный поток H.264 обеспечит меньший трафик в локальной сети и последующее экономное хранение записей на жестком диске. Более подробную характеристику камеры дать нельзя, поскольку это чистый OEM и определить примерную модель можно только по используемому чипу и прочим, косвенным параметрам, таким как внешний вид. Итак, для тестовой конфигурации у нас используется камера «HI3518E_50H10L_S39», назовем ее именно так.

Китайская noname IP-камера HI3518E_50H10L_S39

Китайская noname IP-камера HI3518E_50H10L_S39

Камера поставляется с родным программным обеспечением под платформу Windows, кроме того получить доступ к ней можно и через веб-интерфейс. Windows-версия программного обеспечения, в силу того, что целевая операционная система для сервера мною выбрана Ubuntu (т. е. Linux), используются только для настройки параметров камеры и проверки ее работоспособности. Вообще, первоначально я планировал, что никакое дополнительное программное обеспечение для сервера использоваться не будет. По сути сама IP-камера является мини-компьютером, работающем под управлением разновидности операционной системы Linux. И камера самостоятельно может детектировать движение в кадре, включать подсветку, рассылать уведомления по электронной почте о наличии движения в кадре и записывать данные на FTP сервер. Я предполагал, что камера именно так и будет работать, будет определять движение в кадре и записывать короткие видеоролики с движением на мой микросервер под Ubuntu по протоколу FTP.

Однако, жизнь внесла свои коррективы в мои планы. Приобретенная камера чудесно обрабатывает движение в кадре, генерирует события и отправляет на электронную почту фотоснимки движения. Но в силу того, что камера не оснащена дополнительной памятью, то она просто физически не может записывать видеоролики и отправлять их на FTP. Для этого требуется предварительно записать видеоролик на внутреннюю память, а уже только затем закачать его на FTP. И максимум, что можно получить от моей сверхдешевой камеры, так это запись фотографий скромного размера на FTP сервер. Кстати, в производительной локальной сети видеоролики с камеры можно записывать на сетевой диск (по протоколу NFS или SAMBA), но подобная возможность в текущей прошивке не реализована, хотя и была бы категорически полезной.

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

Как стало известно из моего исследования камеры, именно исследования, в текущей версии прошивки существует два канала по которым ведется вещание по протоколу RTSP. В обоих каналах, камера транслирует видео сжатое по стандарту H.264. Трансляций MJPEG или просто потоковой передачи JPEG картинок не обнаружено (хотя возможно, что это дело будущих прошивок). Для трансляции видеопотока используются следующие два URL:

rtsp://192.168.0.110:554/user=admin_password=tlJwpbo6_channel=1_stream=0.sdp?real_stream
rtsp://192.168.0.110:554/user=admin_password=tlJwpbo6_channel=1_stream=1.sdp?real_stream

Где первый поток считается основным и передается в максимальном качестве и разрешении. Этот поток используется для записи видеороликов в архив с максимальным качеством. Второй же поток, передает видеоданные в ухудшенном качестве как по разрешению, так и по количеству кадров в секунду. Предполагается, что второй поток будет использоваться программным обеспечением для определения движения в кадре. Настройки обоих потоков осуществляются через CMS (Camera Management System) представляемым производителем или продавцом камеры.

Настройка потоков камеры HI3518E_50H10L_S39 в поставляемом CMS

Настройка потоков камеры HI3518E_50H10L_S39 в поставляемом CMS

Следует заметить, что «родная» CMS работает с камерой по порту 34561, а для целей протокола ONVIF в камере задействован порт 8899. Оба порта меняются в настройках камеры через специальную утилиту DeviceManager идущей в комплекте с камерой. Кроме того, родное CMS отлично понимает сигналы от камеры в случае обнаружения движения и ему нет необходимости тратить ресурсы серверного компьютера для этой функции.

Выбор программного обеспечения

В мире камер IP-видеонаблюдения царит полная сумятица. Ведь до недавнего времени на рынке главенствовали системы аналогового видеонаблюдения. Такие камеры и комплекты можно найти в продаже и ныне, по очень низкой цене. Но подвергаясь давлению рынка, все больше и больше производителей переходят на выпуск IP-камер. Стараясь реализовать все задумки, на кои потенциально способен компьютер с подключенной видеокамерой, производители начали изобретать каждый свой собственный велосипед. Так, на свет появилось множество внутренних стандартов по обмену данными с IP-камерами. Не нужно упоминать о том, что IP-камеры одного производителя несовместимы с фирменным программным обеспечением другого. Для наведения порядка на рынке цифровых камер в 2008 году был создан форум Open Network Video Interface Forum (ONVIF), целью которого является стандартизация IP-камер и протоколов обмена с ними. С тех пор прошло уже 7 лет, но воз и ныне по там.

Стараясь как-то исправить ситуацию, независимые производители программного обеспечения для цифрового видеонаблюдения включают специфическую поддержку видеокамер различных производителей в свои продукты. Стоит только зайти на сайт любого из них и посмотреть на список поддерживаемых камер. Но в продаже их больше, намного больше. А с учетом генетической любви к копированию и модификации всего и вся, китайскими производителями, количество моделей камер на рынке стойко стремится к бесконечности. Если уж вас и угораздило приобрести себе камеру для видеонаблюдения не от раскрученного производителя, то нужно быть морально готовым к небольшим приключениям по совмещению аппаратного и программного обеспечения.

В целом все программы для видеонаблюдения можно разделить на три большие группы:

  • Свободное программное обеспечение.
  • Коммерческое программное обеспечение.
  • Облачное программное обеспечение.

При выборе программы для видеонаблюдения я исходил из того, что облачные сервисы мне не очень подходят, вернее, совсем не подходят по той причине, что не смотря ни на какие усилия, интернет в загородной среде вещь хоть и доступная, но еще далеко широкополосная. По мобильной среде 4G в лучшем случае можно получить 70 мегабит на Мегафоне или 20 мегабит на Yota, а проводные или оптические решения стоят как минимум в два раза дороже беспроводных. Поэтому облака пока мимо. При сборке микросервера внимание уделялось не только самому оборудованию, но и его стоимости. Для реализации проекта, в том числе, была использована бесплатная операционная система, та самая Ubuntu. И мой первый взгляд был обращен именно на бесплатные системы видеонаблюдения.

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

Motion

Motion разрабатывает энтузиаст из Дании. В один прекрасный день, программисту нечем было заняться и он взял и начал разработку продукта для имеющихся у него камер видеонаблюдения. Шло время, продукт набирал популярность, а количество его функций росло неимоверными темпами. И сейчас, по праву можно констатировать, что Motion — одна из самых популярных систем для организации видеонаблюдения с минимальным бюджетом. Система аскетична, нетребовательна к ресурсам и внятно настраивается через конфигурационные файлы. В штатной поставке никакой контрольной панели у Motion нет, однако, сторонние разработчики разработали дополнительные системы управления с доступом через веб-интерфейс.

Именно Motion я попробовал первым делом. Система установилась на мой микросервер с Ubuntu без каких-либо проблем, подхватила подключенную древнюю USB-веб-камеру Genius Eye и даже начала записывать с нее видео в режиме определения движения. Но все мои попытки подключить уже установленную и сконфигурированную NoName камеру HI3518E_50H10L_S39 привели лишь к полному фиаско и разочарованию. В попытках разобраться что к чему пришлось обратиться к документации. И, о ужас! Оказалось, что Motion работает только и исключительно с кодированием MJPEG если речь идет об IP-камерах. Дело в том, что протокол MJPEG прост для последующего анализа, в том числе и для анализа движения в кадре. Каждый кадр MJPEG — статическая картинка в формате родственном JPEG. В моей же камере, разработчик позабыл о MJPEG, сосредоточившись исключительно на современных стандартах кодирования. В H.264 берется статический кадр, который суть и есть картинка, а затем к нему добавляются только изменения в нем произошедшие. Такой подход позволяет значительно снизить поток данных с камеры и одновременно обеспечить приемлемое качество. Но за все нужно платить и для работы с видео в формате сжатия H.264 нужно использовать очень сложные алгоритмы и производительное железо. А поскольку моя камера способна выдавать поток только по H.264 (в старых прошивках для второго потока она все же выдавала MJPEG), то на работоспособность Motion без костылей по транскодированию на лету рассчитывать не стоило.

ZoneMinder

ZoneMinder разрабатывает уже какая-то Web2Wire LTD. И хотя сама программа бесплатна, но авторы настоятельно просят сделать хоть какой-то взнос, чтобы дальнейшая разработка не останавливалась. Внимательно изучив документацию на систему, релевантные статьи в сети и будучи наученным опытом с Motion, я решил установить ZoneMinder для начала на виртуальную машину. Спасибо проверенному временем VirtualBox от Oracle. Он спасает меня во множестве ситуаций, когда требуется проверить или обкатать то или иное программное обеспечение без риска угробить «операционку» на рабочем компьютере.

Итак, развернув Ubuntu на виртуальной машине, я приступил к тестированию. ZoneMinder установился без проблем, однако ему потребовалась установка Apache, MySQL и PHP. ZoneMinder работает на различных диалектах Linux, пакет доступен в различных форматах и даже в исходных кодах. Благодаря открытости его можно установить на подавляющем большинстве систем семейства Linux, в самых запущенных случаях просто компилируя пакет под нужную систему. Для Ubuntu существуют уже собранные пакеты, распространяемые как через «официальные» каналы, так и через частные источники (PPA). В официальных каналах, как правило, содержится немного устаревшая версия, а вот в PPA доступны самые последние творения программистов. Попробовав «официальную» версию и не добившись от нее толку, я установил и самую последнюю, стабильную версию из PPA репозитария.

Все настройки в ZoneMinder осуществляются через веб-интерфейс. Тут прописываются камеры, устанавливаются настройки детектирования движения, пути сохранения файлов и прочее. По обилию всевозможных настроек и плагинов, ZoneMinder — настоящий чемпион. Тут можно сделать почти все, что нужно и без особых проблем. Например, отключать запись видео, когда в зоне действия находится мобильный телефон (определение через Bluetooth и таймер). ZoneMinder располагает обширной библиотекой поддерживаемых устройств, начиная от фирменных и распространенных камер и заканчивая просто безродными ONVIF устройствами. С камерами типа моей, ZoneMinder обычно работает посредством FFMPEG или же VLC библиотек. При помощи FFMPEG происходит переконвертация потока с IP-камеры в нужный формат и последующий его анализ или запись в архив.

В некоторых статьях в сети, ZoneMinder ругают за излишнюю нагрузку на сервер и сравнивают его с практически не нагружающим железо Motion. Мое серверное оборудование хоть и относится к бюджетному классу, вовсе не хилое. А для виртуальной машины, в которой осуществлялся опыт по скрещиванию ZoneMinder и HI3518E_50H10L_S39, вообще выделен гигабайт ОЗУ и один логический процессор с частотой под 3 ГГц. Чего должно быть вполне достаточно для работы любого комплекта для наблюдения, тем более с одной камерой. Должны было, но по факту оказалось, что ZoneMinder выделенных ресурсов явно недостаточно. При попытке получения данных с камеры ZoneMinder, через некоторое время, впадает в настоящий ступор. Все его вызываемые функции начинают откликаться спустя несколько минут и это через веб-интерфейс!

На этом пришлось оставить попытки исследования возможности работы ZoneMinder и камеры HI3518E_50H10L_S39. Тем более что в те редкие минуты, когда система все же работала, в файлы записывался просто серый прямоугольник. В качестве альтернативы FFMPEG подключением ZoneMinder может работать также и через VLC библиотеки, но сразу же после установки в логах система ругалась на недоступность одного из компонентов VLC, а разбираться, если честно, с перманентно залипающей системой желания не было никакого. Более того, через обычное подключение по протоколу RTSP ZoneMinder работать с камерой отказался (мне не удалось победить форму ввода данных для подключения камеры).

AVReg

Творение отечественных разработчиков, унаследовавших проект LinuxDVR, лишь отчасти можно назвать бесплатным продуктом. В бесплатном режиме AVReg может обслуживать только 4 камеры. Четыре камеры для сферического домашнего пользователя может быть вполне достаточно, но хотя у меня по проекту предполагается использовать 5 камер для видеонаблюдения, попробовать AVReg стоило. С установкой на тестовую виртуальную машину проблем не возникло. Установка в Ubuntu производится через добавление репозитариев программы в конфиги Aptitide, а затем в обычном порядке происходит скачивание и установка AVReg.

В отличие от всех предыдущих рассмотренных систем, первое, что бросается в глаза при работе с системой — ее аляповатый интерфейс. Понятно, что программисты обычно далеки по способностям от дизайнеров, поэтому они не в состоянии спроектировать удобный для пользователя интерфейс, да и вообще сосредоточены совсем на другом. Поэтому даже неискушенный взгляд рядового потребителя заметит некую степень лубочности в доморощенном оформлении интерфейса. Но благодаря наличию русского языка в программе и врожденной способности въедливо добраться до самого распоследнего пункта меню настройки, программа была установлена, сконфигурирована и запущена.

Все настройки и вообще все взаимодействие с системой ведется через веб-интерфейс. Он не залипает как у ZoneMinder, а помощник по установке камер с легкостью нашел мою ONVIF камеру и подключил ее к системе. Вроде бы система работоспособна, но добиться от нее нормальной работы мне так и не удалось. Видимо, луна была не в том секторе небосвода. На выходе из системы и в окнах просмотра, меня ждали только серые квадраты вместо картинки с моей камеры. Аналогичная ситуация была и у ZoneMinder, видимо, даже несмотря на заявленную поддержку H.264 в камере, она реализована не полностью.

Чтобы не оставлять программу просто так, не попытавшись разобраться в первопричинах, пришлось воспользоваться очень простым тестом работоспособности камеры. Для этого я взял плеер VLC и передал ему пути RTSP потоков c камеры. И тут выяснилось, что первый поток при просмотре через VLC зависает через 2 секунды после начала просмотра, это хорошо заметно по замирающим часам в потоке видео. А второй поток, с низким разрешение, работает так, как и должен. Очевидно, что VLC, ZoneMinder и AVReg используют одни и те же библиотеки для транскодирования потока H.264 по RTSP. Возможно, что именно это и является причиной серых квадратов в ZoneMinder и AVReg. Единственное, что меня успокаивало, так это то, что в родной CMS все работает идеально. Нет никаких серых квадратов, нет никакого сверхвысокого потребления ресурсов ПК. Только вот родная CMS существует исключительно под Windows.

Pro Surveillance System

Отчаявшись найти годную систему среди бесплатных, пришлось обратить свой взор к коммерческим программам для видеонаблюдения. Пусть не вводит в заблуждение читателя наименование производителя Pro Surveillance System (PSS). Dahua Technology Co. далеко не немцы, даже совсем не немцы, а скорее китайцы. Dahua Tech выпускает серьезный ассортимент оборудования и программного обеспечения, среди прочего особо выделяется сегмент для систем видеонаблюдения. Компания выпускает камеры не только под своим брендом, но и под множеством других широко применяя схему OEM. Для поддержки своего оборудования Dahua разработала свою собственную CMS. Однако, даже несмотря на то, что система существует для разных платформ, в том числе и Linux, а кроме того она присутствует в виде пиратских копий, но работает она только с камерами Dahua, включая камеры OEM с начинкой Dahua.

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

Trassir

Еще один представить коммерческого видеонаблюдения, разрабатываемого отечественными спецами. ООО «ДССЛ-Центр» занимается дистрибуцией камер основных производителей, разрабатывает программное обеспечение Trassir, проводит семинары и выглядит вполне достойной внимания компанией. Программный комплекс Trassir существует как под операционные системы класса Windows, так и под Linux. Однако для Linux поставляется не отдельный программный продукт, а целиком операционная система вместе со встроенной CMS. Такой подход меня совсем не устраивает, но вполне оправдан, если речь идет о видеонаблюдении промышленного масштаба. Тем не менее для очистки совести я скачал демонстрационную версию Trassir для Windows (а доступна только она) и установил ее.

Первая попытка установки была прервана — инсталлятор в ультимативной форме потребовал, чтобы я дополнительно скачал еще и установщик базы данных PostgreSQL, а потом повторил попытку установки. Деваться было некуда, пришлось скачать и повторить. Но установка PostgreSQL провалилась, установщик что-то пролепетал про несовместимость в кодировках и отказался дальше работать. Скорее всего, он оказался не совсем совместим с Windows 8. Но несмотря на провал с PostgreSQL, установка демонстрационной версии не прервалась, она продолжилась просто предупредив, что без базы данных будут недоступны некоторые из функций. Пришлось согласиться и пойти на уступки инсталлятору Demo-Trassir.

Я не знаю, может быть это требования заказчиков такие, чтобы охранники не засыпали перед мониторами им нужно выводить информацию в веселеньком оформлении, но интерфейс программы именно таковым и является. Все тот же лубок, все те же доморощенные окошки, да картинки. Более того, при работе с демонстрационными камерами, без вывода какой-либо картинки на монитор вообще, система умудрилась загружать процессор виртуальной машины на немыслимые 40% — 60%. А как подключить мою камеру и возможно ли это вообще в демонстрационной версии, я так и не разобрался.

Когда в Челябинске упал метеорит, который запечатлели десятки видеорегистраторов, установленных в автомобилях суровых челябинских пацанов, импортные YouTube пользователи в сердцах щелкали языками и восторгались тем, что в России на каждой машине стоит по видеорегистратору. Но судя по тому, что из рассмотренных 6 программных продуктов для видеонаблюдения ровно половина российские, я нахожу, что мы не только впереди планеты всей по количеству авторегистраторов, но и по количеству стационарных видеорегистраторов тоже. И не удивительно, что именно у нас есть столько независимых разработчиков программ для видеонаблюдения. Да-да, Xeoma тоже плод деятельности российских разработчиков. ООО «ФеленаСофт» уже более десяти лет разрабатывает программное обеспечение, в том числе и для систем видеонаблюдений.

Возможно, кто-то уже сталкивался с программой WebCam Looker. За долгое время эксплуатации WebCam Looker заслужил доверие пользователей и на волне успеха разработчики запустили новый продукт Xeoma. На веб-сайте компании декламируется о том, что Xeoma — совершенно новый продукт, созданный с нуля, с учетом всех наработок и опыта, полученного при разработке WebCam Looker. По задумке, пользователей должна ожидать система с удобным интерфейсом и премиальной производительностью.

Xeoma работает на Linux, Windows, OS X (это для «маков») и даже Android. Разработчики заявляют о поддержке более сотни различных камер, включая универсальные виды (читай неопознанные NoName). Понимая те сложности и бардак, что царят на рынке в отношении стандартизации, разработчики предлагают скачать свой продукт бесплатно и проверить его в деле перед покупкой. Ход стратегически верный, ведь в таком случае можно, не покупая лицензии, проверить будет ли работать CMS с купленными камерами. Это особенно важно, ведь иногда получается так, что стоимость одной IP-камеры «с Китаю» меньше, чем стоимость одной лицензии ПО для этой камеры. Как раз мой случай. Помимо традиционного использования CMS для мониторинга и записи видеофрагментов в рамках одной локальной сети, в системе присутствует возможность объединения устройств с Xeoma в кластеры. Возможность любопытная, особенно с учетом того что, будучи запущенной на Android, Xeoma выступает не только в качестве клиентского приложения для мониторинга и настроек, а превращает ваш старенький смартфон в IP-камеру, нужно только добавить блок питания. В качестве дополнительной возможности, можно соединять несколько систем, установленных в изолированных сетях, в единую систему мониторинга использую обмен файлов по FTP. Вообще, проводить исследования в отношении корпоративных установок у меня в планы не входило, поэтому такой функционал оставим для будущих статей, а информацию о нем почерпнем с корпоративного сайта.

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

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

Но и это еще не все. Xeoma для не мобильных платформ может быть как установлена на компьютер, а может быть запущена в виде переносимого приложения. Другими словами, достаточно только скачать и запустить. А если не понравилось, то достаточно удалить только один файл, никаких прочих компонентов в системное окружение не инсталлируется. Решение интересное особенно с учетом того, что все внешние библиотеки, все требуемые компоненты находятся внутри самого файла и они всегда те, на которые рассчитывают разработчики. Тем самым повышается не только удобство, но и надежность работы Xeoma.

При первом запуске программы она инициирует поиск камер в локальной сети. Мою китайскую NoName система обнаружить не смогла, что и не удивительно — камеры на этом чипе появились всего несколько месяцев назад. Зато с успехом нашелся Wi-Fi экстендер TPLink, хотя никаких камер на нем нет и никогда не было. Добавить новую камеру можно различными способами, просто поиском по сети, поиском с учетом логина и пароля для входа на камеру, можно даже добавить случайную камеру доступную где-то в сети интернет. Последний вариант актуален, когда вам очень хочется протестировать систему, а установленных камер у вас в наличии нет или их слишком мало.

Вызов добавления камеры в Xeoma

Вызов добавления камеры в Xeoma

В моем случае пришлось вводить RTSP потоки в ручном режиме. И все заработало с первого раза! Удивительно, но система, несмотря на свой излишне простой и рассчитанный на неискушённого инженера интерфейс, начала принимать картинку с моей камеры, определять движения в кадре, записывать и показывать мне записанное видео. Просто и сразу! Погоняв еще в различных режимах Xeoma, я полностью удостоверился, что система на тестовой инсталляции работает если не идеально, то очень близко к тому. По этой причине, было принято решение о внедрении именно программного комплекса видеонаблюдения на базе Xeoma. Далее представлено более-менее подробное описание разворачивания Xeoma с использованием Oracle Virtual Box на прототипе рабочей системы и обзор некоторых функций программы.

Используем Xeoma

В качестве тестового стенда для прототипирования будущей установки Xeoma на рабочую систему были использованы виртуальные машины Oracle Virtual Box. В качестве host-системы выступила рабочая станция с 8 Гб ОЗУ и управлением Windows 8.1 x64. В качестве серверного варианта была использована Ubuntu x32 LTS 14.02 с 1 Гб ОЗУ. Для клиентов применялись виртуальные машины с 2 Гб ОЗУ и операционными системами Windows 8.1 x32, Linux Mint x32. Во всех виртуальных машинах было доступно одно ядро с физической частотой до 3 ГГц. В качестве дополнительной проверки работоспособности был задействован смартфон с Android 4.4.2.

Интерфейс гипервизора Oracle VirtualBox

Интерфейс гипервизора Oracle VirtualBox

Установка

Итак, в качестве сервера у меня работает самособранный микросервер под управлением Ubuntu LTS 14.02 x64. На него впоследствии планируется установить серверную часть Xeoma. Но, предварительно необходимо провести тестовую установку на виртуальную машину, дабы убедиться, что в процессе установки никаких неразрешимых сюрпризов не возникает. Для этого создаю новую виртуальную машину в среде VirtualBox и устанавливаю чистую копию Ubuntu. Поскольку виртуальная машина обладает меньшими ресурсами, нежели микросервер, то и операционная система устанавливается 32-разрядная. Конечно, ничто не помешает установить Ubuntu x64 на 1 Гб ОЗУ, но работать она будет не так шустро, как 32-битная система. Прошу обратить внимание на то, что и в виртуальной машине, и на микросервере установлена Ubuntu без графического интерфейса, т. е. осуществлена headless установка. Более того, микросервер уже установлен в свое рабочее окружение и доступ к нему возможен только удаленный. По этой причине после установки операционной системы в виртуальной машине, доступ к ней осуществляется только посредством SSH терминального подключения. Соответственно при установке Ubuntu желательно не забыть поставить «галочку» напротив компоненты SSH-Server. Для пущего удобства, дополнительно устанавливается и оконный файловый менеджер Midnight Commander (MC).

Выбор компонентов при установке Ubuntu

Выбор компонентов при установке Ubuntu

Порядок установки Xeoma на Ubuntu подробно и с картинками описан на сайте FelenaSoft. Тем не менее пробегусь по всем шагам. Прошу учесть, что для своего удобства, все шаги я выполняю в сессии суперпользователя. В Ubuntu в нее можно перейти при помощи следующей команды:

sudo su

Шаг 1. Скачиваем архив с программой в соответствии с разрядностью операционной системы:

wget http://felenasoft.com/xeoma/downloads/xeoma_linux.tgz

Шаг 2. Распаковываем скаченный архив:

tar -xvzf xeoma_linux.tgz

После распаковки можно удалить скаченный архив. В архиве у нас находится единственный файл xeoma.app, версия программы 15.2.25. Если данный файл не может быть запущен из-за настроек прав доступа, то нужно выполнить команду предоставляющие соответствующие права данному файлу:

chmod a+x xeoma.app

Шаг 3. На этом этапе система уже является рабочей и можно запускать Xeoma для работы. Однако, поскольку у нас headless система и доступен только терминал, необходимо установить еще один компонент в Ubuntu:

apt-get install xdg-user-dirs

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

Шаг 4. Устанавливаем компонент для звука:

apt-get install libasound2

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

root@ubuntu-xeoma:/home/vlad/delme# ./xeoma.app -core
./xeoma.app: error while loading shared libraries: libasound.so.2: cannot open shared object file: No such file or directory

Шаг 5. Осуществляем пробный запуск Xeoma в серверном исполнении, в терминале запускаем Xeoma с параметром -core:

./xeoma.app -core

Xeoma запустится и выдаст список доступных опций командной строки.

При запуске Xeoma в терминальном режиме выводится подсказка по допустимым командам

При запуске Xeoma в терминальном режиме выводится подсказка по допустимым командам

Теперь для того чтобы подключиться к серверу нам нужно знать IP-адрес виртуальной машины и пароль для подключения. Поскольку у нас уже запущена Xeoma в режиме программы, то можно либо завершить ее исполнение нажав ctrl-c, либо просто открыть новую сессию SSH подключения к виртуальной машине. Я предпочту открыть новую сессию.

В новой сессии вызываем команду ifconfig, которая возвращает нам сетевые параметры, в том числе IP-адрес виртуальной машины. А затем выполняем команду ./xeoma.app -showpassword в директории где был распакован архив с Xeoma. Последняя команда выдает нам пароль, при помощи которого можно подключаться к данному серверу. Выглядит это примерно так:

Current password for network access: 4_5JR/qw68

Следует учитывать, что пароль меняется каждый раз как осуществляется установка серверной части, а по желанию его можно установить самостоятельно через вызов ./xeoma.app -setpassword MYPASS.

Шаг 6. Проверяем работоспособность серверной части на headless машине. Для этого на клиентской машине, под управлением Windows или Linux с графическим интерфейсом нужно запустить клиентскую часть и произвести подключение к установленной серверной части с использование полученного в шаге 5 IP-адреса и пароля. Для максимального охвата операционных систем, для подключения к серверной части, я воспользовался сначала Linux Mint, а затем и Windows 8.1 для запуска клиентской части приложения. В обоих случаях интерфейс клиентской части практически идентичный, как и поведение Xeoma.

Интерфейс подключения к удаленному серверу Xeoma в Linux Mint

Интерфейс подключения к удаленному серверу Xeoma в Linux Mint

Для большего удобства запуска клиентской части я рекомендую либо просто запускать программу с ключом -client, либо создать ярлык для запуска Xeoma с ключом -client самостоятельно, либо произвести установку клиентской части Xeoma запустив скаченное приложение с параметрами -install -client (например, xeoma.exe -install -client).

Пример параметров ярлыка в Linux

Пример параметров ярлыка в Linux

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

Вызов удаленного доступа из меню Xeoma в Linux Mint

Вызов удаленного доступа из меню Xeoma в Linux Mint

Шаг 7. На этом этапе можно предварительно настроить подключение к камере или камерам. Поскольку у нас осуществлена установка в клиент-серверном варианте, где сервер удален от клиента, то настройку необходимо производить через подключенное к серверу через «Удаленный доступ» клиентское приложение. В моем случае, подключение осуществляется в ручном режиме, так как автоматически поиск не в состоянии обнаружить и настроить мою камеру.

Параметры настройки камеры в ручном режиме в Xeoma под упралением Linux Mint

Параметры настройки камеры в ручном режиме в Xeoma под упралением Linux Mint

Изменить настройки камеры можно в любой момент, нажав на шестеренку и дважды щелкнув на пиктограмме камеры. Таким образом редактируется текущая камера.

Итак, я выбираю соответствующий тип камеры, ввожу Login, в данном случае Admin и хеш пароля. Они же указываются и в URL для доступа к трансляции с камеры. Прошу обратить внимание на то, что сама камера у меня установлена по IP-адресу 192.168.0.110 и именно этот адрес используется в URL моей IP-камеры. Более того, хеш пароля в явном виде указывается как в URL, так и в поле для пароля. В данном случае хеш выглядит как «tlJwpbo6», что означает пустой пароль. Если вам необходимо установить свой собственный пароль, то его, во-первых, необходимо установить через утилиту конфигурации камеры, а во-вторых, получить новый хеш пароля, сгенерированный камерой. А для этого потребуется зайти по Telnet на саму камеру. Что, однако, выходит за рамки настоящей статьи. В любом случае можно поэкспериментировать с указанием паролей как в URL камеры, так и в специально отведенном поле.

В настройках камеры есть два поля для указания потоков с камер. Верхнее поле используется для просмотра картинки при использовании «квадратора» и для определения движения в кадре. А нижнее поле используется для указания полноценного потока с максимальным качеством для записи в видеоархив. С целью уменьшения затрат ресурсов, я настоятельно рекомендую в верхнее поле направлять второй поток с камеры (второй URL, индекс потока 1), а во второе поле первый поток камеры (первый URL, индекс потока 0). Дополнительно включить «галки», отключающие перекодировку H.264 потока при записи в архив. Само качество потоков настраивается через CMS. При такой настройке, Xeoma будет потреблять минимум ресурсов на анализ движения в кадре и одновременно в архив будет записывать видеопоток с максимальным качеством. При просмотре потока только с одной камеры, Xeoma автоматически переключается на первый поток, а при использовании «квадратора», для сохранения ресурсов используется второй поток с низким разрешением. Плюс, поскольку моя камера не оснащена микрофоном, то настройки для звукового канала оставляю стандартными.

Интерфейс настройки камеры с дополнительными параметрами в Xeoma под управлением WIndows 8.1

Интерфейс настройки камеры с дополнительными параметрами в Xeoma под управлением WIndows 8.1

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

Шаг 8. Для установки серверной части в автозапуск необходимо запустить приложение с ключами установки. Останавливаем запущенную программу Xeoma и запускаем ее еще раз в режиме установки:

./xeoma.app -install -coreauto

При использовании этой команды происходит установка серверной части Xeoma в автозапуск Ubuntu. Результат ее работы примерно следующий:

     install server (auto start) and client (manual start) ...
     * Ok > installFiles
     * Ok > popClientFromAutorun
     * Ok > installCoreShortcut
     * Ok > installClientShortcut
     * Ok > registerInSystem
     * ERROR > stopCore
     * Ok > registerCoreAsService
     * Ok > exchangeOldExeFileToNew
     * Ok > removeOldXeomaExe
     * Ok > installCoreAutostartOnly
       Ok
    Current password for network access: 4_5JR/qw68

Последней строкой выводится пароль, он может поменяться, поэтому обратите на него внимание. Если вдруг с установкой произошло что-то не так, то ее всегда можно отменить, запустив Xeoma с параметром -install -removeall. Сама установка осуществляется в директорию /root/bin/Xeoma, конфигурация и вспомогательные файлы находятся в /usr/local/Xeoma. Скрипт инициализации init.d располагается в /etc/init.d/XeomaCoreService. Ну и сам сервис стартует с именем XeomaCoreService. Кстати, именно в Init.d можно настроить порт на котором работает сервер при автоматической загрузке сервера.

На тестовой виртуальной машине, при активной работе сервис Xeoma потребляет не более 10% процессорного ресурса, дополнительную нагрузку по 1% привносят еще и экземпляры FFMPEG, который идет в комплекте с Xeoma и активно последней используется. Данная загрузка характерна при просмотре видео в реальном времени через клиентское приложение и одновременной записью видео в архив. Результаты очень впечатляющие.

Потребление ресурсов на виртуальной машине для серверной части Xeoma

Потребление ресурсов на виртуальной машине для серверной части Xeoma

Теперь, после установки и проверки можно перейти к настройке самой программы.

Настройка

С серверной стороны особо настраивать нечего, если только параметры запуска серверной части в init.d (для Linux), но там все уже итак настроено оптимальным образом. Остается только настройка работы самой программы. Все необходимые настройки осуществляются через интерфейс клиентской части Xeoma. В случае клиент-серверной установки, для внесения изменений необходимо подключиться к серверной части клиентской. И тут открывается еще одно удобство программного продукта, способного работать практически под любой операционной системой и даже на смартфонах. Конечно, некоторые могут заметить, что зачем городить огород с приложениями, если можно просто сделать развитый веб-интерфейс и проводить настройку через него. Не буду спорить в этом есть свой резон, но у разработчиков Xeoma, видимо, были веские причины реализовывать все именно в виде программы, а не поддаться тренду последнего десятилетия и перевести все на web.

Пользовательский интерфейс Xeoma вызывает двойственные чувства. С одной стороны, он непривычен для обычного компьютерного пользователя, привыкшего к Windows, Mac OS или многочисленным вариациям рабочих столов на Linux. С другой, некая простота позволяет освоиться программой даже неопытным специалистам и без чтения многочисленных талмудов документации. Откровенно говоря, интерфейс в Xeoma мне не нравится, но пользоваться им можно.

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

Основной интерфейс Xeoma с выводом с двух камер

Основной интерфейс Xeoma с выводом с двух камер

В главном окне, если к интерфейсу Xeoma можно применить этот термин, можно управлять выбором камер, добавлять новые камеры, переключаться между камерами, включать режим квадратора, а также оперативно включать или выключать модули для конкретной камеры, не углубляясь в меню настроек. Разобраться с интерфейсом можно за считаные минуты, стоит только понажимать на его элементы. Но основное таинство скрыто в настройках камер. При всей простоте интерфейса Xeoma, не стоит забывать, что система может работать не с одной и даже не с десятью камерами. И чтобы не запутаться в нагромождении окошек все подключенные источники можно разместить в иерархию, раздели их по назначению или месту установки.

Иерархия камер в Xeoma

Иерархия камер в Xeoma

Для того чтобы понимать, как настраивать Xeoma, нужно немного в ней разобраться. С первого взгляда система может показаться слабоуправляемой, но стоит с ней познакомиться немного поближе, как все становится на свои места. Идеология настройки алгоритмов обработки камер реализована в виде визуального конструктора. И настройка осуществляется путем добавления пиктограмм акторов, я буду применять именно эту терминологию, пришедшую из мира проектирования информационных систем, связей между ними и детальной настройкой каждого из акторов. Более того, доскональные настройки акторов могут применяться как в окружении только одного устройства, так и сразу к нескольким устройствам. Но никакой связи при этом не создается. Вроде бы удобно, но для частого изменения при большом количестве камер придется много поработать руками. Связи между акторами не редактируются. Их можно только удалить. Однако, в системе можно реализовывать весьма и весьма разветвленную сеть связей между акторами, только не стоит слишком усердствовать, ведь чем сложнее получится модель, тем сложнее настроить ее работоспособное состояние.

Чрезмерное количество акторов в настройке источника в Xeoma

Чрезмерное количество акторов в настройке источника в Xeoma

Устройства

Все акторы в системе делятся на три большие группы: устройства, фильтры и назначения. В качестве устройства может выступать любой поддерживаемый системой источник, начиная от веб-камер и заканчивая файлами, считываемыми с сетевого диска. Основным источником для получения данных будут, разумеется, камеры. В один сетап можно добавить больше, чем одну камеру, но нужно себе четко понимать, для чего это делается. Помимо видео, Xeoma может вполне равноценно работать и с аудиоданными. Если камера оборудована микрофоном, то он может служить источником звука, если нет, то звук может забираться с любого штатного микрофона на компьютере, где установлена Xeoma. И даже больше. В качестве источника может выступать другая установка Xeoma (на компьютере или смартфоне) и данные будут транслироваться с нее для дальнейшей обработки. Таким образом можно организовать не только видео, но и аудио наблюдение и фиксацию. Что втройне любопытно.

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

Если покопаться в интернет, то можно найти множество историй, реализующих оба приведенных сценария. Предприниматели и ревнивые мужья организуют скрытое наблюдение за сотрудниками и своими половинками, а затем выводят их на чистую воду. Причем обычный, не продвинутый, пользователь и не поймет, что за ним наблюдают таким тайным и изящным способом. Достаточно же только ноутбука с web-камерой и все. Хотя первоначально, все же подразумевалось несколько иное использование этих функций, а именно — максимальное использование существующего оборудования и распределение нагрузки между отдельными компьютерами.

Для совсем сложных случаев, в Xeoma существует возможность обмена данными по FTP протоколу с использованием FTP сервера. При помощи этого механизма можно объединять в единую сеть наблюдения географически разнесенные или логически разделенные локации. Представьте, что у вас в руках видеоархив двадцати ваших обувных магазинов, раскиданных по стране. И все данные находятся в одном месте, их можно все просмотреть и проанализировать. А в случае возникновения конфликтных ситуаций или разногласий, продавцы на местах уже не смогут «уничтожить» улики. При таком-то «большом брате» и сам становишься как-то более подтянутым, меньше позволяешь себе вольностей.

Фильтры

С сигналом, будь то видео или аудио поток, нужно что-то делать. Но, прежде чем записать его на жесткий диск компьютера, стоит подумать над тем, что сигнал как-то предварительно можно обработать или проанализировать. И именно этим занимаются акторы из группы фильтров. Основным фильтром, разумеется, в системе является детектор движения. Не секрет, что многие современны камеры, могут проводить обработку сигнала самостоятельно и определять движение. Но, увы, пока мне не удалось заставить Xeoma понимать сигналы о движении с моей камеры. Вопрос с выносом определения движения на камеры или наоборот централизация обработки на едином сервере очень неоднозначный. Если выносить обработку на камеры, то снижается нагрузка на серверный компьютер, однако реализация алгоритмов определения движения на камерах может быть далекой от идеала, да и настроить движение у сотни камер — задача для сенсея. С другой стороны, функционал определения движения, один из самых ресурсоемких и при большом количестве камер может нещадно грузить систему.

Для чего вообще нужен функционал определения движения? Для видеофиксации в целом доступно два варианта записи видео. Первый — записывать все подряд. Такой вариант хорош в оживленных местах, торговых точках или там, где и мышь проскользнуть не должна. Но при этом «пустыми» данными, в огромном количестве, засоряются жесткие диски серверов. Долговременно хранить гигабайты и терабайты видеоданных никто не будет, поэтому и архив получается всего-то на несколько дней или даже часов. Второй вариант — записывать видео в архив только тогда, когда происходит какое-то событие. Обычно в качестве подобного события выступает движение в кадре, в Xeoma можно соединить акторов микрофона и детектора, но настроить детектирование звука необходимо при помощи использования фильтра «Детектор звука». Таким образом, появляется возможность вести видеозапись по звуку, например, при разбитии стекла или просто громком хлопке. Как только происходит событие и его порог превышает заданные параметры — начинается запись.

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

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

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

Кстати, в Xeoma есть еще один режим записи, в котором идет постоянная запись видео, однако в архив записывается не только видеопоток, но и метки срабатывания детектора движения. Впоследствии, вместо того чтобы залипать перед монитором на долгие часы в поисках событий, можно просто перескакивать по видеопотоку в места, где события как раз и происходят. Функционал полезный, но для его корректной работы необходимо все же произвести настройку детектора движения.

Помимо детектора движения в системе присутствуют и другие фильтры. Фильтр «Расписание» работает в качестве простого выключателя, позволяя жестко включать или отключать запись. Хотя, можно и распараллелить функционал записи по расписанию и по детектору движения. Например, ночью запись ведется в режиме детектора движения, а днем постоянно. Фильтр «Маркировка» вшивает в видеокадр дополнительную информацию, это может быть как произвольный текст, так и различные метки, например, дата и время. Если требуется добавить несколько надписей, то в рабочее поле добавляется несколько фильтров «Маркировка».

Фильтр «Детектор дня» не имеет настроек и его основное предназначение — отключать запись в условиях недостаточной освещенности. Логика тут простая — если камера ничего заснять путного не может, то и использовать ее смысла нет никакого.

Фильтр «HTTP переключатель» может использоваться для управления записью в Xeoma извне. Для того чтобы включить или отключить фильтр необходимо вызвать определенный http-запрос, который кастомизируется в настройках фильтра. В качестве наиболее вероятного сценария использования можно применить данный фильтр для временного включения или отключения записи, например, при присутствии на объекте. Представьте, что вы используете видеонаблюдение в своем загородном доме. Когда вы там, вести запись смысла нет никакого, поскольку архив будет наполняться бессмысленными записями вашего перемещения по своим угодьям. Определить же местоположение можно по факту подключения вашего смартфона к Bluetooth сервера или же местному Wi-Fi. Реализовать данный сценарий можно как со стороны сервера, на уровне скриптов, так и на стороне телефона. Для Android можно использовать программы малой автоматизации, например, Tasker или аналогичные. Не забудьте использовать расписание, включающее запись в ночное время, когда вы уже мирно почиваете в своей кровати.

«HTTP маркировщик» — фильтр сочетающий функционал HTTP переключателя и маркировщика. При необходимости, в видеопоток, по сигналу, полученному через HTTP-запрос, можно внедрять дополнительные тексты. Простор для фантазии обширный. В Xeoma присутствуют и другие фильтры, использование которых, позволит настроить логику записи именно так, как это требуется. Но все зависит от фантазии установщика.

Назначения

Собственно, группа акторов «Назначения» то, ради чего настраиваются обе предыдущие. Сюда будет попадать видео или аудиопотоки, а также сигналы для дополнительных действий. Основным актором из назначений можно смело считать «Просмотр и архив». Именно сюда записывается видеопоток, который впоследствии можно просмотреть через удобный интерфейс. У актора «Просмотр и архив» как и у многих других, есть настройки. При помощи настроек можно регулировать такие параметры, как время хранения записи или качество материала. И именно в этом акторе можно настроить путь, по которому будут записываться архивные данные. Обратите внимание на то, что для каждой отдельной камеры можно настроить свой собственный путь для записи. Если по каким-то причинам вас не устраивает встроенное средство архива, то можно сохранять видео или фотографии при помощи актора «Сохранение в файл». В настройках актора можно выбрать формат, частоту сохранения, время хранения файлов.

Просмотр архива в Xeoma - день (Windows 8.1)

Просмотр архива в Xeoma — день (Windows 8.1)

Для более сложных случаев, можно применить запись на FTP. В этом случае, при помощи актора «Загрузка на FTP-сервер» можно объединять Xeoma из разных географических положений. Функционал может пригодиться и в качестве средства для создания резервной копии видеоматериалов. Записывать данные можно на удаленный сервер и даже если объект где ведется видеонаблюдение будет полностью уничтожен пожаром, нашествием саранчи или случайно оброненной бомбой, то Xeoma будет пытаться сохранить видеоматериалы об этом событии до последнего, пытаясь выгрузить файлы на удаленный FTP-сервер.

Не обойдены вниманием и менее экстремальные варианты оповещения о событиях на охраняемом объекте. Пользователь может настроить оповещения на электронную почту или же на отправку SMS. Причем SMS могут отправляться как через интернет, так и посредством GSM-модема, установленного на сервере. Правда, в SMS нельзя вставить картинку или видео, иначе это будет уже MMS, поэтому оповещение по SMS может быть только текстовым и коротким. А вот при отправке сообщения по электронной почте, можно прикрепить не только фото, но и видео. Только особо усердствовать не стоит — электронная почта не предназначена для пересылки видео большого объема.

В текущей версии Xeoma присутствует 11 акторов назначений. При их помощи можно реализовать множество сценариев для видеонаблюдения. Но я хочу остановиться еще на одном из акторов. «Веб сервер» позволяет получить доступ к картинке, получаемой с камеры, через web-браузер. Xeoma, как истинный комплект «Все в одном», имеет на борту и свой web-сервер. Трансляция возможна как для пользователя, который может зайти на страничку своим любимым браузером, так и для других серверов — транслируя потоки видео или картинок. Таким образом, из Xeoma можно сделать своего рода ретранслятор, позволяющий подключить не самые совместимые камеры к другому ПО для видеонаблюдения, хотя зачем это нужно, если при помощи Xeoma можно реализовать нормальную систему?

Android

Программное обеспечение Xeoma работает на многих платформах, в том числе и на платформе Android. Приложение можно установить на планшет или смартфон, но не ищите его в магазине Google Play. Скачать приложение можно только с сайта ФеленаСофт. Удивительно, но разработчики не утрудили себя и сделали совершенно одинаковый интерфейс для всех платформ. Поэтому на Android Xeoma выглядит точно так же, как и на Linux Mint или Windows. Разве что размер экрана меньше и труднее попадать по элементам управления.

Для установки приложения я рекомендую использовать ES Проводник, который может не только скачать приложение, но и установить его. Предварительно, в настройках смартфона, нужно включить возможность установки приложений из непроверенных источников. Если вы не знаете где кроется эта настройка — не беда, ES Проводник услужливо найдет ее для вас.

Xeoma на Android

Xeoma на Android

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

Единственное, что напрягает при установке Xeoma на телефон, так это разрешения приложения для возможной отправки SMS на платные, короткие номера. Но хочется надеяться, что данное разрешение применяется исключительно для нужд отправки SMS в случае обнаружения движения и никак иначе.

Выводы

Современный мир видеонаблюдения, войдя в цифровую эпоху, ввергнулся сам собой в пучину хаоса. Разношерстные протоколы и несовместимые камеры, плохая документация и устаревшее программное обеспечение способны вывести из себя даже самого флегматичного технаря, хобби которого — ковыряться с железками и «софтом». Энтузиасты, особенно когда они работают сообща, способны выдавать общественности весьма неплохие продукты, примером чего может служить многочисленное семейство операционных систем Linux и программного обеспечения под него, но в плане видеонаблюдения, когда новые камеры и новые несовместимости плодятся как опята после дождя, одного энтузиазма мало. И бесплатным программам попросту не угнаться до коммерческих организаций способных тратить ресурсы не только на разработку, приобретение новых камер, но и на поддержку конечных пользователей своего продукта.

По своему печальному опыту могу сказать, что, потратив несколько теплых майских деньков, я пришел к выводу, что с моим оборудованием справится нормально только коммерческое программное обеспечение, да и то не всякое. Попробовав несколько систем, я пришел к выводу, что только Xeoma нормально работает с моей камерой и только она удовлетворяет моим требованиям к организации видеонаблюдения. Понятно, что Xeoma далеко не идеал, в ней есть небольшие недоработки, мелкие огрехи, особенно это касается пользовательского интерфейса. И я сильно подозреваю, что в корпоративном плане, когда речь идет об организации видеонаблюдения сотен, если не тысяч камер, с Xeoma будет работать не так удобно, как автоматизированным наблюдением только одного объекта с минимумом камер. И я полагаю, что ситуация в ближайшее время не изменится к лучшему, по крайней мере до тех пор, пока на рынке не появится очень серьезный игрок с большим опытом в разработке программного обеспечения и разумной лицензионной политикой. Хотя определенную угрозу тут составляют новомодные облачные сервисы по видеонаблюдению, когда требуется только камера и доступ в интернет. Но пока основные игроки делают только первые и весьма робкие шаги в этом направлении, и с большой оглядкой смотрят на успехи и провалы Ivideon.

Ссылки на другие части:

Домашний микросервер. Идея.
Домашний микросервер. Аппаратное обеспечение. Сервер.
Домашний микросервер. Программное обеспечение. Операционная система. Ubuntu.
Домашний микросервер. Программное обеспечение. Основные и системные программы под Ubuntu.
Домашний микросервер. Программное обеспечение. Скачиваем торренты.
Домашний микросервер. Программное обеспечение. Раздаем контент по DLNA.
Домашний микросервер. Аппаратное обеспечение. Китайская NoName IP-видеокамера на основе чипа HI3518E_50H10L_S39.
Домашний микросервер. Программное обеспечение. Видеонаблюдение на основе IP-камер и Xeoma.
Домашний микросервер. Программное обеспечение. Шифруем конфиденциальную информацию в Ubuntu при помощи eCryptfs и хранением ключей в TPM.
Домашний микросервер. Программное обеспечение. Умный дом.



Понравилась статья? Поделить с друзьями:
  • Как написать программу для windows на python
  • Как написать программу для win ce
  • Как написать программу для mp3 плеера
  • Как написать программу для iphone на windows
  • Как написать программу для elm327