Liveness как автономный сервис

Вы можете использовать распознавание живых лиц отдельно, в виде автономного сервиса findface-liveness-api. Сервис берет определенное количество кадров из видеофрагмента и возвращает изображение лица наилучшего качества и десятичный результат liveness, усредненный по взятым кадрам. Если заданы соответствующие настройки, сервис также может возвращать полнокадровые и нормализованные изображения лиц и сохранять результат детекции в кэше findface-sf-api, возвращая detection_id.

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

Установка и настройка findface-liveness-api

Для установки сервиса findface-liveness-api выполните следующие действия:

  1. Установите APT-репозиторий FindFace Security.

  2. Из APT-репозитория установите сервис следующим образом:

    sudo apt update
    sudo apt install findface-liveness-api
    
  3. При необходимости настройте параметры findface-liveness-api:

    sudo vi /etc/findface-liveness-api.ini
    
    listen: :18301
    liveness-threshold: 0.75
    fullframe-jpeg-quality: 75
    max-decoded-frames: 30
    min-selected-frames: 10
    
    extraction-api:
      request-batch-size: 16
      timeouts:
        connect: 5s
        response_header: 30s
        overall: 35s
        idle_connection: 10s
      extraction-api: http://127.0.0.1:18666
    
    sf-api:
      timeouts:
        connect: 5s
        response_header: 30s
        overall: 35s
        idle_connection: 10s
      sf-api: http://127.0.0.1:18411
    
    limits:
      video-size: 10485760
      video-length-sec: 60
      video-fps: 30
      video-width-px: 1920
      video-height-px: 1080
    
    Параметр Описание
    fullframe-jpeg-quality Качество JPEG полных кадров в поле photo.
    max-decoded-frames Завершить декодирование после получения указанного количества кадров.
    min-selected-frames Минимальное количество финальных кадров, успешно прошедших декодирование и извлечение liveness. Должно быть равным или меньшим max-decoded-frames.
    extraction-api -> request-batch-size Размер пакета с кадрами для извлечения liveness.
    limits -> video-size Максимальный размер видео, байты.
    limits -> video-length-sec Максимальная длина видео, секунды.
    limits -> video-fps Максимальное количество FPS видео.
    limits -> video-width-px Максимальная ширина видео, пиксели.
    limits -> video-height-px Максимальная высота видео, пиксели.
  4. В файле конфигурации findface-extraction-api укажите модель нейронной сети, предоставляющей автономный сервис liveness: liveness.alleyn.cpu.fnk/liveness.alleyn.gpu.fnk.

    sudo vi /etc/findface-extraction-api.ini
    
    extractors:
      ...
      models:
       ...
       liveness: faceattr/liveness.alleyn.cpu.fnk
       ...
      ...
    
    extractors:
      ...
      models:
       ...
       liveness: faceattr/liveness.alleyn.gpu.fnk
       ...
      ...
    
  5. Запустите сервис findface-liveness-api и добавьте его в автозагрузку.

    sudo systemctl enable findface-liveness-api.service && sudo systemctl start findface-liveness-api.service
    

Использование Liveness API

Для взаимодействия с сервисом findface-liveness-api используйте запросы HTTP API. В примере ниже запрос POST отправляется со следующими опциональными параметрами:

  • return_detection (default=False): сохранить лучшее лицо в кэше findface-sf-api и вернуть его detection_id.
  • return_normalized (default=False): вернуть нормализованное изображение лица в поле normalized.
  • return_photo (default=False): вернуть полный кадр в поле photo.

Пример

Запрос

curl -i -X POST \
  'http://127.0.0.1:18301/v1/video-liveness?return_detection=true&return_normalized=true&return_photo=true' \
  -H 'Content-Type: video/mp4' \
  --data-binary '@/home/my_video.mp4'

Ответ

HTTP/1.1 100 Continue
HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: LA:WSP2NcHc
Date: Mon, 07 Sep 2020 15:30:05 GMT
Transfer-Encoding: chunked
{
        "alive": true,
        "average_liveness": 0.8706386,
        "best_face": {
                "liveness": 0.74768883,
                "quality": 0.89638597,
                "bbox": {
                        "left": 0,
                        "top": 578,
                        "right": 307,
                        "bottom": 1154
                },
                "detection_id": "btb53vbp688s1njt3bv0",
                "photo": "/9j/2wCEAAgGBgcGBQgHBwcJ...",
                "normalized": "iVBORw0KGgoAAAANSUhEU...",
                "frame_no": 1,
                "frame_ts": 0.033275817
        }
}