findface-security

Компонент findface-security обеспечивает доступ конечного пользователя к функциям ядра FindFace. Отвечает за взаимодействие между ядром FindFace Core и веб-интерфейсом, а также функционирование системы как единого целого, реализует HTTP- и веб-сокеты (вместе с Django), обновление базы данных и вебхуки.

Компонент findface-security также выполняет функции компонента findface-facerouter (часть ядра FindFace), задавая правила обработки обнаруженных лиц. Он получает рамку с лицом и нормализованное изображение лица вместе с исходным кадром и другими данными (например, датой и временем детекции) от сервиса findface-video-worker и перенаправляет их для дальнейшей обработки в сервис findface-sf-api.

Настройка компонента findface-security выполняется через файл конфигурации /etc/ffsecurity/config.py.

sudo vi /etc/ffsecurity/config.py


# ==============================================================================
# FindFace Security configuration file
# ==============================================================================
#
# This config file is written in Python's syntax and interpreted at FindFace Security
# service startup. You have to restart the service in order to apply changes.
#
# If you have any questions or suggestions, please contact us at [email protected]
# ==============================================================================
# GENERAL SETTINGS
# ==============================================================================
# enables additional logs
DEBUG = False
# media files directory
MEDIA_ROOT = "/var/lib/ffsecurity/uploads"
# static files directory
STATIC_ROOT = "/var/lib/ffsecurity/static"
# language code
LANGUAGE_CODE = 'en-us'
# time zone
TIME_ZONE = 'UTC'
# Database is used by FindFace Security to store cameras,
# camera groups, watchlists and so on. Only PostgreSQL is supported.
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'DISABLE_SERVER_SIDE_CURSORS': True,
        'NAME': 'ffsecurity',
        'PORT': 5439, 'USER': 'ntech', 'PASSWORD': 'lY4KrQbotHVFdZ0Ed5z8EBvDUzSsmw2o'
    }
}
# Signature key for session encryption
# Use pwgen -sncy 50 1|tr "'" "." to generate your own unique key
SECRET_KEY = 'd1c22e3b368f2f8be4caa95b3540ce0c'
# ==============================================================================
# FINDFACE SECURITY SETTINGS
# ==============================================================================
# SERVICE_EXTERNAL_ADDRESS is prioritized for FFSecurity webhooks and Genetec plugin.
# EXTERNAL_ADDRESS is used instead if SERVICE_EXTERNAL_ADDRESS is not provided.
# You must provide either SERVICE_EXTERNAL_ADDRESS or EXTERNAL_ADDRESS in order
# to be able to work with FFSecurity webhooks and Genetec plugin.
SERVICE_EXTERNAL_ADDRESS = 'http://127.0.0.1'
# EXTERNAL_ADDRESS is used to access objects created inside FFSecurity via external links.
EXTERNAL_ADDRESS = ''
# - Base FFSecurity settings -
FFSECURITY = {
    # findface-video-worker authorization token
    'VIDEO_DETECTOR_TOKEN': 'fdc0fea20cf0a734c5e2de1886fc07b4',
    # base face matching confidence threshold
    'CONFIDENCE_THRESHOLD': 0.739,
    # episodes specific matching threshold that is used to join faces in an episode
    'EPISODES_THRESHOLD': 0.689,
    # minimum face quality sufficient to add it to a dossier
    'MINIMUM_DOSSIER_QUALITY': -2,
    # skip all unmatched faces
    'IGNORE_UNMATCHED': False,
    # matched events older than EVENTS_MAX_MATCHED_AGE will be automatically
    # deleted (every night at 1:17 am by default)
    'EVENTS_MAX_MATCHED_AGE': 30,
    # same as above but for unmatched events
    'EVENTS_MAX_UNMATCHED_AGE': 30,
    # same as EVENTS_MAX_MATCHED_AGE but for matched full frame images only (thumbnails won't be deleted)
    'EVENTS_MAX_FULLFRAME_UNMATCHED_AGE': 30,
    # same as above but for unmatched full frame images only (thumbnails won't be deleted)
    'EVENTS_MAX_FULLFRAME_MATCHED_AGE': 30,
    # NTLS licence server url
    'NTLS_HTTP_URL': 'http://127.0.0.1:3185',
    # findface-video-worker face posting address,
    # it must be set to either FFSecurity EXTERNAL_ADDRESS (by default)
    # or findface-facerouter url (in some specific cases)
    'ROUTER_URL': 'http://127.0.0.1',
    # send serialized dossiers, dossier-lists, camera and camera groups in webhooks
    'VERBOSE_WEBHOOKS': False,
    'THUMBNAIL_JPEG_QUALITY': 75,
    # FFServer services urls
    'VIDEO_MANAGER_ADDRESS': 'http://127.0.0.1:18810',
    'SF_API_ADDRESS': 'http://127.0.0.1:18411',
    'FFCOUNTER_ADDRESS': 'http://127.0.0.1:17300',
    # additional events features.
    # make sure that corresponding extractors
    # are licensed and enabled at findface-extraction-api config file.
    # available features are: gender, age, emotions, beard, glasses, medmask.
    'EVENTS_FEATURES': [],
    # feature specific confidence thresholds
    'LIVENESS_THRESHOLD': 0.75,
    'EMOTIONS_THRESHOLD': 0.25,
    'BEARD_THRESHOLD': 0.7,
    # -- Persons configuration --
    # rrule (recurrence rule) for scheduling persons clusterization
    'PERSONS_CLUSTERIZATION_SCHEDULE': 'RRULE:FREQ=DAILY;INTERVAL=1;WKST=MO;BYHOUR=0;BYMINUTE=0',
    # face to person matching confidence threshold
    'PERSONS_CONFIDENCE_THRESHOLD': 0.739,
    # minimum face quality for handle face in person service
    'PERSON_EVENT_MIN_QUALITY': -2,
    # counters full frame saving options:
    # `always` - save always
    # `detect` - save only if faces or silhouettes have been detected
    # `never` - never save full frames
    'COUNTERS_SAVE_FULLFRAME': 'always',
    'COUNTERS_FULLFRAME_JPEG_QUALITY': 75,
    'COUNTERS_THUMBNAIL_JPEG_QUALITY': 75,
    # -- Optional parameters --
    # Edit CUSTOM_FIELDS section to customize dossier content.
    # Below is an example for integration FindFace Security with Sigur.
    # 'CUSTOM_FIELDS': {
    #     'dossier_meta': {
    #         'items': [
    #             {
    #                 'name': 'personid',
    #                 'default': '',
    #                 'label': 'PersonID',
    #                 'display': ['list', 'form'],
    #                 'description': 'Sigur person ID'
    #             },
    #             {
    #                 'name': 'firstname',
    #                 'default': '',
    #                 'label': 'First Name',
    #                 'display': ['list', 'form'],
    #                 'description': 'Sigur first name'
    #             },
    #             {
    #                 'name': 'lastname',
    #                 'default': '',
    #                 'label': 'Last Name',
    #                 'display': ['list', 'form'],
    #                 'description': 'Sigur last name'
    #             },
    #             {
    #                 'name': 'version',
    #                 'default': '',
    #                 'label': 'Version',
    #                 'display': ['list', 'form'],
    #                 'description': 'Sigur photo version'
    #             }
    #         ],
    #         'filters': [
    #             {
    #                 'name': 'personid',
    #                 'label': 'Sigur person ID filter',
    #                 'field': 'personid'
    #             }
    #         ]
    #     }
    # },
    # maximum event age in seconds than could be added to an episode.
    # 'EPISODE_SEARCH_INTERVAL': 60,
    # If none of these events matched, new episode is created.
    # maximum episode duration (episode is closed after)
    # 'EPISODE_MAX_DURATION': 300,
    # if no new event added to an episode during this timeout, episode will be closed.
    # 'EPISODE_EVENT_TIMEOUT': 30,
    # maximum created thumbnail width
    # 'THUMBNAIL_MAX_WIDTH': 320,
    # social backend url. Contact support for additional information.
    # 'SOCIAL_BACKEND': None,
    # 'SOCIAL_HEADERS': {},
    # unacknowledged events notification interval
    # 'UNACKNOWLEDGED_NOTIFY_INTERVAL': 1,
}
# - FindFace Security user interface configuration dictionary -
FFSECURITY_UI_CONFIG = {
    "event": {
        "features": {
            "f_gender_class": ["male", "female"],
            "age": {
                "f_age_gte": "",
                "f_age_lte": ""
            },
            "f_emotions_class": ["angry", "disgust", "fear", "happy", "sad", "surprise", "neutral"],
            "f_glasses_class": ["none", "eye", "sun"],
            "f_beard_class": ["none", "beard"],
            "f_liveness_class": ["real", "fake"],
            "f_medmask_class": ["none", "correct"],
        }
    }
}
# -- ASGI-server configuration --
# consult support before changing these settings.
# per worker thread pool size.
ASGI_THREADS = 32
UVICORN_SETTINGS = {
    # worker processes count, 'auto' sets it to logical cpu count
    'workers': 'auto',
    'host': 'localhost',
    'port': 8002,
    # websocket worker processes count,
    # 'auto' sets it to logical cpu count, but not more than 8.
    'ws-workers': 'auto',
    'ws-host': 'localhost',
    'ws-port': 8003,
}
# disable unused services to increase
# overall system performance in some cases.
SERVICES = {
    "ffsecurity": {
        "episodes": True,
        "webhooks": True,
        "persons": False,
        "counters": True,
    }
}
# ==============================================================================
# FINDFACE SECURITY PLUGINS
# ==============================================================================
# Uncomment lines below to enable plugins. Please consult documentation for
# a plugin specific settings.
# =============== Axxon ================
# INSTALLED_APPS.append('ffsecurity_axxon')
# FFSECURITY['AXXON'] = [
#     {
#         'name': 'server_name',
#         'api': 'http://example.com/',
#         'rtsp': 'rtsp://example.com:554/',
#         'user': 'user',
#         'password': 'password',
#     }
# ]
# FFSECURITY_UI_CONFIG['dossier'] = {
#    'video': True,
# }
# =============== Genetec ================
# INSTALLED_APPS.append('ffsecurity_genetec')
# ================ Sova ==================
# INSTALLED_APPS.append('ffsecurity_sova')
# ======= CryptoPRO authentication =======
# INSTALLED_APPS.append('ffsecurity_cproauth')
# REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES'] = [
#     'ffsecurity.auth.TokenAuthentication',
#     'ffsecurity_cproauth.auth.CryptoProOrTokenAuthentication'
# ]
# ========== DossierLists sync ===========
# INSTALLED_APPS.append('ffsecurity_sync')
# token must be identical on master and slave
# use pwgen -s 64 1
# SYNC_TOKEN = 'change_me'
# SYNC_TIME = {
#     # 24 hour format
#     'hour': 3,
#     'minute': 0,
# }

