Вебхуки

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

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

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

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

Важно

Пользователь должен иметь соответствующие права доступа для создания, просмотра, изменения или удаления вебхука. Чтобы настроить права доступа, перейдите в НастройкиРоли.

Примечание

Перед использованием вебхуков убедитесь, что хотя бы один из следующих параметров задан в файле /opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py: SERVICE_EXTERNAL_ADDRESS или EXTERNAL_ADDRESS.

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

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

  2. Нажмите + Новый вебхук.

    create_webhook_ru

  3. Введите заголовок вебхука.

    webhook_ru

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

    Примечание

    Если вы настраиваете вебхук для отправки событий в Тревожный монитор, укажите URL адрес, на который будут отправляться оповещения http://ip_address:port/ff_multi/alarmer/. Подставьте вместо ip_address:port IP адрес и порт для сервиса backend_provider127.0.0.1:1111. Таким образом URL будет http://127.0.0.1:1111/ff_multi/alarmer/.

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

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

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

    Важно

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

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

    Существует два способа настройки фильтров:

    • визуально

    • с помощью кода

    Чтобы настроить фильтры визуально, нажмите Настроить.

    Универсальные фильтры для событий распознавания (лицо, силуэт, транспортное средство):

    • Совпадения: фильтровать только события с совпадением объектов/без совпадения объектов или все события.

    • Списки наблюдения: фильтровать только события по определенному списку наблюдения или все события.

    • Группы камер: фильтровать только события по определенной группе камер.

    • Камеры: фильтровать события по определенной камере.

    • Название карточки: фильтровать события с заданным названием карточки.

    • Лучший кадр события: фильтровать все события трека, только события с кадрами в реальном времени, только одно событие с лучшим кадром по окончанию трека.

    • Линия: фильтровать события с пересечением определенной линии.

    • Направление пересечения линии: фильтровать события с пересечением линий в заданном направлении или все события.

    • Есть обратное пересечение: фильтровать события с обратным пересечением/без обратного пересечения или все события.

    Фильтры для событий распознавания лиц:

    • Возраст: фильтровать события с людьми определенного возраста.

    • Борода: фильтровать события по наличию у человека бороды.

    • Эмоции: фильтровать события по выражению эмоций на лице человека.

    • Пол: отобразить события с людьми заданного пола.

    • Состояние глаз: отобразить события с людьми, у которых глаза открыты/закрыты или не видны.

    • Очки: фильтровать события по наличию очков на лице.

    • Витальность: фильтровать события по витальности (liveness) лица.

    • Медицинская маска: фильтровать события по наличию медицинской маски на лице.

    • Поворот: фильтровать события по углу поворота головы.

    • Наклон: фильтровать события по углу наклона головы.

    Фильтры для событий распознавания силуэтов:

    • Пол по силуэту: отобразить события с людьми заданного пола.

    • Возраст по силуэту: отобразить события с людьми определенного возраста.

    • Головной убор: отображать только события с людьми в головном уборе заданного типа: шапка/шляпа/кепка, капюшон/платок, без головного убора.

    • Жилет: отображать только события с людьми, одетыми в жилет заданного цвета.

    • Каска: отображать только события с людьми, одетыми в каску заданного цвета.

    • Цвет верха одежды: отображать только события с людьми, одетыми в одежду заданного цвета (верх).

    • Цвет низа одежды: отображать только события с людьми, одетыми в одежду заданного цвета (низ).

    • Тип верха одежды: отображать только те события, в которых человек носит одежду верха заданного типа: куртка, пальто, жилет, толстовка, футболка, рубашка, платье.

    • Низ одежды: отображать только те события, в которых человек носит одежду низа заданного типа: брюки, юбка, шорты, неопределенный.

    • Верх одежды: отображать только те события, в которых человек носит одежду верха заданной обобщенной категории: с длинными рукавами, с короткими рукавами, без рукавов.

    • Сумка на спине: отображать только события с людьми с сумкой на спине/без сумки на спине.

    • Сумка в руке: отображать только события с людьми с сумкой в руке/без сумки в руке.

    • Падение: отображать только те события, в которых человек падает (или упал) / падение отсутствует.

    • Курение: отображать только те события, в которых человек курит или курение отсутствует.

    • Использование телефона: отображать только те события, в которых человек использует/не использует телефон.

    • Разговор по телефону: отображать только те события, в которых человек звонит/разговаривает по телефону или нет.

    Фильтры для событий распознавания транспортных средств:

    • Марка: фильтровать события по марке транспортного средства.

    • Модель: фильтровать события по модели транспортного средства.

    • Тип кузова: отобразить события с транспортными средствами заданного типа кузова: внедорожник, седан, кроссовер, кабриолет, купе, универсал, пикап, микроавтобус, минивэн, лимузин.

    • Цвет кузова: отобразить события с транспортными средствами заданного цвета кузова.

    • Страна: отобразить события с транспортными средствами, зарегистрированными в заданной стране.

    • Регистрационный номер: найти транспортное средство с заданным номером.

    • Спецтранспорт: отобразить только события с транспортными средствами, принадлежащими заданному типу: такси (включая грузотакси), маршрутный транспорт, каршеринг, скорая помощь (включая реанимобиль), полиция (включая ДПС), автомобили МЧС и пожарные машины, газоспасательные и аварийно-спасательные службы, военная техника (включая Росгвардию), коммунальная, строительная техника (включая ЦОДД), инкассация, остальной спецтранспорт, не спецтранспорт.

    • Категория ТС: отобразить только события с транспортными средствами, принадлежащими заданной категории: категория ТС не распознана, мотоцикл, скутер, квадроцикл, легковой автомобиль, легковой автомобиль с прицепом, грузовик, грузовик с прицепом, автобус, сочленённый автобус, ТС других категорий.

    • Вес и размер ТС: отобразить события с транспортными средствами заданного веса и размера кузова.

    • Ракурс ТС: отобразить события с транспортными средствами заданного ракурса (спереди, сзади, сбоку).

    Примечание

    Цвет номера, Регион отключены по умолчанию. Чтобы включить эти параметры раскомментируйте "license_plate_number_color", "license_plate_region" в разделе FFSECURITY_UI_CONFIG в конфигурационном файле /opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py.

    sudo vi /opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py
    
    
    FFSECURITY_UI_CONFIG = {
            ...
            "cars": {
                "features": {
                  ...
                  "license_plate_number_color": [
                            "unknown",
                            "white",
                            "yellow",
                            "blue",
                            "green",
                            "grey",
                  ],
                   ...
                  "license_plate_region": ["unknown", "DXB", "SHJ", "ADH", "AJM", "UAK", "RAK", "FUJ", "TH-10", "TH-11", "TH-12", "TH-13", "TH-14", "TH-15", "TH-16", "TH-17", "TH-18", "TH-19", "TH-20", "TH-21", "TH-22", "TH-23", "TH-24", "TH-25", "TH-26", "TH-27", "TH-30", "TH-31", "TH-32", "TH-33", "TH-34", "TH-35", "TH-36", "TH-37", "TH-38", "TH-39", "TH-40", "TH-41", "TH-42", "TH-43", "TH-44", "TH-45", "TH-46", "TH-47", "TH-48", "TH-49", "TH-50", "TH-51", "TH-52", "TH-53", "TH-54", "TH-55", "TH-56", "TH-57", "TH-58", "TH-60", "TH-61", "TH-62", "TH-63", "TH-64", "TH-65", "TH-66", "TH-67", "TH-70", "TH-71", "TH-72", "TH-73", "TH-74", "TH-75", "TH-76", "TH-77", "TH-80", "TH-81", "TH-82", "TH-83", "TH-84", "TH-85", "TH-86", "TH-90", "TH-91", "TH-92", "TH-93", "TH-94", "TH-95", "TH-96"],
                  ...
                },
              ....
             },
      }
    

    После внесения изменений перезапустите контейнеры FindFace Multi.

    cd /opt/findface-multi/
    
    sudo docker-compose restart
    

    Эпизоды с людьми:

    • Тип эпизода: фильтровать эпизоды по статусу (открыт/с событиями/закрыт).

    • Совпадения: лица: отобразить только эпизоды с совпадением лиц/без совпадения лиц/все эпизоды.

    • Совпадения: силуэты: отобразить только эпизоды с совпадением силуэтов/без совпадения силуэтов/все эпизоды.

    • Списки наблюдения: отобразить только эпизоды по определенному списку наблюдения.

    • Группы камер: отобразить только эпизоды по определенной группе камер.

    • Камеры: отобразить только эпизоды по определенной камере.

    • Название карточки: отобразить эпизоды с заданным названием карточки.

    • Количество событий: отобразить эпизоды с заданным количеством событий.

    Эпизоды с транспортными средствами:

    • Тип эпизода: фильтровать эпизоды по статусу (открыт/с событиями/закрыт).

    • Совпадения: отобразить только эпизоды с совпадением транспортных средств/без совпадения транспортных средств/все эпизоды.

    • Списки наблюдения: отобразить только эпизоды по определенному списку наблюдения.

    • Группы камер: отобразить только эпизоды по определенной группе камер.

    • Камеры: отобразить только эпизоды по определенной камере.

    • Название карточки: отобразить эпизоды с заданным названием карточки.

    • ID эпизода: отобразить эпизод с определенным ID.

    • Количество событий: отобразить эпизоды с заданным количеством событий.

    Записи счетчиков:

    • Группы камер: отобразить записи счетчика по определенной группе камер.

    • Камеры: отобразить записи счетчика по определенной камере.

    • Количество лиц: фильтровать записи счетчика по количеству лиц.

    • Количество силуэтов: фильтровать записи счетчика по количеству силуэтов.

    • Количество транспортных средств: фильтровать записи счетчика по количеству транспортных средств.

    • ID счётчика: фильтровать записи счетчика с определенным ID.

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

    Примечание

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

    Чтобы настроить фильтры с помощью кода, переключитесь в режим Код. Используйте следующие описания:

    Универсальные фильтры для событий распознавания (лицо, силуэт, транспортное средство):

    Секции: face_events, body_events, car_events.

    • "matched_lists": ID списка наблюдения, [integer].

    • "camera_groups": ID группы камер, [integer].

    • "cameras": ID камеры, [integer].

    • "matched_card_in": ID совпавшей карточки, [integer].

    • "matched": результат сопоставления с картотекой, логическое значение. Установите true или false, если отправку оповещения должны вызывать только события с совпадениями или только события без совпадений.

    • "confidence_gte": минимальное значение уверенности алгоритма, number. Минимальное значение – 0, максимальное – 1.

    • "bs_type": режим отслеживания объектов на видео, возможные значения: overall, realtime.

    • "line": ID пересечения линии, [integer].

    • "line_crossing_direction": направление пересечения линии, [enum]. Возможные значения: AB, BA.

    • "backward_line_crossing": установите true или false, если событие имеет или не имеет обратное пересечение, boolean.

    Фильтры для событий распознавания лиц:

    Секция: face_events.

    • "headpose_yaw_angle_gte": минимальный поворот головы, integer (градусы). Если голова полностью повернута влево, угол равен -180. Если полностью повернута вправо, то 180. Нейтральное положение головы соответствует 0.

    • "headpose_yaw_angle_lte": максимальный поворот головы, integer (градусы). Если голова полностью повернута влево, угол равен -180. Если полностью повернута вправо, то 180. Нейтральное положение головы соответствует 0.

    • "headpose_pitch_angle_gte": минимальный наклон головы, integer (градусы). Если голова наклонена вперед, а подбородок касается груди, угол равен -180. Если голова наклонена назад и обращена к небу, то 180. Нейтральное положение головы соответствует 0.

    • "headpose_pitch_angle_lte": максимальный наклон головы, integer (градусы). Если голова наклонена вперед, а подбородок касается груди, угол равен -180. Если голова наклонена назад и обращена к небу, то 180. Нейтральное положение головы соответствует 0.

    • "gender": пол, [string]. Возможные значения: "male", "female".

    • "age_lte": максимальный возраст, integer.

    • "age_gte": минимальный возраст, integer.

    • "glasses": очки, [string]. Возможные значения: "none", "eye" (очки), "sun" (солнцезащитные очки), "other" (например, карнавальные очки, спортивные очки и т.д.).

    • "emotions": эмоции, [string]. Возможные значения: "angry", "fear", "sad", "neutral", "disgust", "happy", "surprise".

    • "beard": борода, [string]. Возможные значения: "none", "beard".

    • "medmask": медицинская маска, [string]. Возможные значения: "correct", "incorrect", "none".

    • "liveness": оценка витальности liveness, [string]. Возможные значения: "real", "fake".

    • "temperature_gte": минимальная температура, number.

    • "liveness_gte": минимальное значение уверенности алгоритма в том, что лицо витально, number. Минимальное значение – 0, максимальное – 1.

    • "eyes_attrs": состояние глаз, [string]. Возможные значения: "opened", "closed", "occluded".

    • "eyes_attrs_score_gte": минимальное значение уверенности алгоритма в том, что глаза открыты, закрыты, не видны, number. Минимальное значение – 0, максимальное – 1.

    • "eyes_attrs_score_lte": максимальное значение уверенности алгоритма в том, что глаза открыты, закрыты, не видны, number. Минимальное значение – 0, максимальное – 1.

    Фильтры для событий распознавания силуэтов:

    Секция: body_events.

    • "headwear": тип головного убора (шапка/кепка, капюшон/платок, без убора), [string]. Возможные значения: "hat", "hood", "none".

    • "upper_clothes": обобщенная категория одежды верхней части тела (с длинными рукавами, с короткими рукавами, без рукавов), [string]. Возможные значения: "long_sleeves", "short_sleeves", "without_sleeves".

    • "detailed_upper_clothes": детализированный тип одежды верхней части тела (куртка, пальто, жилет без рукавов, толстовка, футболка, рубашка, платье), [string]. Возможные значения: "jacket", "coat", "sleeveless", "sweatshirt", "t-shirt", "shirt", "dress".

    • "top_color": цвет одежды верхней части тела, [string]. Возможные значения: white, "black", "grey", "brown", "red", "orange", "yellow", "green", "lightblue", "blue", "purple", "pink", "beige", "violet".

    • "lower_clothes": тип одежды нижней части тела (брюки, юбка, шорты, неопределенный), [string]. Возможные значения:"pants", "obscured", "skirt", "shorts".

    • "bottom_color": цвет одежды нижней части тела, [string]. Возможные значения: white, "black", "grey", "brown", "red", "orange", "yellow", "green", "lightblue", "blue", "purple", "pink", "beige", "violet".

    • "bag_hand": наличие сумки в руках, [string]. Возможные значения: "none", "hand".

    • "bag_ground": наличие сумки на полу, [string]. Возможные значения: "ground", "none".

    • "bag_back": наличие сумки на спине, [string]. Возможные значения: "none", "back".

    • "vest_type_score_gte": минимальная достоверность распознавания наличия жилета, number. Минимальное значение – 0, максимальное – 1.

    • "vest_type_score_lte": максимальная достоверность распознавания наличия жилета, number. Минимальное значение – 0, максимальное – 1.

    • "vest_type": наличие средства индивидуальной защиты в виде жилета, [string]. Возможные значения:"green/yellow", "orange", "not_visible", "none".

    • "helmet_type_score_lte": максимальная достоверность распознавания наличия шлема, number. Минимальное значение – 0, максимальное – 1.

    • "helmet_type_score_gte": минимальная достоверность распознавания наличия шлема, number. Минимальное значение – 0, максимальное – 1.

    • "helmet_type": наличие средства индивидуальной защиты в виде шлема, [string]. Возможные значения: "red/orange", "white", "other", "not_visible", "none".

    • "age_group_score_lte": максимальная достоверность распознавания возрастной группы, number. Минимальное значение – 0, максимальное – 1.

    • "age_group_score_gte": минимальная достоверность распознавания возрастной группы, number. Минимальное значение – 0, максимальное – 1.

    • "age_group": возраст по группе, [string]. Возможные значения: "0-16", "17-35", "36-50", "50+".

    • "gender_score_lte": максимальная достоверность распознавания пола, number.

    • "gender_score_gte": минимальная достоверность распознавания пола, number.

    • "body_gender": пол, [string]. Возможные значения: "male", "female".

    • "fall": падение человека (падает (или упал) / падение отсутствует), [string]. Возможные значения: "fall", "none".

    • "fall_score_lte": максимальное значение уверенности алгоритма в том, что человек падает (или упал), либо падение отсутствует, number.

    • "fall_score_gte": минимальное значение уверенности алгоритма в том, что человек падает (или упал), либо падение отсутствует, number.

    • "handface_smoking": курение, [string]. Возможные значения: "smoking", "none".

    • "handface_phone_use": использование телефона, [string]. Возможные значения: "phone_use", "none".

    • "handface_phone_call": звонок/разговор по телефону, [string]. Возможные значения: "phone_call", "none".

    Фильтры для событий распознавания транспортных средств:

    Секция: car_events.

    • "category_confidence_gte": минимальная достоверность распознавания категории транспортного средства, number. Минимальное значение – 0, максимальное – 1.

    • "category_confidence_lte": максимальная достоверность распознавания категории транспортного средства, number. Минимальное значение – 0, максимальное – 1.

    • "category_type": категория транспортного средства, [string]. Возможные значения: "unknown", "A", "B", "BE", "C", "CE", "D", "DE", "other".

    • "color" цвет кузова, [string]. Возможные значения: "beige", "black", "blue", "brown", "cyan", "gold", "green", "grey", "orange", "pink", "purple", "red", "silver", "violet", "white", "yellow".

    • "body": тип кузова транспортного средства, [string]. Возможные значения: "suv", "sedan", "crossover", "convertible", "coupe", "wagon", "cab" (пикап), "minibus", "minivan", "limousine". Смотрите описание фильтров для событий распознавания транспортных средств, настроенных визуально.

    • "make": марка транспортного средства, [string]. Ознакомьтесь с соответствующим фильтром событий, чтобы узнать, какие производители поддерживаются в текущей версии.

    • "model": модель транспортного средства, [string]. Ознакомьтесь с соответствующим фильтром событий, чтобы узнать, какие модели поддерживаются в текущей версии.

    • "license_plate_number": регистрационный номер транспортного средства, [string]. Подстановочные знаки (wildcards), заменяющие другие символы, не поддерживаются.

    • "license_plate_number_color": цвет номерного знака, [string]. Возможные значения: "unknown", "white", "yellow", "blue", "green", "grey".

    • "license_plate_number_color_confidence_lte": максимальная достоверность распознавания цвета номерного знака, number.

    • "license_plate_number_color_confidence_gte": минимальная достоверность распознавания цвета номерного знака, число.

    • "license_plate_country": страна номерного знака, [string]. Ознакомьтесь с соответствующим фильтром событий, чтобы узнать, какие страны поддерживаются в текущей версии.

    • "license_plate_region": регион номерного знака, словарь строк. Ознакомьтесь с соответствующим фильтром событий, чтобы узнать, какие регионы поддерживаются в текущей версии.

    • "special_vehicle_type": спецназначение транспортного средства, [string]. Возможные значения: "taxi", "route_transport", "car_sharing", "ambulance", "police", "rescue_service", "gas_service", "military", "road_service", "other_special", "not_special".

    • "weight_type": весовая категория транспортного средства, [string]. Возможные значения: "B_light", "B_heavy", "C_light", "C_heavy", "D_light", "D_long", "other".

    • "weight_type_confidence_lte": максимальная достоверность распознавания весовой категории транспортного средства, number. Минимальное значение – 0, максимальное – 1.

    • "weight_type_confidence_gte": минимальная достоверность распознавания весовой категории транспортного средства, number. Минимальное значение – 0, максимальное – 1.

    • "orientation": ракурс транспортного средства, [string]. Возможные значения: "front", "back", "side".

    • "orientation_confidence_lte": максимальная достоверность распознавания ракурса автомобиля, number. Минимальное значение – 0, максимальное – 1.

    • "orientation_confidence_gte": минимальная достоверность распознавания ракурса автомобиля, number. Минимальное значение – 0, максимальное – 1.

    Эпизоды с людьми:

    Секция: human_episodes.

    • "allowed_types": статус эпизода [string]. Возможные значения: открытие эпизода (episode_open), добавление нового события в эпизод (episode_event), закрытие эпизода (episode_close).

    • "matched_lists": ID списка наблюдения, [integer].

    • "cameras": ID камеры, [integer].

    • "camera_groups": ID группы камер, [integer].

    • "matched_card_in": ID совпавшей карточки, [integer].

    • "events_count_gte": минимальное количество событий в эпизоде, integer.

    • "events_count_lte": максимальное количество событий в эпизоде, integer.

    • "face_matched": статус совпадения лица в эпизоде с картотекой, логическое значение. Установите true, если только эпизоды с совпадениями лиц, или false, если только эпизоды без совпадений лиц должны вызывать отправку оповещения.

    • "body_matched": статус совпадения силуэта в эпизоде с картотекой, логическое значение. Установите true, если только эпизоды с совпадениями силуэтов, или false, если только эпизоды без совпадений силуэтов должны вызывать отправку оповещения.

    Эпизоды с транспортными средствами:

    Секция: car_episodes.

    • "allowed_types": статус эпизода [string]. Возможные значения: открытие эпизода (episode_open), добавление нового события в эпизод (episode_event), закрытие эпизода (episode_close).

    • "matched_lists": ID списка наблюдения, [integer].

    • "cameras": ID камеры, number.

    • "camera_groups": ID группы камер, [integer].

    • "matched_card_in": ID совпавшей карточки, [integer].

    • "events_count_gte": минимальное количество событий в эпизоде, integer.

    • "events_count_lte": максимальное количество событий в эпизоде, integer.

    • "car_matched": статус совпадения транспортного средства в эпизоде с картотекой, логическое значение. Установите true, если только эпизоды с совпадениями ТС, или false, если только эпизоды без совпадений ТС должны вызывать отправку оповещения.

    Записи счетчиков:

    Секция: counters.

    • "counter": ID счетчика, [integer].

    • "cameras": ID камеры, [integer].

    • "camera_groups": ID группы камер, [integer].

    • "faces_count_gte": минимальное количество лиц в записи счетчика, integer.

    • "faces_count_lte": максимальное количество лиц в записи счетчика, integer.

    • "silhouettes_count_gte": минимальное количество силуэтов в записи счетчика, integer.

    • "silhouettes_count_lte": максимальное количество силуэтов в записи счетчика, integer.

    • "cars_count_gte": минимальное количество транспортных средств в записи счетчика, integer.

    • "cars_count_lte": максимальное количество транспортных средств в записи счетчика, integer.

    Пример

    Примечание

    Этот пример приведен только для ознакомления, подставьте свои значения в соответствующие поля.

    {
        "face_events": {
          "matched_lists": [
            -1
          ],
          "camera_groups": [
            -1
          ],
          "cameras": [
            1
          ],
          "matched_card_in": [
            1
          ],
          "matched": false,
          "confidence_gte": 0,
          "bs_type": [
            "overall"
          ],
          "line": [
            1
          ],
          "line_crossing_direction": [
            "AB"
          ],
          "backward_line_crossing": false,
          "headpose_yaw_angle_gte": -180,
          "headpose_yaw_angle_lte": -180,
          "headpose_pitch_angle_gte": -180,
          "headpose_pitch_angle_lte": -180,
          "gender": [
            "A"
          ],
          "age_lte": 0,
          "age_gte": 0,
          "glasses": [
            "A"
          ],
          "emotions": [
            "A"
          ],
          "beard": [
            "A"
          ],
          "medmask": [
            "A"
          ],
          "liveness": [
            "A"
          ],
          "temperature_gte": 0,
          "liveness_gte": 0,
          "eyes_attrs": [
            "A"
          ],
          "eyes_attrs_score_gte": 0,
          "eyes_attrs_score_lte": 0
        },
        "body_events": {
          "matched_lists": [
            -1
          ],
          "camera_groups": [
            -1
          ],
          "cameras": [
            1
          ],
          "matched_card_in": [
            1
          ],
          "matched": false,
          "confidence_gte": 0,
          "bs_type": [
            "overall"
          ],
          "line": [
            1
          ],
          "line_crossing_direction": [
            "AB"
          ],
          "backward_line_crossing": false,
          "headwear": [
            "A"
          ],
          "upper_clothes": [
            "A"
          ],
          "detailed_upper_clothes": [
            "A"
          ],
          "top_color": [
            "A"
          ],
          "lower_clothes": [
            "A"
          ],
          "bottom_color": [
            "A"
          ],
          "bag_hand": [
            "A"
          ],
          "bag_ground": [
            "A"
          ],
          "bag_back": [
            "A"
          ],
          "vest_type_score_gte": 0,
          "vest_type_score_lte": 0,
          "vest_type": [
            "A"
          ],
          "helmet_type_score_lte": 0,
          "helmet_type_score_gte": 0,
          "helmet_type": [
            "A"
          ],
          "age_group_score_lte": 0,
          "age_group_score_gte": 0,
          "age_group": [
            "A"
          ],
          "gender_score_lte": 0,
          "gender_score_gte": 0,
          "body_gender": [
            "A"
          ],
          "fall": [
            "A"
          ],
          "fall_score_lte": 0,
          "fall_score_gte": 0,
          "handface_smoking": [
            "A"
          ],
          "handface_phone_use": [
            "A"
          ],
          "handface_phone_call": [
            "A"
          ]
        },
        "car_events": {
          "matched_lists": [
            -1
          ],
          "camera_groups": [
            -1
          ],
          "cameras": [
            1
          ],
          "matched_card_in": [
            1
          ],
          "matched": false,
          "confidence_gte": 0,
          "bs_type": [
            "overall"
          ],
          "line": [
            1
          ],
          "line_crossing_direction": [
            "AB"
          ],
          "backward_line_crossing": false,
          "category_confidence_gte": 0,
          "category_confidence_lte": 0,
          "category_type": [
            "A"
          ],
          "color": [
            "A"
          ],
          "body": [
            "A"
          ],
          "make": [
            "A"
          ],
          "model": [
            "A"
          ],
          "license_plate_number": [
            "A"
          ],
          "license_plate_number_color": [
            "A"
          ],
          "license_plate_number_color_confidence_lte": 0,
          "license_plate_number_color_confidence_gte": 0,
          "license_plate_country": [
            "A"
          ],
          "license_plate_region": [
            "A"
          ],
          "special_vehicle_type": [
            "A"
          ],
          "weight_type": [
            "A"
          ],
          "weight_type_confidence_lte": 0,
          "weight_type_confidence_gte": 0,
          "orientation": [
            "A"
          ],
          "orientation_confidence_lte": 0,
          "orientation_confidence_gte": 0
        },
        "human_episodes": {
          "allowed_types": [
            "episode_event"
          ],
          "matched_lists": [
            -1
          ],
          "cameras": [
            1
          ],
          "camera_groups": [
            -1
          ],
          "matched_card_in": [
            1
          ],
          "events_count_gte": 0,
          "events_count_lte": 1,
          "face_matched": false,
          "body_matched": false
        },
        "car_episodes": {
          "allowed_types": [
            "episode_event"
          ],
          "matched_lists": [
            -1
          ],
          "cameras": [
            1
          ],
          "camera_groups": [
            -1
          ],
          "matched_card_in": [
            1
          ],
          "events_count_gte": 0,
          "events_count_lte": 1,
          "car_matched": false
        },
        "counters": {
          "counter": [
            0
          ],
          "cameras": [
            0
          ],
          "camera_groups": [
            -1
          ],
          "faces_count_gte": 1,
          "faces_count_lte": 0,
          "silhouettes_count_gte": 1,
          "silhouettes_count_lte": 0,
          "cars_count_gte": 1,
          "cars_count_lte": 0
        }
      }
    

    Важно

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

    Примечание

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

    {}
    

    Совет

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

    {
            "car_events": {}
    }
    

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

    {
            "human_episodes": {
                    "allowed_types": [
                            "episode_open"
                    ],
                    "face_matched": true
            }
    }
    

    Примечание

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

    {
            "body_events": {
                    "camera_groups": [1, 3],
                    "matched_card_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 CONTAINER_NAME=findface-multi-findface-multi-legacy-1 -f | grep 'Webhook'

Подробные данные в вебхуках (Verbose)

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

Откройте файл конфигурации /opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py и установите 'VERBOSE_WEBHOOKS': False:

sudo vi /opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py

...
FFSECURITY = {
    ...
    # send serialized cards, card-lists, camera and camera groups in webhooks
    'VERBOSE_WEBHOOKS': False,
    ...
}
...

После внесения изменений обязательно перезапустите контейнеры FindFace Multi.

cd /opt/findface-multi/

sudo docker-compose restart

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