Пример интеграции на 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
Теперь вернемся в самое начало и представим, что мы еще не загружали персоны в базу данных. Попробуем выполнить запрос с "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
Позволяет создавать непересекающиеся наборы персон. Например, в "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":[{"status":0,"name":"myname"}] 6}, 7"htmlencoded":false, 8"last_modified":0 9}
Для этого запроса не требуется передавать картинку, достаточно только мета-информации c указанием id персоны, которую надо удалить.
В настоящий момент этот запрос требуется делать с помощью multipart/form"-data, как и предыдущие запросы.
В будущем планируется возможность вызывать такие запросы (не требующие передачи файла на сервер) через обычный application/json или даже с помощью обычного GET-запроса.