Пример интеграции на Python
Попробуем распознать лица на фотографии:
Скачайте файл smarty.py.
1python examples/python/smarty.py \ 2-u "https://smarty.mail.ru/api/v1/persons/recognize?oauth_provider="mcs&oauth_token=e50b000614a371ce99c01a80a4558d8ed93b313737363830" \ 3-p examples/friends1.jpg \ 4--meta '{"space":"1", "create_new":false}' \ 5-v
Получим ответ:
1{ 2 "status":200, 3 "body":{ 4 "objects": [ 5 { 6 "status":0, 7 "name":"file_0", 8 "persons":[ 9 {"tag":"undefined","coord":[102,30,184,134],"confidence":0.99999,"awesomeness":0.5025}, 10 {"tag":"undefined","coord":[393,74,461,166],"confidence":0.99987,"awesomeness":0.548}, 11 {"tag":"undefined","coord":[458,48,535,149],"confidence":0.99976,"awesomeness":0.4766}, 12 {"tag":"undefined","coord":[273,45,352,147],"confidence":0.99963,"awesomeness":0.504}, 13 {"tag":"undefined","coord":[525,81,600,184],"confidence":0.99954,"awesomeness":0.4849}, 14 {"tag":"undefined","coord":[194,76,258,167],"confidence":0.9984,"awesomeness":0.5725} 15 ] 16 } 17 ], 18 "aliases_changed":false 19 }, 20 "htmlencoded":false, 21 "last_modified":0 22}
Как видим, на фотографии нашлось 6 лиц, но все они "undefined". Что значит "undefined"?Это значит, что в базе данных еще нет ни одной распознанной персоны.
Обратите внимание на параметры "space":"1"
и "create_new":"false"
, их значение вскоре станет понятно из примеров.
Попробуем добавить в базу данных персону. На этой фотографии одна персона:
Мы установим, что эта персона имеет id=1
в базе данных. Сделаем это с помощью следующего запроса и параметра "person_id":1
.
1python examples/python/smarty.py \ 2-u "https://smarty.mail.ru/api/v1/persons/set?oauth_provider=mcs&oauth_token=e50b000614a371ce99c01a80a4558d8ed93b313737363830" \ 3-p examples/rachel-green.jpg \ 4--meta '{"space":"1", "images":[{"person_id":1}]}' \ 5-v
Если запрос верный, ответ будет такой:
1{ 2 "status":200, 3 "body":{ 4 "objects":[ 5 {"status":0,"name":"file_0"} 6 ] 7 }, 8 "htmlencoded":false, 9 "last_modified":0 10}
Теперь попробуем поискать лица снова. Выполняем тот же запрос:
1python examples/python/smarty.py \ 2-u "https://smarty.mail.ru/api/v1/persons/recognize?oauth_provider=mcs&oauth_token=e50b000614a371ce99c01a80a4558d8ed93b313737363830" \ 3-p examples/friends1.jpg \ 4--meta '{"space":"1", "create_new":false}' \ 5-v
На этот раз получим ответ:
1{ 2 "status":200, 3 "body":{ 4 "objects": [ 5 { 6 "status":0, 7 "name":"file_0", 8 "persons":[ 9 {"tag":"undefined","coord":[102,30,184,134],"confidence":0.99999,"awesomeness":0.5025}, 10 {"tag":"undefined","coord":[393,74,461,166],"confidence":0.99987,"awesomeness":0.548}, 11 {"tag":"undefined","coord":[458,48,535,149],"confidence":0.99976,"awesomeness":0.4766}, 12 {"tag":"undefined","coord":[273,45,352,147],"confidence":0.99963,"awesomeness":0.504}, 13 {"tag":"undefined","coord":[525,81,600,184],"confidence":0.99954,"awesomeness":0.4849}, 14 {"tag":"person1","coord":[194,76,258,167],"confidence":0.9984,"awesomeness":0.5725} 15 ] 16 } 17 ], 18 "aliases_changed":false 19 }, 20 "htmlencoded":false, 21 "last_modified":0 22}
Теперь на фотографии с шестью персонами мы находим персону, которую мы загрузили с помощью метода persons/set
. Мы загружали в базу данных персону с id=1
, и теперь она распознана:
"tag":"person1" |
Теперь вернемся в самое начало и представим, что мы еще не загружали персоны в базу данных. Попробуем выполнить запрос с "create_new":true
:
1python examples/python/smarty.py \ 2-u "https://smarty.mail.ru/api/v1/persons/recognize?oauth_provider=mcs&oauth_token=e50b000614a371ce99c01a80a4558d8ed93b313737363830" \ 3-p examples/friends1.jpg \ 4--meta '{"space":"1", "create_new":true}' \ 5-v
В ответе:
1{ 2 "status":200, 3 "body":{ 4 "objects": [ 5 { 6 "status":0, 7 "name":"file_0", 8 "persons":[ 9 {"tag":"person1","coord":[102,30,184,134],"confidence":0.99999,"awesomeness":0.5025}, 10 {"tag":"person2","coord":[393,74,461,166],"confidence":0.99987,"awesomeness":0.548}, 11 {"tag":"person3","coord":[458,48,535,149],"confidence":0.99976,"awesomeness":0.4766}, 12 {"tag":"person4","coord":[273,45,352,147],"confidence":0.99963,"awesomeness":0.504}, 13 {"tag":"person5","coord":[525,81,600,184],"confidence":0.99954,"awesomeness":0.4849}, 14 {"tag":"person6","coord":[194,76,258,167],"confidence":0.9984,"awesomeness":0.5725} 15 ] 16 } 17 ], 18 "aliases_changed":false 19 }, 20 "htmlencoded":false, 21 "last_modified":0 22}
Видно, что все найденные персоны автоматически записались в базу данных, и им присвоены id
. Если теперь поискать Рейчел методом persons/recognize
, то теперь она будет распознана как "person6"
.
Позволяет создавать непересекающиеся наборы персон. Например, в "space":"1"
можно загрузить (persons/set
) всех персонажей сериала "Друзья", а в "space":"2"
- всех персонажей сериала "Бригада". Теперь можно создать автоматическую пропускную систему:
- на голливудской киностудии стоит искать (вызывать
persons/recognize
) в"space":"1"
, - в московской — в
"space":"2"
.
Если нужно почистить спейс (space) или какую-то персону добавили в базу данных по ошибке, необходимо использовать запрос persons/delete
.
1python examples/python/smarty.py \ 2-u "https://smarty.mail.ru/api/v1/persons/delete?oauth_provider=mcs&oauth_token=e50b000614a371ce99c01a80a4558d8ed93b313737363830" \ 3--meta '{"space":"1", "images":[{"name":"myname", "person_id":1}]}' \ 4-v
Если запрос верный, ответ будет такой:
1{ 2 "status":200, 3 "body": 4 { 5 "objects": 6 [ 7 {"status":0,"name":"myname"} 8 ] 9 }, 10 "htmlencoded":false, 11 "last_modified":0 12}
Для этого запроса не требуется передавать картинку, достаточно только мета-информации c указанием id
персоны, которую надо удалить.
В настоящий момент этот запрос требуется делать с помощью multipart/form"-data, как и предыдущие запросы.
В будущем планируется возможность вызывать такие запросы (не требующие передачи файла на сервер) через обычный application/json
или даже с помощью обычного GET-запроса.