Методы для анализа и распознавания биометрических данных
В этом разделе:
Обнаружение лица на изображении
/detect POST
Данный метод обнаруживает лицо на предоставленном изображении и возвращает координаты прямоугольной рамки вокруг лица (т. н. bbox) и ориентацию лица.
Примечание
Обнаружение лица выполняется компонентом findface-extraction-api. Таким образом, компонент findface-sf-api форматирует ваш исходный запрос и перенаправляет его в компонент findface-extraction-api для непосредственной обработки.
Важно
Обязательно передайте в query string метода активированный параметр facen=on, чтобы возвращенный результат был сохранен в memcached. Для извлечения результата распознавания из memcached используйте метод /detect GET.
Совет
Для того чтобы активировать параметр типа Boolean (gender, age и т. д.), подойдет любая из строк 1, yes, true или on, регистр не имеет значения.
Важно
Чтобы включить распознавание атрибутов лица, можно использовать как новые (предпочтительно), так и старые параметры API (подробное описание вы найдете в параметрах query string). Старый API позволяет распознавать пол, возраст, эмоции, в то время как новый API обеспечивает распознавание пола, возраста, эмоций, бороды и очков. Каждый атрибут лица (пол, возраст, эмоции, борода или очки) может быть упомянут только один раз в запросе, в новом или старом формате API.
Параметры query string:
- "detector": детектор лиц, который будет применен к изображению. Может принимать значение- nnd(обычный детектор) или- normalized(детектор принимает нормализованное изображение лица, при этом стадия обнаружения лица пропускается).
- "gender": логический тип, включает распознавание пола (старый API).
- "age": логический тип, включает распознавание возраста (старый API).
- "emotions": логический тип, включает распознавание эмоций (старый API).
- "facen": логический тип, в запросе к- findface-extraction-apiбудут включены параметры- need_facen(извлечь вектор признаков) и- need_normalized(получить нормализованное изображение лица). При этом полный ответ- findface-extraction-apiбудет сохранен в- memcachedс временным UUID, который будет записан в поле- idответа.
- "autorotate": логический тип, автоматически поворачивает исходное изображение в 4-х различных направлениях и возвращает лица, обнаруженные в каждом из них.
- "return_facen": логический тип, возвращает в ответе вектор признаков лица. Для этого в файле конфигурации- findface-sf-apiтакже должна быть включена опция- allow-return-facen.
- "attribute": массив строк в формате- ["gender", "age", "emotions", "beard", "glasses3"], включает распознавание атрибутов лица, переданных в массиве (новый API).
Параметры в теле запроса:
Изображение в виде файла с mime-типом image/jpeg, image/png, image/webp или ссылка на интернет-изображение с mime-типом text/x-url.
Возвращает:
- список координат рамок вокруг обнаруженных лиц; 
- временный UUID результата детекции ( - id, если был передан активный параметр- facen);- Важно - При написании кода необходимо предусмотреть проверку данного id на актуальность при обращении к нему впоследствии, поскольку со временем он становится неактуальным. В последнем случае повторите детекцию лица. 
- вектор признаков (если активирован - return_facen);
- пол (если активирован - gender):- maleили- female, со значением уверенности алгоритма в результате (- "score");
- возраст (если активирован - age): количество лет;
- эмоции (если активирован``emotions``): 6 базовых эмоций + нейтральная эмоция ( - angry,- disgust,- fear,- happy,- sad,- surprise,- neutral) со значением уверенности алгоритма в выражении каждой эмоции;
- атрибуты (если переданы): пол ( - maleили- female), возраст (количество лет), эмоции (преобладающая эмоция), борода (- beardили- none), очки (- sun,- eyeили- none), вместе со значением уверенности алгоритма в результате;
- ориентация. 
Примеры
Запрос №1. Одновременное использование старого и нового API
curl -i -X POST 'http://127.0.0.1:18411/v2/detect?facen=on&age=on&gender=on&emotions=on&attribute=glasses3' -H 'Content-Type: image/jpeg' --data-binary @sample.jpg
HTTP/1.1 100 Continue
Ответ
HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: SF:BpLnfgDs
Date: Thu, 23 May 2019 12:00:22 GMT
Content-Length: 713
{
    "faces": [
        {
            "id": "bjj8mlhjisgjrk6hj1v0",
            "bbox": { "left": 595, "top": 127, "right": 812, "bottom": 344 },
            "features": {
                "gender": { "gender": "FEMALE", "score": 0.9998938 },
                "age": 25,
                "score": -0.000696103,
                "emotions": [
                    { "emotion": "neutral", "score": 0.99958 },
                    { "emotion": "sad", "score": 0.0004020365 },
                    { "emotion": "happy", "score": 8.603454e-06 },
                    { "emotion": "surprise", "score": 8.076766e-06 },
                    { "emotion": "disgust", "score": 6.6535216e-07 },
                    { "emotion": "angry", "score": 6.1434775e-07 },
                    { "emotion": "fear", "score": 7.3372125e-10 }
                ],
                "attributes": {
                    "glasses3": {
                        "attribute": "glasses3",
                        "model": "glasses3.v0",
                        "result": [
                            { "confidence": 0.99958307, "name": "none" },
                            { "confidence": 0.00033243417, "name": "eye" },
                            { "confidence": 8.4465064e-05, "name": "sun" }
                        ]
                    }
                }
            }
        }
    ],
    "orientation": 1
}
Запрос №2. Использование нового API
curl -s -X POST 'http://master:18411/v2/detect?attribute=gender' -H 'Content-Type: image/jpeg' --data-binary @pasha.jpg | jq
{
  "faces": [
    {
      "bbox": {
        "left": 1019,
        "top": 1138,
        "right": 1666,
        "bottom": 2041
      },
      "features": {
        "score": -0.00035252835,
        "attributes": {
          "gender": {
            "extractor": "gender",
            "model": "gender.v2",
            "result": [
              {
                "confidence": 0.9999999,
                "name": "male"
              },
              {
                "confidence": 7.935678e-08,
                "name": "female"
              }
            ]
          },
          "quality": {
            "extractor": "quality",
            "model": "quality.v0",
            "result": 0.00035252835
          }
        }
      }
    }
  ],
  "orientation": 1
}
Извлечение результата детекции из memcached
/detect/:id GET
Данный метод служит для получения параметров обнаруженного лица, включая его вектор признаков, по временному UUID’s в memcached.
Параметры в сегментах пути:
- :id: временный UUID обнаруженного лица в- memcached.
Возвращает:
Представление JSON результата детекции.
Пример
Запрос
curl -i -X GET 'http://127.0.0.1:18411/v2/detect/bg2gu31jisghl6pee09g'
Ответ:
{
    "bbox": { "bottom": 343, "left": 593, "right": 824, "top": 112 },
    "features": {
        "age": 26.096783,
        "emotions": [
            { "emotion": "neutral", "score": 0.9094986 },
            { "emotion": "happy", "score": 0.11464329 },
            { "emotion": "sad", "score": 0.005675929 },
            { "emotion": "surprise", "score": -0.02556022 },
            { "emotion": "fear", "score": -0.14499822 },
            { "emotion": "angry", "score": -0.19491306 },
            { "emotion": "disgust", "score": -0.31617728 }
        ],
        "gender": { "gender": "FEMALE", "score": -2.7309942 },
        "score": -0.000696103
    },
    "id": "bg2gu31jisghl6pee09g"
}
Создание результата детекции из ответа findface-extraction-api
/detect/:id POST
Данный метод создает результат детекции из ответа findface-extraction-api.
Параметры в сегментах пути:
- :id: задайте UUID, под которым в memcached будет храниться результат детекции.
Возвращает:
Пустой JSON в случае успеха.
Пример
Запрос
$ curl -i -X POST 'http://127.0.0.1:18411/v2/detect/bg2gu31jisghl6peea9g' -H 'Content-Type: application/json' --data-binary '@extapi-face.json'
Ответ:
HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: jFSBuSPm
Date: Wed, 05 Dec 2018 08:08:56 GMT
Content-Length: 2
{}
Получение списка галерей
/galleries GET
Данный метод возвращает список всех существующих галерей в биометрической базе данных.
Параметры:
Отсутствуют.
Возвращает:
Словарь JSON со списком имен (name) галерей.
Пример
Запрос
GET /v2/galleries HTTP/1.1
Host: 172.17.47.19:18411
Ответ
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 02 Feb 2018 10:11:43 GMT
Content-Length: 35
{"galleries":[{"name":"sandbox"}]}
Создание галереи в базе данных
/galleries/:gallery POST
Данный метод создает новую галерею с заданным именем.
Параметры в сегментах пути:
:gallery: имя новой галереи. Может содержать латинские буквы, числа, знак подчеркивания и минус ([a-zA-Z0-9_-]+) и не может быть длиннее 48 символов.
Возвращает:
- Пустой JSON в случае успеха. 
- JSON с описанием ошибки при сбое. 
Пример
Запрос
POST /v2/galleries/newone HTTP/1.1
Host: 172.17.47.19:18411
Ответ
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 02 Feb 2018 10:18:01 GMT
Content-Length: 2
{}
Получение информации о галерее
/galleries/:gallery GET
Данный метод проверяет, существует ли галерея, и возвращает количество лиц в ней.
Параметры в сегментах пути:
:gallery: имя галереи.
Возвращает:
- Словарь JSON c количеством лиц и именем галереи в случае успеха. 
- JSON с описанием ошибки при сбое. 
Пример
Запрос
curl -i -X GET 'http://127.0.0.1:18411/v2/galleries/hello'
Ответ
HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: Ard3exjn
Date: Wed, 05 Dec 2018 08:17:54 GMT
Content-Length: 29
{ "faces": 123, "name": "hello" }
Удаление галереи
/galleries/:gallery DELETE
Данный метод удаляет заданную галерею и все лица в ней.
Параметры в сегментах пути:
:gallery: имя галереи, подлежащей удалению.
Возвращает:
- Пустой JSON в случае успеха. 
- JSON с описанием ошибки при сбое. 
Пример
Запрос
DELETE /v2/galleries/newone HTTP/1.1
Host: 172.17.47.19:18411
Ответ
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 02 Feb 2018 10:18:01 GMT
Content-Length: 2
{}
Добавление лица в галерею
/galleries/:gallery/faces/:id POST
Данный метод берет обнаруженное лицо из memcached или лицо из галереи, чтобы затем добавить его вместе с вектором признаков в указанную в параметрах query string галерею базы биометрических данных с присвоением указанного пользовательского id. Вместе с лицом вы также можете добавить метаданные, которые являются уникальными для его обладателя, например, идентификатор или имя.
Параметры в сегментах пути:
- :gallery: имя галереи, в которую добавляется лицо.
- :id: постоянный идентификатор лица в галерее, uint64.
Параметры в теле запроса:
- "from": временный UUID обнаруженного лица в- memcached(- "from": "detection:<id>") или id лица в галерее (- "from: "face:<gallery>/<id>").
- "meta"[опционально]: метаданные, такие как имя обладателя лица, сведения об исходном изображении, дата и время детекции и т. д., словарь.
Возвращает:
- Представление JSON добавленного лица в случае успеха. 
- Ошибка в случае неудачной попытки. 
Пример
Запрос
curl -i -X POST http://127.0.0.1:18411/v2/galleries/hello/faces/123/ -H 'Content-Type: application/json' --data-binary '@-' <<EOF
{
    "from": "detection:bg2gu31jisghl6pee09g",
    "meta": {
        "camera": "openspace",
        "labels": ["foo", "bar"],
        "timestamp": "1543837276"
    }
}
EOF
Ответ
HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: SF:OSSKbJg3
Date: Wed, 05 Dec 2018 08:27:59 GMT
Content-Length: 555
{
    "features": {
        "age": 26.096783,
        "emotions": [
            { "emotion": "neutral", "score": 0.9094986 },
            { "emotion": "happy", "score": 0.11464329 },
            { "emotion": "sad", "score": 0.005675929 },
            { "emotion": "surprise", "score": -0.02556022 },
            { "emotion": "fear", "score": -0.14499822 },
            { "emotion": "angry", "score": -0.19491306 },
            { "emotion": "disgust", "score": -0.31617728 }
        ],
        "gender": { "gender": "FEMALE", "score": -2.7309942 },
        "score": -0.000696103
    },
    "id": { "face": 123, "gallery": "hello" },
    "meta": {
        "camera": "openspace",
        "labels": ["foo", "bar"],
        "timestamp": "1543837276"
    },
    "normalized_id": "123_bg2hcupjisghl6pee0ag.png"
}
Получение информации о лице из галереи
/galleries/:gallery/faces/:id GET
Возвращает лицо из базы данных по id.
Параметры в сегментах пути:
- :gallery: имя галереи, в которой хранится лицо.
- :id: идентификатор лица в галерее, uint64.
Возвращает:
- Представление лица в JSON в случае успеха. 
- Ошибка в случае неудачной попытки. 
Пример
Запрос
curl -s 'http://172.17.47.19:18411/v2/galleries/galleryname/faces/2' | jq
Ответ
{
  "id": {
    "gallery": "galleryname",
    "face": 2
  },
  "features": {
    "gender": {
      "gender": "FEMALE",
      "score": -2.6415923
    },
    "age": 26.04833,
    "score": 0.9999999,
    "emotions": [
      {
        "emotion": "neutral",
        "score": 0.99958
      },
      {
        "emotion": "sad",
        "score": 0.0004020398
      },
      {
        "emotion": "happy",
        "score": 8.603504e-06
      },
      {
        "emotion": "surprise",
        "score": 8.076798e-06
      },
      {
        "emotion": "disgust",
        "score": 6.653509e-07
      },
      {
        "emotion": "angry",
        "score": 6.14346e-07
      },
      {
        "emotion": "fear",
        "score": 7.33713e-10
      }
    ]
  },
  "meta": {
    "timestamp": 2
  },
  "normalized_id": "2_bd323f5t8f66ph0eafp0.png"
}
Удаление лица из галереи
/galleries/:gallery/faces/:id DELETE
Удаляет лицо из базы данных по id.
Параметры в сегментах пути:
- :gallery: имя галереи, из которой удаляется лицо.
- :id: идентификатор лица в галерее, uint64.
Возвращает:
- Пустой JSON в случае успеха. 
- Ошибка в случае неудачной попытки. 
Пример
Запрос
curl -s -X DELETE 'http://172.17.47.19:18411/v2/galleries/galleryname/faces/1' | jq
Ответ
{}
Обновление метаданных лица в галерее
/galleries/:gallery/faces/:id PATCH
Заменяет параметры лица в базе данных по id.
Параметры в сегментах пути:
- :gallery: имя галереи.
- :id: идентификатор лица в галерее, uint64.
Параметры в теле запроса
- "meta": новые метаданные лица, словарь.
Возвращает:
- Представление данных измененного лица в JSON в случае успеха. 
- Ошибка в случае неудачной попытки. 
Пример
Запрос
curl -s -X PATCH -H 'Content-Type: application/json' --data '{"meta":{"timestamp":2}}' 'http://172.17.47.19:18411/v2/galleries/galleryname/faces/2' | jq
Ответ
{
  "id": {
    "gallery": "galleryname",
    "face": 2
  },
  "features": {
    "gender": {
      "gender": "FEMALE",
      "score": -2.6415923
    },
    "age": 26.04833,
    "score": 0.9999999,
    "emotions": [
      {
        "emotion": "neutral",
        "score": 0.99958
      },
      {
        "emotion": "sad",
        "score": 0.0004020398
      },
      {
        "emotion": "happy",
        "score": 8.603504e-06
      },
      {
        "emotion": "surprise",
        "score": 8.076798e-06
      },
      {
        "emotion": "disgust",
        "score": 6.653509e-07
      },
      {
        "emotion": "angry",
        "score": 6.14346e-07
      },
      {
        "emotion": "fear",
        "score": 7.33713e-10
      }
    ]
  },
  "meta": {
    "timestamp": 2
  },
  "normalized_id": "2_bd323f5t8f66ph0eafp0.png"
}
Сравнение лиц
/verify POST
Данный метод сравнивает два лица, проверяя, принадлежит ли изображенное на них лицо одному и тому же человеку, и возвращает степень уверенности алгоритма в совпадении лиц (степень схожести).
Параметры query string:
- "face1": первое лицо, результат работы- /detect POST(хранится в- memcached) или сохраненное в базе данных.
- "face2": второе лицо, результат работы /detect POST (хранится в memcached) или сохраненное в базе данных.
Возвращает:
Степень уверенности алгоритма в совпадении лиц.
Пример
Запрос №1. Сравнение 2-х результатов детекции
curl -s 'http://172.17.47.19:18411/v2/verify?face1=detection:bd3hv4tt8f66ph0eag1g&face2=detection:bd3hv8dt8f66ph0eag2g' | jq
Ответ
{
  "confidence": 0.92764723
}
Запрос №2. Сравнение результата детекции с лицом из галереи
curl -s 'http://172.17.47.19:18411/v2/verify?face1=detection:bd3hv4tt8f66ph0eag1g&face2=face:galleryname/2' | jq
Ответ
{
  "confidence": 0.999996
}
Извлечение данных из галереи с использованием фильтров. Поиск лиц
/v2/galleries/:gallery/faces GET
Данный метод выполняет поиск по галерее с использованием фильтров, заданных в query string.
Параметры в сегментах пути:
:gallery: имя галереи, по которой выполняется поиск.
Параметры query string:
- ?limit=: (обязательный) максимальное количество лиц в ответе.
- ?sort=: порядок сортировки. Передайте одно из следующих значений:- id: в порядке возрастания id,- -id: в порядке убывания id,- -confidence: в порядке убывания схожести лиц (только в случае поиска по вектору признаков).
- ?page=<page>: показать следующую страницу с результатами поиска. Значение- <page>возвращается в ответе вместе с предыдущей страницей как- next_page.
- ?ignore_errors: игнорировать ошибку обращения к базе данных, если поиск по галерее выполняется, когда некоторые сервера базы данных недоступны. В этом случае поиск будет выполнен с использованием доступных серверов.
- ?meta:in:meta1=val1&meta:in:meta1=val2&...: выбрать лицо, если строка- meta1в метаданных имеет одно из значений- val1/- val2/ … и т. д. (uint64, string).
- ?meta:gte:meta1=val1: выбрать все лица, у которых строка- meta1в метаданных больше или равна значению- val1(uint64).
- ?meta:lte:meta1=val1: выбрать все лица, у которых строка- meta1в метаданных меньше или равна значению- val1(uint64).
- ?id:in=value_id: выбрать все лица с- id, равным- value_id.
- ?id:gte=value_id: выбрать все лица с- id, большим или равным- value_id.
- ?id:lte=value_id: выбрать все лица с- id, меньшим или равным- value_id.
- ?meta:subset:meta1=val1&meta:subset:meta1=val2&...: выбрать лицо, если строка- meta1в метаданных включает в себя все значения- val1,- val2, … и т. д. ([]string).
- ?<id>=<confidence>: задает вектор признаков для поиска по базе данных через параметр- <id>, а также устанавливает пороговую схожесть лиц в результатах поиска- <confidence>. Параметр- <id>может быть представлен как id лица в базе данных (- face:<gallery>/<db_id>), так и id лица, являющегося результатом детекции (метод- /detect POST) и хранящегося в- memcached(- detection:<memcached_id>). Значение- <confidence>от 0 до 1.
Возвращает:
Массив лиц в представлении JSON. Лица в ответе по умолчанию отсортированы по id, а в случае задания вектора признаков – по убыванию степени схожести.
Формат ответа:
{
    "faces": [
      {
        ... face 1 data ...
        "confidence": 0.123 // if you search for a feature vector
      },
      {
        ... face 2 data ...
        "confidence": 0.123 // if you search for a feature vector
      },
      ...
    ],
    "next_page": "vgszk2bkexbl" // next page cursor
}
Параметр next_page – URL-safe строка, которую нужно передать в ?page= в следующем запросе, чтобы получить следующую страницу результатов. Разбиение по страницам доступно только при выключенной фильтрации по вектору признаков.
Запрос №1. Идентификация лица (поиск лица в галерее)
curl -s 'http://172.17.47.19:18411/v2/galleries/galleryname/faces?detection:bd3hv4tt8f66ph0eag1g=0.5&limit=1' | jq
Ответ
{
  "faces": [
    {
      "id": {
        "gallery": "galleryname",
        "face": 2
      },
      "features": {
        "gender": {
          "gender": "FEMALE",
          "score": -2.6415923
        },
        "age": 26.04833,
        "score": 0.9999999,
        "emotions": [
          {
            "emotion": "neutral",
            "score": 0.99958
          },
          {
            "emotion": "sad",
            "score": 0.0004020398
          },
          {
            "emotion": "happy",
            "score": 8.603504e-06
          },
          {
            "emotion": "surprise",
            "score": 8.076798e-06
          },
          {
            "emotion": "disgust",
            "score": 6.653509e-07
          },
          {
            "emotion": "angry",
            "score": 6.14346e-07
          },
          {
            "emotion": "fear",
            "score": 7.33713e-10
          }
        ]
       },
      "meta": {},
      "normalized_id": "2_bd323f5t8f66ph0eafp0.png",
      "confidence": 0.9999
    }
  ],
  "next_page": "There are more than 1 results, but pagination is not supported when filtering by FaceN"
}
Запрос №2. Получение списка лиц в галерее
curl -s 'http://172.17.47.19:18411/v2/galleries/galleryname/faces?limit=2' | jq
Ответ
{
  "faces": [
    {
      "id": {
        "gallery": "galleryname",
        "face": 1
      },
      "features": {
        "gender": {
          "gender": "FEMALE",
          "score": -2.6415923
        },
        "age": 26.04833,
        "score": 0.9999999,
        "emotions": [
          {
            "emotion": "neutral",
            "score": 0.99958
          },
          {
            "emotion": "sad",
            "score": 0.0004020398
          },
          {
            "emotion": "happy",
            "score": 8.603504e-06
          },
          {
            "emotion": "surprise",
            "score": 8.076798e-06
          },
          {
            "emotion": "disgust",
            "score": 6.653509e-07
          },
          {
            "emotion": "angry",
            "score": 6.14346e-07
          },
          {
            "emotion": "fear",
            "score": 7.33713e-10
          }
        ]
      },
      "meta": {},
      "normalized_id": "1_bd321tlt8f66ph0eaflg.png"
    },
    {
      "id": {
        "gallery": "galleryname",
        "face": 2
      },
      "features": {
        "gender": {
          "gender": "FEMALE",
          "score": -2.6415923
        },
        "age": 26.04833,
        "score": 0.9999999,
        "emotions": [
          {
            "emotion": "neutral",
            "score": 0.99958
          },
          {
            "emotion": "sad",
            "score": 0.0004020398
          },
          {
            "emotion": "happy",
            "score": 8.603504e-06
          },
          {
            "emotion": "surprise",
            "score": 8.076798e-06
          },
          {
            "emotion": "disgust",
            "score": 6.653509e-07
          },
          {
            "emotion": "angry",
            "score": 6.14346e-07
          },
          {
            "emotion": "fear",
            "score": 7.33713e-10
          }
        ]
      },
      "meta": {},
      "normalized_id": "2_bd323f5t8f66ph0eafp0.png"
    }
  ],
  "next_page": "3"
}
Запрос №3. Расширенная идентификация лица
curl -i -X GET http://127.0.0.1:18411/v2/galleries/history/faces/?limit=5&meta:in:camera=openspace&meta:in:camera=entrance&meta:lte:timestamp=1543845934&meta:gte:timestamp=1514801655&detection:bg2gu31jisghl6pee09g=0.4 | jq
Ответ
HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: SF:ibKVYpcb
Date: Wed, 05 Dec 2018 08:37:33 GMT
Transfer-Encoding: chunked
{
    "faces": [
        {
            "confidence": 0.6026,
            "features": { "score": 1 },
            "id": { "face": 4141715030051545133, "gallery": "history" },
            "meta": {
                "bbox": "[607, 802, 738, 933]",
                "camera": "openspace",
                "is_friend": 0,
                "labels": [],
                "score": 9999999999998079040,
                "timestamp": 1542909082
            },
            "normalized_id": "4141715030051545133_bfrep71jisghl6pedvk0.png"
        },
        {
            "confidence": 0.5325,
            "features": { "score": 1 },
            "id": { "face": 4141715086422990894, "gallery": "history" },
            "meta": {
                "bbox": "[741, 905, 953, 1117]",
                "camera": "openspace",
                "is_friend": 0,
                "labels": [],
                "score": 9999999999993877300,
                "timestamp": 1542909103
            },
            "normalized_id": "4141715086422990894_bfrepc9jisghl6pedvl0.png"
        },
        {
            "confidence": 0.531,
            "features": {
                "age": 41.2622,
                "gender": { "gender": "FEMALE", "score": -0.880698 },
                "score": 1
            },
            "id": { "face": 4141716493024780347, "gallery": "history" },
            "meta": {
                "bbox": "[90, 869, 166, 945]",
                "camera": "openspace",
                "is_friend": 0,
                "labels": [],
                "score": 10000000000000000013,
                "timestamp": 1542909627
            },
            "normalized_id": "4141716493024780347_bfretf9jisghl6pee020.png"
        },
        {
            "confidence": 0.5236,
            "features": {
                "age": 48.949913,
                "gender": { "gender": "FEMALE", "score": -0.7653318 },
                "score": 1
            },
            "id": { "face": 4141716498393489468, "gallery": "history" },
            "meta": {
                "bbox": "[56, 853, 125, 923]",
                "camera": "openspace",
                "is_friend": 0,
                "labels": [],
                "score": 9999999999999999053,
                "timestamp": 1542909629
            },
            "normalized_id": "4141716498393489468_bfretg1jisghl6pee030.png"
        },
        {
            "confidence": 0.5212,
            "features": {
                "age": 33.3112,
                "gender": { "gender": "MALE", "score": 1.9504981 },
                "score": 1
            },
            "id": { "face": 4141715338752319538, "gallery": "history" },
            "meta": {
                "bbox": "[-36, 862, 60, 958]",
                "camera": "openspace",
                "is_friend": 0,
                "labels": [],
                "score": 9999999999999999425,
                "timestamp": 1542909197
            },
            "normalized_id": "4141715338752319538_bfreq4pjisghl6pedvp0.png"
        }
    ],
    "next_page": "There are more than 5 results, but pagination is not supported when filtering by FaceN"
}