Думаю, как уже понятно из названия, речь пойдет о таких вещах, как Microsoft Project Oxford и Telegram API.
Что такое Microsoft Project Oxford — набор готовых REST API, в доступной форме дающих разработчикам всю мощь алгоритмов машинного зрения, анализа естественного языка и распознавания голоса для использования в своих приложениях. Стоит отметить, что доступность сервисов в виде REST API позволяет использовать его на совершенно любых платформах и с помощью своих любимых технологий разработки, не ограничиваясь предложенными Microsoft. Более подробно — тут или тут.
Telegram Bot API — (думаю и так многие знают) кто не знает идет сюда.
Первое, что мне пришло в голову — самое простое сделать бота, который определяет возраст и пол человека на фото. Для этого нам нужно Face API и ключ API, все это можно получить на официальном сайте .
Итак, начнем (рассказывать о том, как создать бота, я не буду, т.к информации об этом куча). После того, как зарегистрировали бота, webhooks и получили ключ API, преступаем к написанию.
Писать решил на PHP. Почему? бес попутал
1) Получаем сообщение от пользователя:
require_once '/home/edalqrmq/php/HTTP/Request.php'; define('BOT_TOKEN', 'Token'); define('API_URL', 'https://api.telegram.org/bot'.BOT_TOKEN.'/'); define('FILE_URL', 'https://api.telegram.org/file/bot'.BOT_TOKEN.'/');//для формирования ссылки на фото $content = file_get_contents("php://input"); $update = json_decode($content, true); $chatID = $update["message"]["chat"]["id"];
Примерно вот такой JSON:
{
"update_id":3405704853232,
_"message":{
"message_id":238,
"from":{
"id":138183417332,
"first_name":"Kirill",
"last_name":"Dudka"
},
"chat":{
"id":1381834173,
"first_name":"Kirill",
"last_name":"Dudka",
"type":"private"
},
"date":1461168940323,
"photo":[
{
"file_id":"AgADAgADw6gxG_mCPAjHE7knq2P_UUJfLyLw4AAgI",
"file_size":1211,
"width":90,
"height":67
},
{
"file_id":"AgADAgADw6gxG_mCPAjHE7knDjERzAUtSA0ABGwI",
"file_size":16846,
"width":320,
"height":240
},
{
"file_id":"AgADAgADw6gxG_mCPAjHE7knBB_ZFZmQI",
"file_size":55547,
"width":800,
"height":600
}
]
}
}
2) Проверяем, на наличие фото и формируем ссылку на изображение:
if($update["message"]["photo"]){ $photoId = $update["message"]["photo"]["2"]["file_id"]; $url_json = file_get_contents(API_URL."getFile?file_id=".$photoId); $massURL = json_decode($url_json, true); $photoURL = FILE_URL.$massURL["result"]["file_path"]; }
3) Далее нам нужно отправить изображение на анализ, более подробно можно посмотреть тут:
$req = &new HTTP_Request('https://api.projectoxford.ai/face/v1.0/detect'); $req->setMethod(HTTP_REQUEST_METHOD_POST); $req->addHeader('Content-Type','application/json'); $req->addHeader('Ocp-Apim-Subscription-Key','key'); $req->addQueryString('returnFaceId', 'true'); $req->addQueryString('returnFaceLandmarks', 'false'); $req->addQueryString('returnFaceAttributes', 'age,gender,smile');// параметры которые хотим узнать $req->setBody('{"url":"'.$photoURL.'"}');
В ответ нам приходит, что-то подобное:
Pragma: no-cache
Cache-Control: no-cache
Date: Wed, 20 Apr 2016 18:31:59 GMT
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Content-Length: 143
Content-Type: application/json; charset=utf-8
Expires: -1
[
{
"faceId": "a194a7b3-7e86-46fc-9b73-166e09127546581b",
"faceRectangle": {
"top": 80,
"left": 24,
"width": 162,
"height": 162
},
"faceAttributes": {
"age": 23.3
}
}
]
4) Дальше дело за малым, отправить данные пользователю:
try { $req->sendRequest(); $face_json = $req->getResponseBody(); $massFace = json_decode($face_json, true); $age = $massFace["0"]["faceAttributes"]["age"]; $gender_En = $massFace["0"]["faceAttributes"]["gender"]; if(!$massFace["0"]["faceAttributes"]){ $sendto = API_URL."sendmessage?chat_id=".$chatID."&text= Мило, но это не человек"; } else{ if($gender_En=="male"){ $gender = "Мужской"; } else{ if($gender_En=="female"){ $gender = "Женский"; } } $sendto = API_URL."sendmessage?chat_id=".$chatID."&text= Пол: ".$gender." Возраст: ".$age; } } catch (HttpException $ex) { echo $ex; } } else { $sendto = API_URL."sendmessage?chat_id=".$chatID."&text=Отправь мне фото"; } file_get_contents($sendto);
Собственно на этом все, в итоге получилась такая картина:
Итого ушел час времени и немного кофе. Бот выводит информацию только о первом найденном лице, не ставил себе задачу написать бота на прод (пока что), Microsoft Project Oxford — достаточно интересное API, которое заслуживает внимания.
Всем спасибо.
Да пребудут с вами ваши нейроны!
ссылка на оригинал статьи https://habrahabr.ru/post/282125/
Добавить комментарий