Вебхуки

Вы можете настроить 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. Укажите адрес, на который будут отправляться оповещения.

  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"],
                  ...
                },
              ....
             },
      }
    

    После внесения изменений перезапустите контейнеры 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": 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" (солнцезащитные очки).

    • "emotions": эмоции, [string]. Возможные значения: "any", "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.

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

    Секция: 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".

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

    Секция: 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].

    • "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].

    • "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.

    • "proximity_min_lte": отправить оповещение, если минимальное задетектированное расстояние в метрах меньше указанной величины, number.

    • "proximity_min_gte": отправить оповещение, если минимальное задетектированное расстояние в метрах больше указанной величины, number.

    • "proximity_avg_lte": отправить оповещение, если среднее задетектированное расстояние в метрах меньше указанной величины, number.

    • "proximity_avg_gte": отправить оповещение, если среднее задетектированное расстояние в метрах больше указанной величины, number.

    • "proximity_max_lte": отправить оповещение, если максимальное задетектированное расстояние в метрах меньше указанной величины, number.

    • "proximity_max_gte": отправить оповещение, если максимальное задетектированное расстояние в метрах больше указанной величины, number.

    Пример

    Примечание

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

    {
        "face_events": {
          "matched_lists": [
            -1
          ],
          "camera_groups": [
            -1
          ],
          "cameras": [
            1
          ],
          "matched_card": [
            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
        },
        "body_events": {
          "matched_lists": [
            -1
          ],
          "camera_groups": [
            -1
          ],
          "cameras": [
            1
          ],
          "matched_card": [
            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"
          ]
        },
        "car_events": {
          "matched_lists": [
            -1
          ],
          "camera_groups": [
            -1
          ],
          "cameras": [
            1
          ],
          "matched_card": [
            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
          ],
          "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
          ],
          "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,
          "proximity_min_lte": 0,
          "proximity_min_gte": 0,
          "proximity_avg_lte": 0,
          "proximity_avg_gte": 0,
          "proximity_max_lte": 0,
          "proximity_max_gte": 0
        }
      }
    

    Важно

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

    Примечание

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

    {}
    

    Совет

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

    { "car_events": {} }
    

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

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

    Примечание

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

    {
            "body_events": {
                    "camera_groups": [1, 3],
                    "matched_card": [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': True:

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': True,
    ...
}
...

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

cd /opt/findface-multi/

sudo docker-compose restart