Вебхуки

Вы можете настроить FindFace Multi для автоматической отправки уведомлений об определенных событиях, эпизодах, записях счетчика на заданный URL-адрес. Для этого создайте и настройте вебхук. При наступлении нужного события/эпизода/записи счетчика FindFace Multi отправит HTTP-запрос на URL-адрес, указанный в настройках вебхука.

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

В этом разделе:

Настройка вебхука

Важно

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

Примечание

Для того чтобы использовать вебхуки, обязательно укажите по крайней мере один из параметров SERVICE_EXTERNAL_ADDRESS/EXTERNAL_ADDRESS в файле /etc/findface-security/config.py.

Для создания вебхука выполните следующие действия:

  1. Перейдите на вкладку Настройки. Выберите Вебхуки.

  2. Нажмите +.

    create_webhook_ru

  3. Введите имя вебхука.

    webhook_ru

  4. Укажите адрес, на который будут отправляться оповещения.

  5. Вы можете отправлять уведомления в пакетном режиме. Укажите максимальное количество уведомлений в пакете. Фактическое количество может быть меньшим.

  6. Укажите максимальное количество попыток отправить уведомление. Интервал между попытками увеличивается экспоненциально с максимумом 100 секунд.

    Важно

    Для того чтобы получить все сообщения с момента потери соединения, если оно имеет место, установите значение 0. Установите 1, чтобы пропустить старые сообщения.

  7. FindFace Multi будет автоматически отправлять оповещения о событиях, эпизодах и показаниях счетчика, удовлетворяющих заданным фильтрам. Фильтровать события можно по следующим параметрам:

    События распознавания (лицо, силуэт, автомобиль):

    • 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: максимальное количество силуэтов в записи счетчика, число.

    {
          "face_events": {
                "allowed_bs_types": [
                      "overall",
                      "realtime"
                ],
                "camera_group_in": [],
                "camera_in": [],
                "matched_lists_in": [],
                "matched_dossier_in": [],
                "matched": true,
                "confidence_gte": 0.75
          },
          "body_events": {
                "allowed_bs_types": [
                      "overall",
                      "realtime"
                ],
                "camera_group_in": [],
                "camera_in": [],
                "matched_lists_in": [],
                "matched_dossier_in": [],
                "matched": true,
                "confidence_gte": 0.75
          },
          "car_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": 1,
                "faces_lte": 100,
                "silhouettes_gte": 1,
                "silhouettes_lte": 100
          }
    }
    

    Важно

    Используйте только фильтры, соответствующие цели поиска. Для выключения фильтра удалите его из вебхука. Не оставляйте фильтр пустым ([]), поскольку в этом случае фильтр вернет пустой результат.

    Примечание

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

    {}
    

    Совет

    Пример №1. Получение оповещений обо всех событиях:

    { "events": {} }
    

    Пример №2. Получение оповещений об открытии эпизодов с совпадениями в досье:

    { "episodes": { "allowed_types": ["episode_open"], "matched": true }}
    

    Примечание

    Вы можете задать несколько значений в фильтрах с квадратными скобками. В этом случае вебхук будет активироваться при совпадении одного из значений фильтра. В примере ниже вы будете оповещены о событии с группы камер 1 или 3, если совпало досье с id 12 или 25.

    {
            "events": {
                    "camera_group_in": [1, 3],
                    "matched_dossier_in": [12, 25],
            },
    }
    
  8. Поставьте флажок Активный.

  9. Нажмите Сохранить.

Как работает вебхук

Для тестирования работы вебхука можно использовать следующий простой веб-сервер на 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 Multi, по аналогии с примером выше.

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

Для просмотра статуса отправки вебхука в FindFace Multi выполните следующую команду:

sudo journalctl -u findface-security.service | grep 'Webhook'

Ответ в случае успеха:

