Получение событий видеоаналитики
Ниже приведены примеры того, каким образом можно получать события видеоаналитики Insentry. Для настройки получения событий видеоаналитики Insentry в вашем проекте напишите запрос на support@insentry.io.
Получение данных через web-stomp
Тонкий клиент взаимодействует со службой Spot для:
- получения информации о событиях видеоаналитики в реальном времени,
- получения информации о тревогах, выявленных детекторами видеоаналитики,
- доступа к архиву событий видеоаналитики.
Для подключения к через STOMP используется URL ws://HOST:PORT/spot
, где:
- HOST - адрес службы InSentry.Spot
- PORT - порт службы InSentry.Spot (обычно 8081)
Взаимодействие тонкого клиента со службой Spot.Lite ведется по протоколу STOMP, работающему поверх протокола WebSocket.
Получение событий в реальном времени
Для получения событий видеоаналитики в реальном времени тонкий клиент подписывается на топик, выполняя STOMP-запрос SUBSCRIBE:
/topic/[camera_id]/[detector_id]
где:
camera_id
— идентификатор камеры в формате GUIDdetector_id
— идентификатор детектора, указанный в дескрипторе kernel (Формат дескриптора Kernel) в поле$.detectors[*].id
Например:
/topic/f0a72c41-79e2-4ba5-a894-6726c6f5358b/motionDetector
Для подписки на события сразу с нескольких камер могут быть использованы маски, задаваемые символом >
и означающие подписку на все субтопики. Например, для получения событий по камере f0a72c41-79e2-4ba5-a894-6726c6f5358b от любых детекторов необходимо подписаться на топик:
/topic/f0a72c41-79e2-4ba5-a894-6726c6f5358b/>
Для получения событий от любых детекторов с любых камер, обслуживаемых одной и той же службой Spot, необходимо подписаться на топик:
/topic/>
Получение состояния сцены и изменений состояния
После входу в систему тонкому клиенту необходимо получить информацию об изменениях состояния сцены, которые произошли до его подключения: состояние счетчиков, объекты разметки и т.д. Перед началом проигрывания архива, тонкому клиенту необходимо состояние сцены, которое сформировалось до того момента, с которого планируется начать просмотр архива.
Когда архив находится на паузе, при кликах по таймлайну в архиве тонкому клиенту необходимо состояние сцены на тот момент времени, для которого отображается скриншот в режиме паузы. Для получения этой информации тонкий клиент выполняет STOMP-запрос SUBSCRIBE:
/api/state/[camera_id]
Заголовки запроса: frameTimestamp:[frameTimestamp]
где:
camera_id
— идентификатор камеры в формате GUID, состояние сцены по которой необходимо получить,frameTimestamp
— момент времени, для которого необходимо получить текущее состояние сцены (unix-time в микросекундах). Параметр не обязательный и может отсутствовать, в этом случае возвращается состояние сцены на текущий момент времени.
Например:
/api/state/edc366f3-a80b-4d6e-a306-0946bef3e527
В ответ на подписку к этому топику клиент получает сообщение, содержащее состояние сцены по каждому из детекторов в том же формате, как и в запросе получения информации из архива событий видеоаналитики.
Пример ответа от детектора
Пример ответа детектора движения в запрещённой зоне:
content-type: application/json;charset=utf-8
content-length: 1237
cameraId: 8f05484c-7a79-41fd-9c71-ea4916a68b40
timestamp: 1531945640234
detectorId: faceDetector
eventType: sceneUpdate
frameWidth: 1024
frameHeight: 768
{
"objects": [
{
"id": "91307ce9-332b-41a9-b53b-617a28c8b878",
"action": "shot",
"class": "motion",
"points": [
{
"x": 100,
"y": 120
},
{
"x": 300,
"y": 200
}
],
"states": [
{
"id": "zone",
"float": 0
}
]
},
{
"id": "3c4c0f95-476c-4291-a05f-f0f20c439475",
"action": "shot",
"class": "motion",
"points": [
{
"x": 500,
"y": 320
},
{
"x": 600,
"y": 420
}
],
"states": [
{
"id": "zone",
"float": 1
}
]
},
{
"id": "4b29e160-c4e2-4172-9685-7fcfd51a10ac",
"action": "shot",
"class": "motion",
"points": [
{
"x": 10,
"y": 12
}
],
"states": [
{
"id": "zone",
"float": 3
}
]
}
]
}