Прямые API-запросы к базе данных Tarantool

Вы можете использовать HTTP API для извлечения данных объектов (лиц, силуэтов, автомобилей) напрямую из базы данных Tarantool.

Примечание

В текущей реализации API Tarantool оперирует объектами как лицами. Например, для добавления объекта нужно отправить запрос POST /:ver/faces/add/:name.

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

Общие сведения

API-запросы к базе данных Tarantool нужно отправлять по адресу http://<tarantool_host_ip:port>.

Совет

Порт для API-запросов можно узнать в разделе FindFace.start файла конфигурации Tarantool /etc/tarantool/instances.available/*.lua:

cat /etc/tarantool/instances.available/*.lua

##8101:
FindFace.start("127.0.0.1", 8101)

Примечание

В случае если FindFace Multi развернут на одиночном физическом сервере, база данных Tarantool по умолчанию будет доступна только локально (127.0.0.1). Если необходимо открыть доступ к базе данных Tarantool с удаленного сервера, внесите изменения в файл конфигурации findface-tarantool-server (/etc/tarantool/instances.available/*.lua).

API-запросы к Tarantool могут содержать следующие параметры в сегментах пути:

  • :ver: версия API (v2 на данный момент).

  • :name: имя галереи.

По умолчанию в базе данных Tarantool созданы следующие галереи:

  • ffsec_body_events: векторы признаков, извлеченные из обнаруженных на видео силуэтов.

  • ffsec_body_objects: векторы признаков, извлеченные из загруженных в картотеку изображений силуэтов.

  • ffsec_body_clusters: центроиды кластеров силуэтов.

  • ffsec_car_events: векторы признаков, извлеченные из обнаруженных на видео автомобилей.

  • ffsec_car_objects: векторы признаков, извлеченные из загруженных в картотеку изображений автомобилей.

  • ffsec_car_clusters: центроиды кластеров автомобилей.

  • ffsec_face_events: векторы признаков, извлеченные из обнаруженных на видео лиц.

  • ffsec_face_objects: векторы признаков, извлеченные из загруженных в картотеку изображений лиц.

  • ffsec_face_clusters: центроиды кластеров лиц.

  • ffsec_user_face: векторы признаков, извлеченные из фотографий пользователей FindFace Multi для аутентификации по лицу.

Совет

Для получения списка имен галерей на шарде введите следующую команду в адресном поле браузера:

http://<tarantool_host_ip:shard_port>/stat/list/1/99

Та же самая команда в консоли:

curl <tarantool_host_ip:shard_port>/stat/list/1/99 \| jq

Вы также можете получить список имен галерей, отправив в Tarantool прямой запрос:

echo 'box.space.galleries:select()' | tarantoolctl connect <tarantool_host_ip:shard_port>

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

Добавление объекта

POST /:ver/faces/add/:name

Параметры в теле:

Массив объектов в представлении JSON со следующими полями:

  • "id": id объекта в галерее, uint64_t,

  • ”facen”: необработанный вектор признаков, base64,

  • "meta": метаданные объекта, словарь.

Возвращает:

  • HTTP 200 и пустое тело в случае успеха.

  • HTTP 404 с описанием ошибки, если галерея с заданным именем не существует.

  • HTTP с отличным от 200 статусом и описание ошибки в теле в случае неудачи.

Пример

Запрос

curl -D - -s 'http://localhost:8101/v2/faces/add/testgal' --data '
[
  {
    "id": 9223372036854776000,
    "facen": "qgI3vZRv/z…NpO9MdHavW1WuT0=",
    "meta": {
"cam_id": "223900",
"person_name": "Mary Ostin",

    }
  }
]

Ответ

HTTP/1.1 200 Ok
Content-length: 1234
Server: Tarantool http (tarantool v1.7.3-673-g23cc4dc)
Connection: keep-alive

Удаление объекта

POST /v2/faces/delete/:name

Параметры в теле:

Массив в представлении JSON из списка id объектов, подлежащих удалению

Возвращает:

  • HTTP 200 и пустое тело в случае успеха.

  • HTTP 404, если объект с заданным id не найден в галерее.

  • HTTP с отличным от 200 статусом и описание ошибки в теле в случае неудачи.

Пример

Запрос

curl -D -  -s 'http://localhost:8101/v2/faces/delete/testgal' --data '[1, 4, 922, 3]'

Ответ

HTTP/1.1 200 Ok
Content-length: 111
Server: Tarantool http (tarantool v1.7.3-673-g23cc4dc)
Connection: keep-alive

Редактирование метаданных и/или вектора признаков объекта

POST /v2/faces/update/:name

Параметры в теле:

Массив объектов в представлении JSON со следующими полями:

  • "id": id объекта, uint64_t.

  • ”facen”: (опционально) новый вектор признаков, base64. Если параметр отсутствует или null, поле в базе данных не обновляется.

  • ”meta”: словарь, в котором передаются новые метаданные. Если поле meta отсутствует или null, оно не обновляется в базе данных.

Возвращает:

  • HTTP 200 и словарь со всеми параметрами объекта, в том числе неизменными, в случае успеха.

  • HTTP 404 с описанием ошибки, если объекта с таким id не существует.

  • HTTP с отличным от 200 статусом и описание ошибки в теле в случае неудачи.

Пример

Запрос

curl -D - -s 'http://localhost:8101/v2/faces/update/sandbox' --data '[{"id":1,"facen":null,"meta":{"m:timestamp":1848}}]'

Ответ

HTTP/1.1 200 Ok
Content-length: 151
Server: Tarantool http (tarantool v1.7.3-673-g23cc4dc)
Connection: keep-alive

{"meta":{"m:timestamp":1848,"normalized_id":"1_b9pkrf00mjt6h1vmq1kg.png","m:cam_id":"a9f7a973-f07e-469d-a3bd-41ddd510b26f","feat":"{\"score\":0.123}"}, "id":1, ... }

Получение списка галерей

POST /v2/galleries/list

Возвращает:

Массив с галереями, для каждой из которой возвращается имя (name) и количество объектов (faces).

Пример

Запрос

curl -D - -s -X POST http://localhost:8101/v2/galleries/list

Ответ

HTTP/1.1 200 Ok
Content-length: 42
Server: Tarantool http (tarantool v1.7.3-673-g23cc4dc)
Connection: keep-alive

{
  "results": [
    {
      "name": "testgal",
      "faces": 2
    }
  ]
}