May 30 14:13:43 ffsecurity[12441]: INFO    [Webhook(id=6) worker(type=face_events] <queue:  0> Sent batch(len-1, type-"face_events"): ['4355024961160384430']
May 30 14:13:43 ffsecurity[12441]: INFO    [SC:OQSrsPV9] [Webhooks manager-38bc5] Processing message(type="face_events:event_created"). Consumer reception delta: 0.003450
May 30 14:13:43 ffsecurity[12441]: INFO    [Webhook(id=6) worker(type=face_events] <queue:  0> Sent batch(len-1, type-"face_events"): ['4355024961658847580']
May 30 14:13:44 ffsecurity[12441]: INFO    [SC:JtRz2Vuo] [Webhooks manager-38bc5] Processing message(type="face_events:event_created"). Consumer reception delta: 0.001263
May 30 14:13:44 ffsecurity[12441]: INFO    [Webhook(id=6) worker(type=face_events] <queue:  0> Sent batch(len-1, type-"face_events"): ['4355024962087522421']
May 30 14:13:44 ffsecurity[12441]: INFO    [SC:9AnzRJwU] [Webhooks manager-38bc5] Processing message(type="face_events:event_created"). Consumer reception delta: 0.001691
May 30 14:13:44 ffsecurity[12441]: INFO    [Webhook(id=6) worker(type=face_events] <queue:  0> Sent batch(len-1, type-"face_events"): ['4355024962355957878']

Ответ, если попытка была неудачной:

May 30 14:18:49 ffsecurity[12441]: INFO    [SC:sp34rVQR] [Webhooks manager-38bc5] Processing message(type="face_events:event_created"). Consumer reception delta: 0.001376
May 30 14:18:49 ffsecurity[12441]: WARNING [Webhook(id=6) worker(type=face_events] <queue:  0> Error sending webhook: Cannot connect to host 127.0.0.1:8888 ssl:None [Connection refused]. Attempt 1 out of 10. Next attempt in 0.270 seconds.
May 30 14:18:50 ffsecurity[12441]: WARNING [Webhook(id=6) worker(type=face_events] <queue:  0> Error sending webhook: Cannot connect to host 127.0.0.1:8888 ssl:None [Connection refused]. Attempt 2 out of 10. Next attempt in 0.729 seconds.
May 30 14:18:50 ffsecurity[12441]: INFO    [SC:zUhLHNxN] [Webhooks manager-38bc5] Processing message(type="face_events:event_created"). Consumer reception delta: 0.001368
May 30 14:18:50 ffsecurity[12441]: INFO    [SC:1Q66tcUS] [Webhooks manager-38bc5] Processing message(type="face_events:event_created"). Consumer reception delta: 0.001386
May 30 14:18:50 ffsecurity[12441]: WARNING [Webhook(id=6) worker(type=face_events] <queue:  2> Error sending webhook: Cannot connect to host 127.0.0.1:8888 ssl:None [Connection refused]. Attempt 3 out of 10. Next attempt in 1.968 seconds.
May 30 14:18:52 ffsecurity[12441]: WARNING [Webhook(id=6) worker(type=face_events] <queue:  2> Error sending webhook: Cannot connect to host 127.0.0.1:8888 ssl:None [Connection refused]. Attempt 4 out of 10. Next attempt in 5.314 seconds.
May 30 14:18:55 ffsecurity[12441]: INFO    [SC:5kl6zGrF] [Webhooks manager-38bc5] Processing message(type="face_events:event_created"). Consumer reception delta: 0.001542
May 30 14:18:58 ffsecurity[12441]: WARNING [Webhook(id=6) worker(type=face_events] <queue:  3> Error sending webhook: Cannot connect to host 127.0.0.1:8888 ssl:None [Connection refused]. Attempt 5 out of 10. Next attempt in 14.349 seconds.

Подробные данные в вебхуках (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,
    ...
}
...

В подробном режиме оповещения по вебхуку имеют следующий формат: