Познавательные службы Microsoft сталкиваются с вызовом API
Я построил приложение на API эмоций Azure (Microsoft), но оно было просто объединено с API-интерфейсом для когнитивных служб. Я использую веб-камеру для отправки изображения (в двоичных данных) на их сервер для анализа и получаю XML в ответ. (Я уже прокомментировал некоторый старый код, в этом примере. Попытка исправить это).
function saveSnap(data){
// Convert Webcam IMG to BASE64BINARY to send to EmotionAPI
var file = data.substring(23).replace(' ', '+');
var img = Base64Binary.decodeArrayBuffer(file);
var ajax = new XMLHttpRequest();
// On return of data call uploadcomplete function.
ajax.addEventListener("load", function(event) {
uploadcomplete(event);
}, false);
// AJAX POST request
ajax.open("POST", "https://westcentralus.api.cognitive.microsoft.com/face/v1.0/detect?returnFaceId=true&returnFaceLandmarks=false&returnFaceAttributes=emotion","image/jpg");
ajax.setRequestHeader("Content-Type","application/json");
//ajax.setRequestHeader("Accept","text/html,application/xhtml+xml,application/xml");
ajax.setRequestHeader("Ocp-Apim-Subscription-Key","subscription_key");
ajax.send(img);
}
теперь я понял с их сайта, что вызов возвращает JSON. Но я просто не могу заставить его работать. Я вижу, что данные возвращаются, но как я могу получить из этого JSON. Я, наверное, упускаю что-то важное, и надеюсь, что кто-нибудь может мне помочь.:) программа работала, когда я все еще мог использовать API Emotion.
function uploadcomplete(event){
console.log("complete");
console.log(event);
//var xmlDoc = event.target.responseXML;
//var list = xmlDoc.getElementsByTagName("scores");
console.log(JSON.stringify(event));
1 ответ
Несколько вопросов для решения:
- Вам нужно дождаться ответа POST, а не только завершения загрузки.
- Вы хотите установить тип содержимого
application/octet-stream
если вы загружаете бинарный файл как есть. - Вы захотите установить ключ подписки на реальное значение (вы, вероятно, сделали это, прежде чем вставить свой код здесь.)
,
function saveSnap(data) {
// Convert Webcam IMG to BASE64BINARY to send to EmotionAPI
var file = data.substring(23).replace(' ', '+');
var img = Base64Binary.decodeArrayBuffer(file);
ajax = new XMLHttpRequest();
ajax.onreadystatechange = function() {
if (ajax.readyState == XMLHttpRequest.DONE) {
console.log(JSON.stringify(ajax.response));
}
}
ajax.open('post', 'https://westcentralus.api.cognitive.microsoft.com/face/v1.0/detect?returnFaceId=true&returnFaceLandmarks=false&returnFaceAttributes=emotion');
ajax.setRequestHeader('Content-Type', 'application/octet-stream');
ajax.setRequestHeader('Ocp-Apim-Subscription-Key', key);
ajax.send(img);
}