Пользовательская настройка findface-security выполняется с использованием следующих параметров:

Параметр Описание
EXTERNAL_ADDRESS Внешний IP-адрес или URL, который будет использован для доступа к веб-интерфейсу FindFace Security.
SERVICE_EXTERNAL_ADDRESS (Опционально) IP-адрес, приоритетно используемый в вебхуках и интеграции с Genetec.
VIDEO_DETECTOR_TOKEN Придумайте токен и укажите его в данном параметре, чтобы авторизовать модуль видеодетекции лиц.
VIDEO_MANAGER_ADDRESS IP-адрес сервера findface-video-manager.
EVENTS_MAX_MATCHED_AGE Возраст события с совпадением, при достижении которого должно происходить его автоматическое удаление из базы данных.
EVENTS_MAX_UNMATCHED_AGE Возраст события без совпадения, при достижении которого должно происходить его автоматическое удаление из базы данных.
EVENTS_MAX_FULLFRAME_MATCHED_AGE То же, что EVENTS_MAX_MATCHED_AGE, только для полных кадров.
EVENTS_MAX_FULLFRAME_UNMATCHED_AGE То же, что EVENTS_MAX_UNMATCHED_AGE, только для полных кадров.
NTLS_HTTP_URL IP-адрес сервера findface-ntls.
ROUTER_URL IP-адрес сервера findface-security, который будет получать обнаруженные на видео лица от экземпляров findface-video-worker. Адрес указывается внутренний или внешний, в зависимости от сети, в которой findface-video-worker взаимодействует с findface-security.
EXTRACTION_API IP-адрес сервера findface-extraction-api.
SF_API_ADDRESS IP-адрес сервера findface-sf-api.
IGNORE_UNMATCHED Отключает запись события в базу данных, если обнаруженное лицо отсутствует в списках наблюдения (верификация дала отрицательный результат). Данную настройку рекомендуется использовать при большом количестве посетителей. Пороговая степень схожести при верификации лиц определяется параметром CONFIDENCE_THRESHOLD.
CONFIDENCE_THRESHOLD Пороговая степень схожести для верификации лиц в событиях.
EPISODES_THRESHOLD Пороговая степень схожести для верификации лиц в эпизодах.
MINIMUM_DOSSIER_QUALITY Минимальное качество лица на фотографии в досье. Если качество лица хуже минимального, пользователь не сможет загрузить такую фотографию в досье. Прямые изображения лиц анфас считаются наиболее качественными. Им соответствуют значения вблизи 0, как правило, отрицательные (такие как -0.00067401276, например). Перевернутые лица и лица, повернутые под большими углами, характеризуются отрицательным значениям от -5 и меньше. По умолчанию ’MINIMUM_DOSSIER_QUALITY’: -2, что соответствует среднему качеству.
EVENTS_FEATURES Перечислите здесь модели для распознавания атрибутов лица, которые вы прописали в файле конфигурации findface-extraction-api.
LIVENESS_THRESHOLD Детектор живых лиц оценивает живость лица с определенной достоверностью. В зависимости от порогового значения достоверности, он возвращает бинарный результат Живой человек или Изображение.
EMOTIONS_THRESHOLD Присутствие эмоций оценивается с определенной достоверностью. В зависимости от порогового значения достоверности, система различает эмоциональные лица от нейтральных.
BEARD_THRESHOLD Присутствие на лице бороды оценивается с определенной достоверностью. В зависимости от порогового значения достоверности, система возвращает бинарный результат нет или борода.
EPISODE_SEARCH_INTERVAL (Добавьте вручную для эпизодов) Период времени, предшествующий событию, в течение которого система ищет в биометрической базе данных события с похожими лицами. Если такого события не найдено, система создает новый эпизод. В противном случае она выбирает наиболее подходящее событие из открытого (LIVE) эпизода, отсортировав 100 последних похожих лиц. См. Настройка эпизодов.
EPISODE_MAX_DURATION (Добавьте вручную для эпизодов) Максимальная продолжительность эпизода в секундах. По истечении этого времени эпизод автоматически закрывается.
EPISODE_EVENT_TIMEOUT (Добавьте вручную для эпизодов) Максимальное время в секундах с момента добавления последнего события в эпизод. По истечении этого времени эпизод автоматически закрывается.
CUSTOM_FIELDS Добавьте этот раздел вручную, чтобы настроить содержание досье. Подробнее см. Пользовательские вкладки, поля и фильтры в досье.
VERBOSE_WEBHOOKS Отправлять в вебхуках сериализованные досье, списки наблюдения, камеры и группы камер.
THUMBNAIL_JPEG_QUALITY Качество JPEG миниатюр.
THUMBNAIL_MAX_WIDTH Максимальная ширина миниатюры.
DATABASES (раздел) Настройки базы данных. Заполните следующим образом: 'PORT': 5439, 'USER': 'ntech', 'PASSWORD': ‘<пароль из /etc/pgbouncer/userlist.txt>’

Предупреждение

Секция FFSECURITY должна заканчиваться параметрами EVENTS_FEATURES/ LIVENESS_THRESHOLD/ EMOTIONS_THRESHOLD/BEARD_THRESHOLD, которые должны быть расположены друг за другом в указанном порядке.

...
'SF_API_ADDRESS': 'http://127.0.0.1:18411',
'EVENTS_FEATURES': ['gender', 'age', 'emotions', 'beard', 'glasses', 'medmask'],
'LIVENESS_THRESHOLD': 0.945,
'EMOTIONS_THRESHOLD': 0.25
'BEARD_THRESHOLD': 0.7,