- Created by Insentry Admin, last modified on Jan 12, 2022
Ниже приведены примеры того, каким образом можно получать события видеоаналитики Insentry. Для настройки получения событий видеоаналитики Insentry в вашем проекте напишите запрос на support@insentry.io.
Получение данных через web-stomp
Тонкий клиент взаимодействует со службой Spot для:
- получения информации о событиях видеоаналитики в реальном времени,
- получения информации о тревогах, выявленных детекторами видеоаналитики,
- доступа к архиву событий видеоаналитики.
Для подключения к через STOMP используется URL ws://HOST:PORT/spot
, где:
HOST
- адрес службы InSentry.SpotPORT
- порт службы 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 } ] } ] }
См. далее: