Вебхуки
Вы можете настроить ПК FindFace для автоматической отправки уведомлений об определенных событиях, эпизодах, записях счетчика на заданный URL-адрес. Для этого создайте и настройте вебхук. При наступлении нужного события/эпизода/записи счетчика ПК FindFace отправит HTTP-запрос на URL-адрес, указанный в настройках вебхука.
Вебхуки можно использовать для решения разнообразных задач, например, для уведомления пользователя об определенном событии, вызова определенных действий на целевом веб-сайте, при решении задач безопасности, таких как удаленное автоматическое управление доступом и др.
В этом разделе:
Настройка вебхука
Важно
Для создания вебхука необходимы права администратора.
Примечание
Для того чтобы использовать вебхуки, обязательно укажите по крайней мере один из параметров SERVICE_EXTERNAL_ADDRESS
/EXTERNAL_ADDRESS
в файле /etc/findface-security/config.py
.
Для создания вебхука выполните следующие действия:
Перейдите на вкладку Настройки. Выберите Вебхуки.
Нажмите +.
Введите имя вебхука.
Укажите адрес, на который будут отправляться оповещения.
Вы можете отправлять уведомления в пакетном режиме. Укажите максимальное количество уведомлений в пакете. Фактическое количество может быть меньшим.
Укажите максимальное количество попыток отправить уведомление. Интервал между попытками увеличивается экспоненциально с максимумом 100 секунд.
Важно
Для того чтобы получить все сообщения с момента потери соединения, если оно имеет место, установите значение
0
. Установите1
, чтобы пропустить старые сообщения.ПК FindFace будет автоматически отправлять оповещения о событиях, эпизодах и показаниях счетчика, удовлетворяющих заданным фильтрам. Фильтровать события можно по следующим параметрам:
События:
allowed_bs_types
: режим отслеживания лиц на видео, возможные значения:overall
,realtime
.camera_group_in
: id группы камер, число.camera_in
: id камеры, число.matched_lists_in
: id списка наблюдения, число.matched_dossier_in
: id совпавшего досье, число.matched
: статус событиясовпадение
(true
илиfalse
), логический.confidence_gte
: минимальное значение уверенности алгоритма, число.
Эпизоды:
allowed_types
: статус эпизода, возможные значения: открытие эпизода (episode_open
), добавление нового события в эпизод (episode_event
), закрытие эпизода (episode_close
).camera_group_in
: id группы камер, число.camera_in
: id камеры, число.matched_lists_in
: id списка наблюдения, число.matched
: статус событиясовпадение
(true
илиfalse
), логический.events_count_gte
: минимальное количество событий в эпизоде, число.events_count_lte
: максимальное количество событий в эпизоде, число.
Счетчики:
counter_in
: id счетчика, число.camera_group_in
: id группы камер, число.camera_in
: id камеры, число.faces_gte
: минимальное количество лиц в записи счетчика, число.faces_lte
: максимальное количество лиц в записи счетчика, число.silhouettes_gte
: минимальное количество силуэтов в записи счетчика, число.silhouettes_lte
: максимальное количество силуэтов в записи счетчика, число.
{ "events": { "allowed_bs_types": [ "overall", "realtime" ], "camera_group_in": [], "camera_in": [], "matched_lists_in": [], "matched_dossier_in": [], "matched": true, "confidence_gte": 0.75 }, "episodes": { "allowed_types": [ "episode_open", "episode_event", "episode_close" ], "camera_group_in": [], "camera_in": [], "matched_lists_in": [], "matched": true, "events_count_gte": 0, "events_count_lte": 999 }, "counters": { "counter_in": [], "camera_group_in": [], "camera_in": [], "faces_gte": 0, "faces_lte": 0, "silhouettes_gte": 0, "silhouettes_lte": 0 } }
Важно
Используйте только фильтры, соответствующие цели поиска. Для выключения фильтра удалите его из вебхука. Не оставляйте фильтр пустым (
[]
), поскольку в этом случае фильтр вернет пустой результат.Примечание
Для получения всех оповещений передайте скобки без вложенных фильтров:
{}
Совет
Пример №1. Получение оповещений обо всех событиях:
{ "events": {} }
Пример №2. Получение оповещений об открытии эпизодов с совпадениями в досье:
{ "episodes": { "allowed_types": ["episode_open"], "matched": true }}
Примечание
Вы можете задать несколько значений в фильтрах с квадратными скобками. В этом случае вебхук будет активироваться при совпадении одного из значений фильтра. В примере ниже вы будете оповещены о событии с группы камер
1
или3
, если совпало досье с id12
или25
.{ "events": { "camera_group_in": [1, 3], "matched_dossier_in": [12, 25], }, }
Поставьте флажок Активный.
Нажмите Сохранить.
Как работает вебхук
Для тестирования работы вебхука можно использовать следующий простой веб-сервер на Python, обеспечивающий захват отправленных вебхуком оповещений о событиях:
from pprint import pprint
from aiohttp import web
async def handle(request):
pprint(await request.json())
return web.Response(status=200)
app = web.Application()
# for aiohttp v 3.x
# app.add_routes([web.post('/', handle)])
# for aiohttp v 2.x
app.router.add_post('/', handle)
web.run_app(app, port=8888)
Важно
Используемый вами сервер-ловушка оповещений по вебхуку должен возвращать ответ HTTP 200
после получения вебхука от ПК FindFace, по аналогии с примером выше.
Если для вебхука не задано ни одного фильтра, данный веб-сервер будет получать оповещения о каждом произошедшем в системе событии, эпизоде и записи счетчика. Оповещения отправляются в следующем формате:
Событие
[{'acknowledged': True,
'acknowledged_by': None,
'acknowledged_date': '2020-05-18T15:08:38+00:00',
'acknowledged_reaction': '',
'bs_type': 'overall',
'camera': None,
'camera_group': 1,
'confidence': 0.0,
'created_date': '2020-05-18T15:08:38+00:00',
'episode': None,
'event_type': 'event_created',
'face': 'http://172.17.46.134/uploads/2020/05/18/event/150842_face_AgohWm.jpg',
'features': {'age': None,
'beard': None,
'emotions': None,
'gender': None,
'glasses': None,
'liveness': None,
'medmask': None},
'frame': 'http://172.17.46.134/uploads/2020/05/18/event/150842_full_frame_Y3vtGe.jpg',
'frame_coords_bottom': 320,
'frame_coords_left': 117,
'frame_coords_right': 170,
'frame_coords_top': 242,
'id': '4267625862518432158',
'looks_like_confidence': None,
'matched': False,
'matched_dossier': None,
'matched_face': '',
'matched_lists': [-1],
'quality': -0.000766,
'scores': {'liveness_score': None,
'quality': -0.000766480341553,
'track': {'first_timestamp': '2020-05-18T15:08:38',
'id': '43277e17b1c2-44',
'last_timestamp': '2020-05-18T15:08:39'},
'track_duration_seconds': 2.502499999999997},
'video_source': 1,
'webhook_type': 'events'}]
Открытие эпизода
[{'acknowledged': True,
'acknowledged_by': None,
'acknowledged_date': None,
'acknowledged_reaction': '',
'best_event': '4267637154774219594',
'camera_groups': [1],
'cameras': [],
'closed_date': None,
'created_date': '2020-05-18T16:18:49.111880Z',
'event_type': 'episode_open',
'events_count': 1,
'features': None,
'id': 2118,
'last_event': {'acknowledged': True,
'acknowledged_by': None,
'acknowledged_date': '2020-05-18T16:18:46+00:00',
'acknowledged_reaction': '',
'camera': None,
'camera_group': 1,
'confidence': 0.0,
'created_date': '2020-05-18T16:18:46+00:00',
'episode': 2118,
'face': 'http://172.17.46.134/uploads/2020/05/18/event/161849_face_j2TQwk.jpg',
'features': {'age': None,
'beard': None,
'emotions': None,
'gender': None,
'glasses': None,
'liveness': None,
'medmask': None},
'frame': 'http://172.17.46.134/uploads/2020/05/18/event/161849_full_frame_vTfuH9.jpg',
'frame_coords_bottom': 327,
'frame_coords_left': 778,
'frame_coords_right': 901,
'frame_coords_top': 161,
'id': '4267637154774219594',
'looks_like_confidence': None,
'matched': False,
'matched_dossier': None,
'matched_face': '',
'matched_lists': [-1],
'quality': -0.000311,
'scores': {'liveness_score': None,
'quality': -0.000311948591843,
'track': {'first_timestamp': '2020-05-18T16:18:46',
'id': '1ee9a3612af3-9',
'last_timestamp': '2020-05-18T16:18:47'},
'track_duration_seconds': 2.039999999999999},
'video_source': 2},
'matched_event': None,
'matched_lists': [-1],
'open': True,
'webhook_type': 'episodes'}]
Закрытие эпизода
[{'acknowledged': True,
'acknowledged_by': None,
'acknowledged_date': None,
'acknowledged_reaction': '',
'best_event': {'acknowledged': True,
'acknowledged_by': None,
'acknowledged_date': '2020-05-18T15:09:57+00:00',
'acknowledged_reaction': '',
'camera': None,
'camera_group': 1,
'confidence': 0.0,
'created_date': '2020-05-18T15:09:57+00:00',
'episode': 518,
'face': 'http://172.17.46.134/uploads/2020/05/18/event/151012_face_5LlHQL.jpg',
'features': {'age': None,
'beard': None,
'emotions': None,
'gender': None,
'glasses': None,
'liveness': None,
'medmask': None},
'frame': 'http://172.17.46.134/uploads/2020/05/18/event/151012_full_frame_CdNn2N.jpg',
'frame_coords_bottom': 299,
'frame_coords_left': 917,
'frame_coords_right': 1005,
'frame_coords_top': 179,
'id': '4267626103667833809',
'looks_like_confidence': None,
'matched': False,
'matched_dossier': None,
'matched_face': '',
'matched_lists': [-1],
'quality': -0.653877,
'scores': {'liveness_score': None,
'quality': -0.653877139091491,
'track': {'first_timestamp': '2020-05-18T15:09:57',
'id': '43277e17b1c2-231',
'last_timestamp': '2020-05-18T15:09:57'},
'track_duration_seconds': 0.250255555555554},
'video_source': 1},
'camera_groups': [1],
'cameras': [],
'closed_date': '2020-05-18T15:10:42.870851Z',
'created_date': '2020-05-18T15:10:12.201230Z',
'event_type': 'episode_close',
'events_count': 1,
'features': None,
'id': 518,
'last_event': {'acknowledged': True,
'acknowledged_by': None,
'acknowledged_date': '2020-05-18T15:09:57+00:00',
'acknowledged_reaction': '',
'camera': None,
'camera_group': 1,
'confidence': 0.0,
'created_date': '2020-05-18T15:09:57+00:00',
'episode': 518,
'face': 'http://172.17.46.134/uploads/2020/05/18/event/151012_face_5LlHQL.jpg',
'features': {'age': None,
'beard': None,
'emotions': None,
'gender': None,
'glasses': None,
'liveness': None,
'medmask': None},
'frame': 'http://172.17.46.134/uploads/2020/05/18/event/151012_full_frame_CdNn2N.jpg',
'frame_coords_bottom': 299,
'frame_coords_left': 917,
'frame_coords_right': 1005,
'frame_coords_top': 179,
'id': '4267626103667833809',
'looks_like_confidence': None,
'matched': False,
'matched_dossier': None,
'matched_face': '',
'matched_lists': [-1],
'quality': -0.653877,
'scores': {'liveness_score': None,
'quality': -0.653877139091491,
'track': {'first_timestamp': '2020-05-18T15:09:57',
'id': '43277e17b1c2-231',
'last_timestamp': '2020-05-18T15:09:57'},
'track_duration_seconds': 0.250255555555554},
'video_source': 1},
'matched_event': None,
'matched_lists': [-1],
'open': False,
'webhook_type': 'episodes'}]
Запись счетчика
[{'camera': 3,
'camera_group': 1,
'counter': 2,
'counter_name': 'smosh',
'created_date': '2020-05-18T16:15:06.679592Z',
'event_type': 'counter_record',
'faces_bbox': [[[700, 210], [894, 210], [894, 464], [700, 464]],
[[160, 190], [304, 190], [304, 394], [160, 394]]],
'faces_count': 2,
'fullframe': 'http://172.17.46.134/uploads/2020/05/18/counters/161506_fullframe_7Z8n7X.jpg',
'id': 16,
'silhouettes_bbox': [[[15, 135], [584, 135], [584, 709], [15, 709]],
[[585, 80], [1194, 80], [1194, 684], [585, 684]],
[[0, 380], [69, 380], [69, 714], [0, 714]]],
'silhouettes_count': 3,
'thumbnail': 'http://172.17.46.134/uploads/2020/05/18/counters/161506_thumb_XLMFwE.jpg',
'webhook_type': 'counters'}]
Для просмотра статуса отправки вебхука в ПК FindFace, выполните следующую команду:
sudo journalctl -u findface-security.service | grep 'WebhooksManager'
Ответ в случае успеха:
May 18 21:21:38 qa-2 ffsecurity[17851]: INFO [WebhooksManager] Updating "events" workers for webhooks: {2}
May 18 21:21:52 qa-2 ffsecurity[17851]: INFO [WebhooksManager] [SC:9KHqkQg7-VW:aa3af58f] Webhook updater processing message(type-"events:event_created"). Consumer reception delta: 0.002617
May 18 21:21:52 qa-2 ffsecurity[17851]: INFO [WebhooksManager:2] <queue: 0> Webhook worker(id-2, type-"events") sent batch(len-1, type-"events"): ['4267685965791894192']
May 18 21:21:53 qa-2 ffsecurity[17851]: INFO [WebhooksManager] [SC:v59UsC1V-VW:75c4a9ec] Webhook updater processing message(type-"events:event_created"). Consumer reception delta: 0.002386
May 18 21:21:53 qa-2 ffsecurity[17851]: INFO [WebhooksManager:2] <queue: 0> Webhook worker(id-2, type-"events") sent batch(len-1, type-"events"): ['4267685968207813297']
May 18 21:21:53 qa-2 ffsecurity[17851]: INFO [WebhooksManager] [SC:vKNlXiIn-VW:c0219d31] Webhook updater processing message(type-"events:event_created"). Consumer reception delta: 0.004499
May 18 21:21:53 qa-2 ffsecurity[17851]: INFO [WebhooksManager:2] <queue: 0> Webhook worker(id-2, type-"events") sent batch(len-1, type-"events"): ['4267685968837561053']
May 18 21:21:55 qa-2 ffsecurity[17851]: INFO [WebhooksManager] [SC:zZO8v4LJ-VW:feff75dd] Webhook updater processing message(type-"events:event_created"). Consumer reception delta: 0.001905
May 18 21:21:55 qa-2 ffsecurity[17851]: INFO [WebhooksManager:2] <queue: 0> Webhook worker(id-2, type-"events") sent batch(len-1, type-"events"): ['4267685973269790230']
May 18 21:21:57 qa-2 ffsecurity[17851]: INFO [WebhooksManager] [SC:EbpDel24-VW:083688e2] Webhook updater processing message(type-"events:event_created"). Consumer reception delta: 0.002017
May 18 21:21:57 qa-2 ffsecurity[17851]: INFO [WebhooksManager:2] <queue: 0> Webhook worker(id-2, type-"events") sent batch(len-1, type-"events"): ['4267685977917324748']
May 18 21:21:57 qa-2 ffsecurity[17851]: INFO [WebhooksManager] [SC:L5XoQTdq-VW:6f1e397f] Webhook updater processing message(type-"events:event_created"). Consumer reception delta: 0.009237
May 18 21:21:57 qa-2 ffsecurity[17851]: INFO [WebhooksManager:2] <queue: 0> Webhook worker(id-2, type-"events") sent batch(len-1, type-"events"): ['4267685979796372941']
May 18 21:21:58 qa-2 ffsecurity[17851]: INFO [WebhooksManager] [SC:ZZ33mwuv-VW:a4cad3a2] Webhook updater processing message(type-"events:event_created"). Consumer reception delta: 0.008542
May 18 21:21:58 qa-2 ffsecurity[17851]: INFO [WebhooksManager:2] <queue: 0> Webhook worker(id-2, type-"events") sent batch(len-1, type-"events"): ['4267685980899116054']
May 18 21:21:58 qa-2 ffsecurity[17851]: INFO [WebhooksManager] [SC:BfAQRgp0-VW:4c19b207] Webhook updater processing message(type-"events:event_created"). Consumer reception delta: 0.003183
May 18 21:21:58 qa-2 ffsecurity[17851]: INFO [WebhooksManager:2] <queue: 0> Webhook worker(id-2, type-"events") sent batch(len-1, type-"events"): ['4267685982215838395']
Ответ, если попытка была неудачной:
May 18 21:29:09 qa-2 ffsecurity[17851]: INFO [WebhooksManager] [SC:jrGdiC7e-VW:2def51cf] Webhook updater processing message(type-"events:event_created"). Consumer reception delta: 0.003909
May 18 21:29:09 qa-2 ffsecurity[17851]: WARNING [WebhooksManager:2] <queue: 1> Webhook worker(id-2, type-"events") Error sending webhook: 405, message='Not Allowed'. Attempt 2 out of 10. Next attempt in 0.729 seconds.
May 18 21:29:10 qa-2 ffsecurity[17851]: INFO [WebhooksManager] [SC:jgqLszI7-VW:6a7fea19] Webhook updater processing message(type-"events:event_created"). Consumer reception delta: 0.002402
May 18 21:29:10 qa-2 ffsecurity[17851]: WARNING [WebhooksManager:2] <queue: 2> Webhook worker(id-2, type-"events") Error sending webhook: 405, message='Not Allowed'. Attempt 3 out of 10. Next attempt in 1.968 seconds.
May 18 21:29:10 qa-2 ffsecurity[17851]: INFO [WebhooksManager] [SC:LLGB1RRR-VW:053d7c7d] Webhook updater processing message(type-"events:event_created"). Consumer reception delta: 0.003794
May 18 21:29:11 qa-2 ffsecurity[17851]: INFO [WebhooksManager] [SC:4Vl23NQD-VW:a4640479] Webhook updater processing message(type-"events:event_created"). Consumer reception delta: 0.037162
May 18 21:29:11 qa-2 ffsecurity[17851]: INFO [WebhooksManager] [SC:QKY577ed-VW:41cd531a] Webhook updater processing message(type-"events:event_created"). Consumer reception delta: 0.005274
May 18 21:29:12 qa-2 ffsecurity[17851]: INFO [WebhooksManager] [SC:SVSrlj1n-VW:973ae0dd] Webhook updater processing message(type-"events:event_created"). Consumer reception delta: 0.004273
May 18 21:29:12 qa-2 ffsecurity[17851]: WARNING [WebhooksManager:2] <queue: 6> Webhook worker(id-2, type-"events") Error sending webhook: 405, message='Not Allowed'. Attempt 4 out of 10. Next attempt in 5.314 seconds.
May 18 21:29:12 qa-2 ffsecurity[17851]: INFO [WebhooksManager] [SC:phoO3HFd-VW:9c6812d1] Webhook updater processing message(type-"events:event_created"). Consumer reception delta: 0.019604
May 18 21:29:13 qa-2 ffsecurity[17851]: INFO [WebhooksManager] [SC:WDMmZ5MO-VW:842b3397] Webhook updater processing message(type-"events:event_created"). Consumer reception delta: 0.231164
Подробные данные в вебхуках (Verbose)
По умолчанию оповещения по вебхуку содержат только идентификаторы таких объектов, как досье, списки наблюдения, камеры и группы камер. Для того чтобы получать подробную информацию по данным объектам, включите подробный режим оповещений по вебхукам (режим verbose).
Для этого откройте файл конфигурации /etc/findface-security/config.py
и установите в нем 'VERBOSE_WEBHOOKS': True
:
sudo vi /etc/findface-security/config.py
...
FFSECURITY = {
...
# send serialized dossiers, dossier-lists, camera and camera groups in webhooks
'VERBOSE_WEBHOOKS': True,
...
}
...
В подробном режиме оповещения по вебхуку имеют следующий формат:
Событие (Verbose)
[{'acknowledged': True,
'acknowledged_by': None,
'acknowledged_date': '2020-07-30T14:41:52+00:00',
'acknowledged_reaction': '',
'bs_type': 'overall',
'camera': {'active': True,
'azimuth': None,
'comment': '',
'created_date': '2020-07-12T05:57:50.459974Z',
'group': 1,
'health_status': {'code': 'yellow',
'code_desc': 'Some faces from this camera '
"couldn't be processed",
'enabled': True,
'msg': '',
'statistic': {'decoding_soft_errors': 0,
'faces_failed': 17,
'faces_not_posted': 0,
'faces_posted': 185,
'frames_dropped': 1066,
'frame_height': 1080,
'frames_imotion_skipped': 0,
'frames_processed': 36421,
'frame_width': 1920
'job_starts': 1,
'processed_duration': 1499.44,
'processing_fps': 38.595585},
'status': 'INPROGRESS'},
'id': 1,
'latitude': None,
'longitude': None,
'modified_date': '2020-07-20T06:38:58.607160Z',
'name': '1',
'screenshot': 'http://172.17.47.245/cameras/1/screenshot/',
'stream_settings': {'api_timeout': 15000,
'draw_track': False,
'fd_frame_height': -1,
'ffmpeg_format': '',
'ffmpeg_params': [],
'jpeg_quality': 95,
'max_face_size': 0,
'md_scale': 0.3,
'md_threshold': 0.002,
'min_d_score': -1000,
'min_face_size': 0,
'min_score': -2,
'npersons': 4,
'overall': True,
'realtime': False,
'realtime_dly': 500,
'realtime_post_perm': False,
'roi': '',
'rot': '',
'tracker_threads': 4},
'stream_settings_gpu': {'ffmpeg_format': '',
'ffmpeg_params': [],
'filter_max_face_size': 8192,
'filter_min_face_size': 1,
'filter_min_quality': 0.45,
'imotion_threshold': 0,
'jpeg_quality': 95,
'overall_only': True,
'play_speed': -1,
'realtime_post_every_interval': False,
'realtime_post_first_immediately': False,
'realtime_post_interval': 1,
'roi': '',
'rot': '',
'router_timeout_ms': 15000,
'router_verify_ssl': True,
'start_stream_timestamp': 0,
'use_stream_timestamp': False},
'threshold': None,
'url': 'http://a3569458063-s26881.cdn.ngenix.net/live/smil:r24.smil/chunklist_b1200000.m3u8?codec=mpeg4'},
'camera_group': {'active': True,
'comment': '',
'created_date': '2020-07-12T05:48:09.537724Z',
'deduplicate': True,
'deduplicateDelay': 10,
'id': 1,
'labels': {},
'modified_date': '2020-07-17T01:41:22.944825Z',
'name': 'Default Camera Group',
'permissions': {'1': 'view', '2': 'view', '3': 'view'},
'threshold': None},
'confidence': 0.0,
'created_date': '2020-07-30T14:41:52+00:00',
'episode': None,
'event_type': 'event_created',
'face': 'http://172.17.47.245/uploads/2020/07/30/event/144203_face_5ks7RN.jpg',
'features': {'age': None,
'beard': None,
'emotions': None,
'gender': None,
'glasses': None,
'liveness': None,
'medmask': None},
'frame': 'http://172.17.47.245/uploads/2020/07/30/event/144203_full_frame_OC4sG3.jpg',
'frame_coords_bottom': 427,
'frame_coords_left': 367,
'frame_coords_right': 600,
'frame_coords_top': 119,
'id': '4284552331019521692',
'looks_like_confidence': None,
'matched': False,
'matched_dossier': None,
'matched_face': '',
'matched_lists': [{'acknowledge': False,
'active': True,
'camera_groups': [],
'color': 'ffffff',
'comment': 'Default list for unmatched evenets',
'created_date': '2020-07-12T05:48:09.324264Z',
'id': -1,
'modified_date': '2020-07-12T05:48:09.324369Z',
'name': 'Unmatched',
'notify': False,
'permissions': {},
'remote_url': None,
'threshold': None}],
'quality': -0.000112,
'scores': {'liveness_score': None,
'quality': -0.00011235895362900001,
'track': {'first_timestamp': '2020-07-30T14:41:51',
'id': '313e117d86b3-203',
'last_timestamp': '2020-07-30T14:42:01'},
'track_duration_seconds': 4.799999999999272},
'temperature': None,
'webhook_type': 'events'}]
Открытие эпизода (Verbose)
[{'acknowledged': True,
'acknowledged_by': None,
'acknowledged_date': None,
'acknowledged_reaction': '',
'best_event': '4284565234541639834',
'camera_groups': [{'active': True,
'comment': '',
'created_date': '2020-07-12T05:48:09.537724Z',
'deduplicate': True,
'deduplicateDelay': 10,
'id': 1,
'labels': {},
'modified_date': '2020-07-17T01:41:22.944825Z',
'name': 'Default Camera Group',
'permissions': {'1': 'view', '2': 'view', '3': 'view'},
'threshold': None}],
'cameras': [{'active': True,
'azimuth': None,
'comment': '',
'created_date': '2020-07-12T05:57:50.459974Z',
'group': 1,
'health_status': {'code': 'yellow',
'code_desc': 'Some faces from this camera '
"couldn't be processed",
'enabled': True,
'msg': '',
'statistic': {'decoding_soft_errors': 0,
'faces_failed': 20,
'faces_not_posted': 0,
'faces_posted': 1027,
'frames_dropped': 4082,
'frame_height': 1080,
'frames_imotion_skipped': 0,
'frames_processed': 153841,
'frame_width': 1920,
'job_starts': 1,
'processed_duration': 6320.04,
'processing_fps': 49.990253},
'status': 'INPROGRESS'},
'id': 1,
'latitude': None,
'longitude': None,
'modified_date': '2020-07-20T06:38:58.607160Z',
'name': '1',
'screenshot': 'http://172.17.47.245/cameras/1/screenshot/',
'stream_settings': {'api_timeout': 15000,
'draw_track': False,
'fd_frame_height': -1,
'ffmpeg_format': '',
'ffmpeg_params': [],
'jpeg_quality': 95,
'max_face_size': 0,
'md_scale': 0.3,
'md_threshold': 0.002,
'min_d_score': -1000,
'min_face_size': 0,
'min_score': -2,
'npersons': 4,
'overall': True,
'realtime': False,
'realtime_dly': 500,
'realtime_post_perm': False,
'roi': '',
'rot': '',
'tracker_threads': 4},
'stream_settings_gpu': {'ffmpeg_format': '',
'ffmpeg_params': [],
'filter_max_face_size': 8192,
'filter_min_face_size': 1,
'filter_min_quality': 0.45,
'imotion_threshold': 0,
'jpeg_quality': 95,
'overall_only': True,
'play_speed': -1,
'realtime_post_every_interval': False,
'realtime_post_first_immediately': False,
'realtime_post_interval': 1,
'roi': '',
'rot': '',
'router_timeout_ms': 15000,
'router_verify_ssl': True,
'start_stream_timestamp': 0,
'use_stream_timestamp': False},
'threshold': None,
'url': 'http://a3569458063-s26881.cdn.ngenix.net/live/smil:r24.smil/chunklist_b1200000.m3u8?codec=mpeg4'}],
'closed_date': None,
'created_date': '2020-07-30T16:01:52Z',
'event_type': 'episode_open',
'events_count': 1,
'features': None,
'id': 104229,
'last_event': {'acknowledged': True,
'acknowledged_by': None,
'acknowledged_date': '2020-07-30T16:01:52+00:00',
'acknowledged_reaction': '',
'camera': 1,
'camera_group': 1,
'confidence': 0.0,
'created_date': '2020-07-30T16:01:52+00:00',
'episode': 104229,
'face': 'http://172.17.47.245/uploads/2020/07/30/event/160210_face_LnGXeX.jpg',
'features': {'age': None,
'beard': None,
'emotions': None,
'gender': None,
'glasses': None,
'liveness': None,
'medmask': None},
'frame': 'http://172.17.47.245/uploads/2020/07/30/event/160210_full_frame_2N1x5Y.jpg',
'frame_coords_bottom': 254,
'frame_coords_left': 223,
'frame_coords_right': 319,
'frame_coords_top': 137,
'id': '4284565234541639834',
'looks_like_confidence': None,
'matched': False,
'matched_dossier': None,
'matched_face': '',
'matched_lists': [-1],
'quality': 0.000206,
'scores': {'liveness_score': None,
'quality': 0.00020667129138,
'track': {'first_timestamp': '2020-07-30T16:01:48',
'id': '313e117d86b3-1047',
'last_timestamp': '2020-07-30T16:02:09'},
'track_duration_seconds': 19.56000000000131},
'temperature': None,
'video_source': None},
,
'matched_event': None,
'matched_lists': [{'acknowledge': False,
'active': True,
'camera_groups': [],
'color': 'ffffff',
'comment': 'Default list for unmatched evenets',
'created_date': '2020-07-12T05:48:09.324264Z',
'id': -1,
'modified_date': '2020-07-12T05:48:09.324369Z',
'name': 'Unmatched',
'notify': False,
'permissions': {},
'remote_url': None,
'threshold': None}],
'open': True,
'temperature': None,
'webhook_type': 'episodes'}]
Закрытие эпизода (Verbose)
[{'acknowledged': True,
'acknowledged_by': None,
'acknowledged_date': None,
'acknowledged_reaction': '',
'best_event': {'acknowledged': True,
'acknowledged_by': None,
'acknowledged_date': '2020-07-30T16:05:09+00:00',
'acknowledged_reaction': '',
'camera': 1,
'camera_group': 1,
'confidence': 0.0,
'created_date': '2020-07-30T16:05:06+00:00',
'episode': 104236,
'face': 'http://172.17.47.245/uploads/2020/07/30/event/160509_face_PXGmaZ.jpg',
'features': {'age': None,
'beard': None,
'emotions': None,
'gender': None,
'glasses': None,
'liveness': None,
'medmask': None},
'frame': 'http://172.17.47.245/uploads/2020/07/30/event/160509_full_frame_YeIRKk.jpg',
'frame_coords_bottom': 322,
'frame_coords_left': 465,
'frame_coords_right': 574,
'frame_coords_top': 190,
'id': '4284565716150084776',
'looks_like_confidence': None,
'matched': False,
'matched_dossier': None,
'matched_face': '',
'matched_lists': [-1],
'quality': -0.000468,
'scores': {'liveness_score': None,
'quality': -0.000468814512714,
'track': {'first_timestamp': '2020-07-30T16:04:56',
'id': '313e117d86b3-1071',
'last_timestamp': '2020-07-30T16:05:08'},
'track_duration_seconds': 8.159999999999854},
'temperature': None},
'camera_groups': [{'active': True,
'comment': '',
'created_date': '2020-07-12T05:48:09.537724Z',
'deduplicate': True,
'deduplicateDelay': 10,
'id': 1,
'labels': {},
'modified_date': '2020-07-17T01:41:22.944825Z',
'name': 'Default Camera Group',
'permissions': {'1': 'view', '2': 'view', '3': 'view'},
'threshold': None}],
'cameras': [{'active': True,
'azimuth': None,
'comment': '',
'created_date': '2020-07-12T05:57:50.459974Z',
'group': 1,
'health_status': {'code': 'yellow',
'code_desc': 'Some faces from this camera'
'cannot be processed',
'enabled': True,
'msg': '',
'statistic': {'decoding_soft_errors': 0,
'faces_failed': 20,
'faces_not_posted': 0,
'faces_posted': 1051,
'frames_dropped': 4253,
'frame_height': 1080,
'frames_imotion_skipped': 0,
'frames_processed': 158401,
'frame_width': 1920,
'job_starts': 1,
'processed_duration': 6509.28,
'processing_fps': 48.428185},
'status': 'INPROGRESS'},
'id': 1,
'latitude': None,
'longitude': None,
'modified_date': '2020-07-20T06:38:58.607160Z',
'name': '1',
'screenshot': 'http://172.17.47.245/cameras/1/screenshot/',
'stream_settings': {'api_timeout': 15000,
'draw_track': False,
'fd_frame_height': -1,
'ffmpeg_format': '',
'ffmpeg_params': [],
'jpeg_quality': 95,
'max_face_size': 0,
'md_scale': 0.3,
'md_threshold': 0.002,
'min_d_score': -1000,
'min_face_size': 0,
'min_score': -2,
'npersons': 4,
'overall': True,
'realtime': False,
'realtime_dly': 500,
'realtime_post_perm': False,
'roi': '',
'rot': '',
'tracker_threads': 4},
'stream_settings_gpu': {'ffmpeg_format': '',
'ffmpeg_params': [],
'filter_max_face_size': 8192,
'filter_min_face_size': 1,
'filter_min_quality': 0.45,
'imotion_threshold': 0,
'jpeg_quality': 95,
'overall_only': True,
'play_speed': -1,
'realtime_post_every_interval': False,
'realtime_post_first_immediately': False,
'realtime_post_interval': 1,
'roi': '',
'rot': '',
'router_timeout_ms': 15000,
'router_verify_ssl': True,
'start_stream_timestamp': 0,
'use_stream_timestamp': False},
'threshold': None,
'url': 'http://a3569458063-s26881.cdn.ngenix.net/live/smil:r24.smil/chunklist_b1200000.m3u8?codec=mpeg4'}],
'closed_date': '2020-07-30T16:05:24.077331Z',
'created_date': '2020-07-30T16:04:02Z',
'event_type': 'episode_close',
'events_count': 4,
'features': None,
'id': 104236,
'last_event': {'acknowledged': True,
'acknowledged_by': None,
'acknowledged_date': '2020-07-30T16:05:09+00:00',
'acknowledged_reaction': '',
'camera': 1,
'camera_group': 1,
'confidence': 0.0,
'created_date': '2020-07-30T16:05:06+00:00',
'episode': 104236,
'face': 'http://172.17.47.245/uploads/2020/07/30/event/160509_face_PXGmaZ.jpg',
'features': {'age': None,
'beard': None,
'emotions': None,
'gender': None,
'glasses': None,
'liveness': None,
'medmask': None},
'frame': 'http://172.17.47.245/uploads/2020/07/30/event/160509_full_frame_YeIRKk.jpg',
'frame_coords_bottom': 322,
'frame_coords_left': 465,
'frame_coords_right': 574,
'frame_coords_top': 190,
'id': '4284565716150084776',
'looks_like_confidence': None,
'matched': False,
'matched_dossier': None,
'matched_face': '',
'matched_lists': [-1],
'quality': -0.000468,
'scores': {'liveness_score': None,
'quality': -0.000468814512714,
'track': {'first_timestamp': '2020-07-30T16:04:56',
'id': '313e117d86b3-1071',
'last_timestamp': '2020-07-30T16:05:08'},
'track_duration_seconds': 8.159999999999854},
'temperature': None},
'matched_event': None,
'matched_lists': [{'acknowledge': False,
'active': True,
'camera_groups': [],
'color': 'ffffff',
'comment': 'Default list for unmatched evenets',
'created_date': '2020-07-12T05:48:09.324264Z',
'id': -1,
'modified_date': '2020-07-12T05:48:09.324369Z',
'name': 'Unmatched',
'notify': False,
'permissions': {},
'threshold': None}],
'open': False,
'temperature': None,
'webhook_type': 'episodes'}]
Запись счетчика (Verbose)
[{'camera': {'active': True,
'azimuth': None,
'comment': '',
'created_date': '2020-07-12T05:57:50.459974Z',
'group': 1,
'health_status': {'code': 'green',
'code_desc': 'Всё в порядке',
'enabled': True,
'msg': '',
'statistic': {'decoding_soft_errors': 0,
'faces_failed': 0,
'faces_not_posted': 0,
'faces_posted': 55,
'frames_dropped': 309,
'frame_height': 1080,
'frames_imotion_skipped': 0,
'frames_processed': 3181,
'frame_width': 1920,
'job_starts': 3,
'processed_duration': 139.68,
'processing_fps': 184.37485},
'status': 'INPROGRESS'},
'id': 1,
'latitude': None,
'longitude': None,
'modified_date': '2020-07-30T19:56:40.773455Z',
'name': '1',
'screenshot': 'http://172.17.47.245/cameras/1/screenshot/',
'stream_settings': {'api_timeout': 15000,
'draw_track': False,
'fd_frame_height': -1,
'ffmpeg_format': '',
'ffmpeg_params': [],
'jpeg_quality': 95,
'max_face_size': 0,
'md_scale': 0.3,
'md_threshold': 0.002,
'min_d_score': -1000,
'min_face_size': 0,
'min_score': -2,
'npersons': 4,
'overall': True,
'realtime': False,
'realtime_dly': 500,
'realtime_post_perm': False,
'roi': '',
'rot': '',
'tracker_threads': 4},
'stream_settings_gpu': {'ffmpeg_format': '',
'ffmpeg_params': [],
'filter_max_face_size': 8192,
'filter_min_face_size': 1,
'filter_min_quality': 0.45,
'imotion_threshold': 0,
'jpeg_quality': 95,
'overall_only': False,
'play_speed': -1,
'realtime_post_every_interval': False,
'realtime_post_first_immediately': False,
'realtime_post_interval': 1,
'roi': '',
'rot': '',
'router_timeout_ms': 15000,
'router_verify_ssl': True,
'start_stream_timestamp': 0,
'use_stream_timestamp': False},
'threshold': None,
'url': 'http://a3569458063-s26881.cdn.ngenix.net/live/smil:r24.smil/chunklist_b1200000.m3u8?codec=mpeg4'},
'camera_group': {'active': True,
'comment': '',
'created_date': '2020-07-12T05:48:09.537724Z',
'deduplicate': True,
'deduplicateDelay': 10,
'id': 1,
'labels': {},
'modified_date': '2020-07-17T01:41:22.944825Z',
'name': 'Default Camera Group',
'permissions': {'1': 'view', '2': 'view', '3': 'view'},
'threshold': None},
'counter': {'active': True,
'camera': 1,
'count_interval': 5,
'created_date': '2020-07-30T17:56:01.469273Z',
'detect_faces': True,
'detect_silhouettes': False,
'id': 1,
'modified_date': '2020-07-30T19:58:31.544631Z',
'name': '123',
'roi': [[0, 0], [1024, 0], [1024, 576], [0, 576]]},
'counter_name': '123',
'created_date': '2020-07-30T20:17:01.443532Z',
'event_type': 'counter_record',
'faces_bbox': [[[327, 289], [474, 289], [474, 485], [327, 485]]],
'faces_count': 1,
'fullframe': 'http://172.17.47.245/uploads/2020/07/30/counters/201701_fullframe_fDH9f4.jpg',
'id': 1253,
'silhouettes_bbox': None,
'silhouettes_count': 0,
'thumbnail': 'http://172.17.47.245/uploads/2020/07/30/counters/201701_thumb_I5fzIP.jpg',
'webhook_type': 'counters'}]