Sentinel
Сведения о компании Комплитех
Назначение модуля
- состав камер и их состояние;
- создание событий в Inspark из аналитических событий Sentinel VMS;
- показать в Inspark кадр соответсвующий событию переданному из Sentinel VMS.
Описание устройства КАМЕРА Sentinel в Inspark
Имя канала | Тип | Описание |
---|---|---|
id_vms | мгновенный | id камеры в системе VMS и адресс камеры в Схеме соединения |
name | строка | имя камры |
camera_type | сигнал | 0- ONVIF, 1- RTSP |
ip_adress | строковый | ip адресс камеры |
port | мгновенный | порт подключения к камере |
install_type | сигнальный | (0 - внешняя, 1 - внутренняя) |
coordination | гео-метка | складывается из параметров location_x,location_y,location_z |
address_main | строка | Адрес RTSP-потока камеры |
login | срока | подключение к камере |
password | строка | подключение к камере |
in_integration | сигнал | учатсвует ли в модулях интеграции |
in_fnv_roi | мгновенный | id камеры из cameras_integration |
camera_state | мгновенный | Состояние камеры: 0 - отключена, 1 - подключена, 2 - ошибка |
Порядок работы
- Логин в VMS, обновление токена доступа
- Получение камер VMS - передача параметров камер в Inspark
- Подписка на вебсокет VMS, обработка сообщений
Логин в VMS, загрузка метаданных интеграции
При старте осуществляется логин в VMS получение Bearer токена.
Токен должен истекать, вероятно время жизни токена зависит от установки, например на стенде токен за значимое время не
истекал. Поэтому в настройках добавлен параметр cron который определит как часто перезапрашивать токен доступа
# Настройки для Sentinel-VMS
sentinel:
rest:
# крон для обновления токена доступа Sentinel
cron: 0 0 * * * ?
Получение камер VMS - передача параметров камер в Inspark
При старте и периодически в соответствии с параметром
# Настройка интеграции событий Sentinel VMS c событиямb Inspark
event:
# задание периодичности обновления метаданных интеграции
cron: 0 0 * * * ?
производится чтение со всех камер, которые в Inspark имеют тип устройства AXXON_NEXT и классификатор VIDEOCAMERA.SENTINEL,
и в адресе подключения которых задан идентификатор камеры в Sentinel VMS.
При старте модуля или при добавлении новой камеры в интеграцию для нее осуществляется отправка всех значений заданных
в п. 1.2, далее периодически отправляется только параметр состояния камеры (как подтверждение, что устройство доступно).
Подписка на вебсокет VMS, обработка сообщений
Tочка подключения для вебсокета определяется параметром
sentinel:
websocket:
# адрес ws сервисов интеграции
url: ws://10.3.2.114:5013/
Модуль интеграции подписывается на 3 топика:
- status_camera - изменение статусов камер;
- events_roi - cобытия контроля зон интересов (ROI)
- events_lpr - события распознавания номерных знаков (LPR)
Обработка сообщений "Изменение состояния камер"
Сообщение приходящее по вебсокету изменение состояния камер имеет вид json объекта
{
'number_event': integer,
'data': {
'camera_id': integer,
'new_status': integer
}
}
по camera_id определяется учавствует ли камера в интеграции, если да отправляется новое значение параметра из атрибута
new_status, соответсвующее, статусу данной камеры.
Для сообщений об измееннии состояния камер VMS нельзя настроить отправку событий в Inspark, для их генерации необходимо
использовать генерацию событий в контрольных процедурах для измеряемого параметра состояние камеры.
Обработка сообщений ROI
Сообщение ROI приходящее по вебсокету имеет вид json объекта
{
'number_event': integer,
'server_id': integer,
'vms_server_name': string,
'vms_camera_id': integer,
'camera_id': integer,
'data': {
"event_camera_name": "stream3",
"event_camera_id": "11",
"event_camera_rtsp": "rtsp://:123@10.3.1.22:123/camera3",
"event_time": "2023-12-14 13:58:19.668000",
"event_type": "exit",
"event_class": "car",
"event_zone": "oc-1",
"event_track_id": "4676165444161266701",
"event_count": 1,
"event_linked_zone": [
"oc-1"
],
"event_frame": "14714446273137991952/31355_1702544499682579992.jpg"
}
}
Настройки обработки сообщения ROI представлены в конфигурации
events:
refs:
-
# событие "Разрешенное лицо" относится к событию ROI
actionName: Разрешенное лицо
# идентификатор события Inspark (event.id), может быть не задан если событие не требуется
semEventId: 7509
# шаблон текста события, поддерживаются подстановки для ROI
# "$CAM - имя камеры
# $TYPE - пример, exit
# $CLASS - пример, car
# $ZONE - название зоны в ROI, пример ос-1
semEventMessageTemplate: нахождение в $ZONE
# канал устройства Inspark для отправки значения
semChannel: detectPeople
# значение, отправляемое в канал
value: 1
-
# событие "Запрещенное лицо" относится к событию ROI
actionName: Запрещенное лицо
# идентификатор события Inspark (event.id), может быть не задан если событие не требуется
semEventId:
semEventMessageTemplate:
# канал устройства Inspark для отправки значения
semChannel:
# значение, отправляемое в канал
value:
-
# событие "Неизвестное лицо" относится к событию ROI
actionName: Неизвестное лицо
# идентификатор события Inspark (event.id), может быть не задан если событие не требуется
semEventId:
semEventMessageTemplate:
# канал устройства Inspark для отправки значения
semChannel:
# значение, отправляемое в канал
value:
-
# событие "ВИП" относится к событию ROI
actionName: ВИП
# идентификатор события Inspark (event.id), может быть не задан если событие не требуется
semEventId:
semEventMessageTemplate:
# канал устройства Inspark для отправки значения
semChannel:
# значение, отправляемое в канал
value:
-
# событие "Гость" относится к событию ROI
actionName: Гость
# идентификатор события Inspark (event.id), может быть не задан если событие не требуется
semEventId:
semEventMessageTemplate:
# канал устройства Inspark для отправки значения
semChannel:
# значение, отправляемое в канал
value:
-
# событие "Нахождение в зоне" относится к событию ROI
actionName: Нахождение в зоне
# идентификатор события Inspark (event.id), может быть не задан если событие не требуется
semEventId:
semEventMessageTemplate:
# канал устройства Inspark для отправки значения
semChannel:
# значение, отправляемое в канал
value:
-
# событие "Покидание зоны" относится к событию ROI
actionName: Покидание зоны
# идентификатор события Inspark (event.id), может быть не задан если событие не требуется
semEventId:
semEventMessageTemplate:
# канал устройства Inspark для отправки значения
semChannel:
# значение, отправляемое в канал
value:
-
# событие "Пересечение линии" относится к событию ROI
actionName: Пересечение линии
# идентификатор события Inspark (event.id), может быть не задан если событие не требуется
semEventId:
semEventMessageTemplate:
# канал устройства Inspark для отправки значения
semChannel:
# значение, отправляемое в канал
value:
Если на сообщение о событии ROI должно быть создано событие Inspark, необходимо настроить semEventId и
semEventMessageTemplate. Для изменения значения измеряемого параметра Inspark необходимо задать semChannel
и Value
Сообщение ROI получаемое по вебсокету напрямую не содержит событие ROI, алгоритм его определения будет
представлен в 3.3.4.
Обработка сообщений LPR
Сообщение LPR приходящее по вебсокету имеет вид json объекта
{
'number_event': integer,
'server_id': integer,
'vms_server_name': string,
'vms_camera_id': integer,
'camera_id': integer,
'data': {
"event_time": "2023-10-20 08:49:11.492000",
"event_camera_name": "stream10",
"event_server_id": 1,
"event_track_id": "5043622139127704679",
"event_lrp_number": "55PP7",
"event_lrp_camera_id": 1,
"event_lrp_number_id": null,
"event_lrp_number_status": 0,
"event_lrp_image_ref": "5933266091974920872/5043622139127704679.jpg",
"event_lrp_image_frame": "5933266091974920872/1941705_1703062151504952139.jpg",
"event_lrp_score": 0.893011,
"event_zone_id": null,
"event_square_box": 181969.0
}
}
Настройки обработки сообщения ROI представлены в конфигурации
events:
refs:
-
# событие "Неизвестный номер" относится к событию LPR
actionName: Неизвестный номер
# идентификатор события Inspark (event.id), может быть не задан если событие не требуется
semEventId: 5009
# шаблон текста события, поддерживаются подстановки для LPR
# "$CAM - имя камеры
# $NUMBER - номер машины
# $SCORE - точность распознавания номера
semEventMessageTemplate: Обнаружен автомобиль номер $NUMBER
# канал устройства Inspark для отправки значения
semChannel: detectCar
# значение, отправляемое в канал
value: 1
-
# событие "Разрешенный номер" относится к событию LPR
actionName: Разрешенный номер
# идентификатор события Inspark (event.id), может быть не задан если событие не требуется
semEventId:
# шаблон текста события, поддерживаются подстановки
semEventMessageTemplate:
# канал устройства Inspark для отправки значения
semChannel: detectCar
# значение, отправляемое в канал
value: 1
-
# событие "Запрещенный номер" относится к событию LPR
actionName: Запрещенный номер
# идентификатор события Inspark (event.id), может быть не задан если событие не требуется
semEventId:
# шаблон текста события, поддерживаются подстановки
semEventMessageTemplate:
# канал устройства Inspark для отправки значения
semChannel: detectCar
# значение, отправляемое в канал
value: 1
-
# событие "VIP номер" относится к событию LPR
actionName: VIP номер
# идентификатор события Inspark (event.id), может быть не задан если событие не требуется
semEventId:
# шаблон текста события, поддерживаются подстановки
semEventMessageTemplate:
# канал устройства Inspark для отправки значения
semChannel: detectCar
# значение, отправляемое в канал
value: 1
Если на сообщение о событии LPR должно быть создано событие Inspark, необходимо настроить semEventId и
semEventMessageTemplate. Для изменения значения измеряемого параметра Inspark необходимо задать semChannel
и Value
Сообщение LPR получаемое по вебсокету напрямую не содержит событие ROI, алгоритм его определения будет
представлен в 3.3.4.
Алгоритм получения описания аналитического события в Sentinel VMS
- По приходу сообщения проверяем, что камера зарегистрирована в Inspark
- Из json сообщения ROI или LPR получаем data.event_time
- По идентификатору камеры vms используя rest api Sentinel метод /api/get_logs_analytics
подставляя в дату начала и конца data.event_time находим список событий на это время (1 секунда) - Полученный список аналитических событий фильтруем по типу сервера lpr или roi и по имени камеры vms п.2
- Должны получить одно событие, если их больше значит алгоритм не рабочий запись в лог и ничего не делаем.
- Если событий нет значит не сконфигурированы камеры под аналитические процессы, тоже логируем и прекращаем работу
- Найдена одна запись, например
{
"action_name": "Покидание зоны",
"action_time": "08-09-2023 17:05:40",
"camera_name_integration": "10.3.1.80",
"camera_name_vms": "Avigilon_80",
"comment_additional": null,
"log_id": 236,
"serv_name": "ROI3",
"server_type": 2
}
- По action_name проверяем по конфигурации, что данное событие передается в Inspark
- Если событие передается в Inspark к нему прикрепляем дополнительно скриншот события
в настройках получаем url для отображения скриншотов
sentinel:
# настройки отображения изображений Sentinel VMS для ЛК Inspark
screenshot:
# адрес, который будет добавляться к изображению события для его показа в ЛК
url: /api/get_screenshot/
и дополняется параметрами:
Параметр | Комментарий |
---|---|
camera_id | Идентификатор камеры из событиязаписи интересующей камеры в БД |
start_time | Дата и время события |
size | Процент от оригинального (50%) |
например, /api/get_screenshot?camera_id=1&start_time=1713347544&size=50
- Если для аналитического события в конфигурации определена отправка измерения, генерится и отправляется значение
параметра в Inspark
4. Список аналитических событий Sentinel VMS на которые можно подписать модуль
ID | Название аналитического события | Тип |
---|---|---|
1 | Разрешенное лицо | ROI |
2 | Запрещенное лицо | ROI |
3 | Неизвестное лицо | ROI |
4 | ВИП | ROI |
5 | Гость | LPR |
6 | Неизвестный номер | LPR |
7 | Разрешенный номер | LPR |
8 | Запрещенный номер | LPR |
9 | VIP номер | LPR |
10 | Нахождение в зоне | ROI |
11 | Покидание зоны | ROI |
12 | Пересечение линии | ROI |
Настройка в платформе
В платфоме выполнить следующие действия
- Завести в Классификаторе устройства новый тип VIDEOCAMERA.SENTINEL.
- Создать Устройство, указать ему тип AXXON_NEXT, назначить ему топик sentinel, присвоить ему
классификатор VIDEOCAMERA.SENTINEL. - Завести топики п. 2.
- Завести в справочнике Событий события, которые будут передаваться в Журнал событий от системы Sentinel
- Внести в настройку модуля sentinel-gate номера событий платформы, соотнеся их с теми событиями Sentinel,
по которым необходимо получать данные - При настройке маппинга событий можно определить собственный измеряемый параметр Устройства, который будет получать
значения от модуля при возникновении события. Например:
# событие "Пересечение линии" относится к событию ROI
actionName: Пересечение линии
# идентификатор события Inspark (event.id), может быть не задан если событие не требуется
semEventId: 7777
semEventMessageTemplate: Пересечение $ZONE
# канал устройства Inspark для отправки значения
semChannel: cross_line
# значение, отправляемое в канал
value: 1
Инфо
в настройке указан параметр устройства cross_line, который примет значение 1 при возникновении события actionName = "Пересечение линий".
- Внести Устройство Sentinel в Типовую конфигурацию, которая будет использована на объекте интеграции
- В схеме подключения в поле адрес для каждой подключаемой камеры прописать ее идентификатор в VMS Sentinel,
см. получение данных о доступных камерах в режиме DEBUG модуля. - После завершение настроек в приложении Inspark, перестартовать модуль sentinel_gate.