Тестовые запросы
Перед тем как приступить к программированию и использованию распознавания лиц в своем приложении, убедитесь, что компоненты Сервера FindFace работают надлежащим образом. Для этого выполните по порядку приведенные ниже тестовые запросы. Для того чтобы структурировать текст ответов на запросы, используйте обработчик JSON jq.
В этом разделе:
Структурирование ответов на запросы
Используйте обработчик jq, чтобы структурировать данные в формате JSON в ответах на запросы. Обработчик jq устанавливается автоматически из консольного инсталлятора.
Совет
Если это не так, установите jq следующим образом:
sudo apt install jq
Примечание
Поскольку обработчик jq аппроксимирует целые числа, большие 2^53 (например, для ”id“:12107867323949968228
в результате получится ”id“:12107867323949967000
и т. д.), вместо него может быть целесообразным использовать json_pp.
Создание галереи
Данный запрос создает новую галерею galleryname
. Соответствующий метод HTTP API для анализа и распознавания лиц: /galleries/<gallery> POST
.
Запрос
curl -s -X POST http://localhost:18411/v2/galleries/galleryname | jq
Ответ
{}
Получение списка галерей
Данный запрос возвращает имя единственной на данный момент галереи (galleryname
). Соответствующий метод HTTP API для анализа и распознавания лиц: /galleries GET
.
Запрос
curl -s http://localhost:18411/v2/galleries | jq
Ответ
{
"galleries": [
{
"name": "galleryname",
"faces": 0
}
]
}
Обнаружение лица на фотографии
Первый запрос обнаруживает лицо на тестовых изображениях, размещенных в сети Интернет, и возвращает координаты рамок вокруг лиц и их ориентацию. Соответствующий метод HTTP API для анализа и распознавания лиц: /detect POST
.
Запрос №1
curl -s -H 'Content-Type: text/x-url' -d https://static.findface.pro/sample.jpg -X POST http://localhost:18411/v2/detect | jq
Ответ
{
"faces": [
{
"bbox": {
"left": 595,
"top": 127,
"right": 812,
"bottom": 344
},
"features": {
"score": 0.9999999
}
}
],
"orientation": 1
}
Если facen=on
, возвращенный результат будет сохранен в memcached
. В следующем запросе изображение то же самое, но на этот раз facen=on
, а также запрашиваются такие параметры, как пол, возраст и эмоции.
Совет
Для извлечения результата распознавания из memcached
примените метод /detect GET
.
Запрос №2
curl -s -H 'Content-Type: text/x-url' -d https://static.findface.pro/sample.jpg -X POST 'http://localhost:18411/v2/detect?facen=on&gender=on&age=on&emotions=on' | jq
Ответ
{
"faces": [
{
"id": "bhse5elubdg0ajgm2nkg",
"bbox": {
"left": 595,
"top": 127,
"right": 812,
"bottom": 344
},
"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
}
]
}
}
],
"orientation": 1
}
В следующем запросе детектируется лицо с другого изображения (с целью последующего наполнения базы данных). Результат будет записан в memcached
(facen=on
).
Запрос №3
curl -s -H 'Content-Type: text/x-url' -d https://static.findface.pro/sample2.jpg -X POST 'http://localhost:18411/v2/detect?facen=on
{
"faces": [
{
"id": "bhse45dubdg0ajgm2nk0",
"bbox": {
"left": 515,
"top": 121,
"right": 821,
"bottom": 427
},
"features": {
"score": 0.9999982
}
}
],
"orientation": 1
}
Извлечение результата детекции из memcached
Данный запрос извлекает из memcached
результат детекции, полученный в одном из предыдущих запросов, по его id. Соответствующий метод HTTP API для анализа и распознавания лиц: /detect GET
.
Примечание
bhse5elubdg0ajgm2nkg
– id лица в memcached
, полученный в ответе детектора. При выполнении тестовых запросов вам потребуется заменить его на актуальное полученное значение.
Важно
Прежде чем продолжить, откройте файл конфигурации findface-sf-api
и убедитесь, что параметр allow-return-facen
имеет значение on
.
sudo vi /etc/findface-sf-api.ini
allow-return-facen: on
Запрос №1
curl -s 'http://localhost:18411/v2/detect/bhse5elubdg0ajgm2nkg'
Ответ
{
"id": "bhse5elubdg0ajgm2nkg",
"bbox": {
"left": 595,
"top": 127,
"right": 812,
"bottom": 344
},
"features": {
"score": 0.9999999
}
}
Для того чтобы получать вместе с результатом детекции вектор признаков лица (facen), откройте файл конфигурации /etc/findface-sf-api.ini
и установите allow-return-facen: true
. Перезапустите findface-sf-api
и добавьте параметр строки return_facen = on
к предыдущей команде:
Запрос №2
curl -s 'http://localhost:18411/v2/detect/bhse5elubdg0ajgm2nkg?return_facen=on' | jq
Ответ
{
"id": "bhse5elubdg0ajgm2nkg",
"bbox": {
"left": 595,
"top": 127,
"right": 812,
"bottom": 344
},
"features": {
"score": 0.9999999
},
"facen": "1ji...Vr3TEQg8"
}
Добавление лица из memcached
в галерею
Данные запросы извлекают результаты детекции из memcached
по id и добавляют их в галерею galleryname
под другими, пользовательскими id. Соответствующий метод HTTP API для анализа и распознавания лиц: /v2/galleries/<gal>/faces/<id>
.
Запрос №1
curl -s -X POST -H 'Content-Type: application/json' --data '{"from":"detection:bd2blott8f63g8nbhi50"}' http://localhost:18411/v2/galleries/galleryname/faces/1 | jq
Ответ
{
"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": "3_bd323i5t8f66ph0eafq0.png"
}
Запрос №2
curl -s -X POST -H 'Content-Type: application/json' --data '{"from":"detection: bd44p6dt8f66ph0eahkg "}' http://localhost:18411/v2/galleries/galleryname/faces/2 | jq
Получение списка лиц в галерее
Данный запрос выводит список всех лиц, добавленных в галерею galleryname
. Соответствующий метод HTTP API для анализа и распознавания лиц: /galleries/<gallery>/faces
с включенным фильтром по максимальному количеству возвращаемых лиц (limit=
).
Запрос
curl -s 'http://localhost: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"
}
Поиск лица в галерее
Следующий запрос выполняет поиск обнаруженного лица (результата детекции) в галерее galleryname
с пороговой схожестью, равной 0.5. Соответствующий метод HTTP API для анализа и распознавания лиц: /galleries/<gallery>/faces
с включенными фильтрами по detection:id
(биометрическому образцу) и similarity
(схожести) лиц.
Запрос
curl -s 'http://localhost: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"
}
Следующий запрос ищет в галерее galleryname
лица, похожие на заданное лицо в той же галерее с пороговым сходством, равным 0,5. Соответствующий метод HTTP API для анализа и распознавания лиц: /galleries/<gallery>/faces
с включенными фильтрами face:<gallery>/<db_id>
и similarity
.
curl -s 'http://localhost:18411/v2/galleries/galleryname/faces?face:galleryname/1=0.1&limit=1' | jq
{
"faces": [
{
"id": {
"gallery": "galleryname",
"face": 2
},
"features": null,
"meta": {},
"confidence": 0.999
}
],
"next_page": "There are more than 1 results, but pagination is not supported when filtering by FaceN"
}
Сравнение лиц
Следующие запросы выполняют сравнение 2 лиц и возвращают результат их проверки на идентичность. Соответствующий метод HTTP API для анализа и распознавания лиц: /verify POST
.
Первый запрос сравнивает 2 лица, представляющие собой результаты детекции (метод /detect POST
), хранящиеся в memcached
.
Запрос №1
curl -s 'http://localhost:18411/v2/verify?face1=detection:bd3hv4tt8f66ph0eag1g&face2=detection:bd3hv8dt8f66ph0eag2g' | jq
Ответ
{
"confidence": 0.92764723
}
Второй запрос сравнивает результат детекции в memcached и лицо в галерее.
Запрос
curl -s 'http://localhost:18411/v2/verify?face1=detection:bd3hv4tt8f66ph0eag1g&face2=face:galleryname/2' | jq
Ответ
{
"confidence": 0.999996
}