Прямые 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/search/:name
Параметры в теле:
Поисковый запрос в представлении JSON со следующими полями:
limit
: максимальное количество объектов в ответе.sort
: включает сортировку по следующим параметрам:id
: по возрастанию id,-id
по убыванию id,-score
: по убыванию степени схожести (если поиск выполняется по схожим векторам признаков).filter
(фильтры):facen
: опциональный фильтр по схожести вектора признаков. Передайте словарь со следующими полями:data
: вектор признаков в формате base64;score
: диапазон схожести объектов [пороговая схожесть; 1], поддерживаются только запросы с правой границей 1 (стопроцентное совпадение объектов).id
иmeta/<meta_key>
: фильтры по пользовательскому id объектов и содержимому поляmeta
. Для задания фильтра используются следующие операторы:range
: диапазон значений, только для числовых полей.set
: набор значений, одно из которых должно присутствовать в id или метаданных, для числовых и строковых полей.subset
: набор значений, каждое из которых должно присутствовать в id или метаданных, для числовых и строковых полей.like
: аналогичноlike
в SQL-запросах: поддерживаются только ‘aa%’ или ‘aa%’ или ‘%aa%’. Только для полейstring
иset[string]
. При использованииset[string]
фильтр вернет результат, если хотя бы одно из значений прошло проверку.ilike
(только для полейstring
иset[string]
): аналогичноlike
, но без учета регистра.
Возвращает:
В случае успеха массив JSON с объектами. Значение в заголовке
X-search-stat
показывает, был ли использован быстрый индекс для поиска:with_index
илиwithout_index
.Примечание
В API v2 быстрый индекс не используется.
HTTP с отличным от 200 статусом и описание ошибки в теле в случае неудачи.
Пример
Запрос
curl -D - -s 'http://localhost:8101/v2/testgal/search' --data '
{
"limit": 2,
"sort": {
"score": -1
},
"filter": {
"facen": {
"data": "qgI3vZRv/z0BQTk9rcirOyZrNpO9MdHavW1WuT0=",
"score": [0.75, 1]
},
"id": {
"range": [9223372036854000000, 9223372036854999000]
},
"meta": {
"person_id": {
"range": [444, 999]
},
"cam_id": {
"set": ["12767", "8632", "23989"]
}
}
}
}'
Ответ
HTTP/1.1 200 Ok
Content-length: 1234
X-search-stat: without_index
Server: Tarantool http (tarantool v1.7.3-673-g23cc4dc)
Connection: keep-alive
{
"results": [
{
"facen": " qgI3vZRv/z0BQTk9rcirOyZrNpO9MdHavW1WuT0=",
"meta": {
"timestamp": 0,
"photo_hash": "",
"person_id": 777,
"cam_id": "8632"
},
"score": 0.9964,
"id": 9223372036854776000
}
]
}
Редактирование метаданных и/или вектора признаков объекта
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
}
]
}
Получение информации о галерее
POST /v2/galleries/get/:name
Возвращает:
HTTP 200 и словарь с параметрами галереи в случае успеха.
HTTP 404 с описанием ошибки, если галереи с таким именем не существует.
HTTP с отличным от 200 статусом и описание ошибки в теле в случае неудачи.
Пример
Запрос
curl -D - -s -X POST http://localhost:8101/v2/galleries/get/testgal
HTTP/1.1 200 Ok
Content-length: 11
Server: Tarantool http (tarantool v1.7.3-673-g23cc4dc)
Connection: keep-alive
{"faces":2}
Создание галереи
POST /v2/galleries/add/:name
Возвращает:
HTTP 200 и пустое тело в случае успеха.
HTTP с отличным от 200 статусом и описание ошибки в теле в случае неудачи.
Пример
Запрос
curl -D - -X POST -s 'http://localhost:8101/v2/galleries/add/123'
Ответ
HTTP/1.1 200 Ok
Content-length: 111
Server: Tarantool http (tarantool v1.7.3-673-g23cc4dc)
Connection: keep-alive
Удаление галереи
POST /v2/galleries/delete/:name
Возвращает:
HTTP 200 и пустое тело в случае успеха.
HTTP с отличным от 200 статусом и описание ошибки в теле в случае неудачи.
Пример
Запрос
curl -D - -X POST -s 'http://localhost:8101/v2/galleries/delete/123'
Ответ
HTTP/1.1 204 No content
Content-length: 0
Server: Tarantool http (tarantool v1.7.3-673-g23cc4dc)
Connection: keep-alive