2016-04-01 7 views
2

Я пытаюсь позвонить в Emotion Api через JavaScript с помощью приложения PhoneGap. Я закодировал изображение в base64 и проверил, что данные могут быть декодированы одним из онлайн-инструментов. это код, который я нашел в Интернете для использования.Проект API Emotion Oxford base64 image

var apiKey = "e371fd4333ccad2"; // (вы можете получить бесплатный ключ на сайте, это изменение здесь)

// apiUrl: базовый URL для API. Узнайте, что это для других API-интерфейсов через документацию API. var apiUrl = "https://api.projectoxford.ai/emotion/v1.0/recognize";

«файл» - это строка base64.

function CallAPI(file, apiUrl, apiKey) 
    { 



     // console.log("file=> " +file); 

     $.ajax({ 
      url: apiUrl, 
      beforeSend: function (xhrObj) { 
      xhrObj.setRequestHeader("Content-Type", "application/octet-stream"); 
      xhrObj.setRequestHeader("Ocp-Apim-Subscription-Key", apiKey); 
      }, 
      type: "POST", 
      data: file, 
      processData: false 
      }) 
    .done(function (response) { 
      console.log("in call api a"); 
      ProcessResult(response); 
      }) 
    .fail(function (error) { 
      console.log(error.getAllResponseHeaders()) 

      }); 
    } 

    function ProcessResult(response) 
    { 
    console.log("in processrult"); 
    var data = JSON.stringify(response); 
    console.log(data); 

    } 

Я вернулся это:

Expires: -1 

Access-Control-Allow-Origin: * 

Pragma: no-cache 

Cache-Control: no-cache 

Content-Length: 60 

Date: Fri, 01 Apr 2016 13:34:32 GMT 

Content-Type: application/json; charset=utf-8 

X-Powered-By: ASP.NET 

Так я попытался их тестовую страницу консоли. https://dev.projectoxford.ai/docs/services/5639d931ca73072154c1ce89/operations/563b31ea778daf121cc3a5fa/console

Я могу поместить изображение, подобное вашему «example.com/man.jpg», и оно отлично работает. но если я беру одно и то же изображение и кодирую его как базовое 64-образное изображение, которое я получаю, это «Плохое тело», я попробовал его как в качестве типа контента «application/octet-stream», так и «application/json» и получить ту же ошибку , Образец кодируемого выглядит просьбой об like..and HTTP

POST https://api.projectoxford.ai/emotion/v1.0/recognize HTTP/1.1 Content-Type: применение/октет-поток Хост: api.projectoxford.ai OCP-Apim-Подписка-ключ: ••• ••••••••••••••••••••••••••••• Content-Length: 129420

данные: изображение/JPEG; base64,/9J/4AAQSkZJRgABAQAASABIAAD/...

я вернусь:

Pragma: нет -cache Cache-Control: no-cache Дата: Пт, 01 апр 2016 16:23:09 GMT X-Powered by By: ASP.NET Content-Length: 60 Content-Type: application/json; кодировка = UTF-8 Expires: -1

{ "ошибка": { "код": "BadBody", "сообщение" : "Invalid изображение лица." } }

Я теперь не уверен, что вы можете отправить изображение, подобное этому или нет, из Javascript. Может кто-нибудь сказать мне, если мой javascript верен, или если они могут отправить закодированное строковое изображение base64 на сайт.

спасибо за вашу помощь тим

ответ

1

Этот API не принимает идентификаторы URI данных для изображений. То, что вам нужно сделать, это преобразовать его в двоичный blob. Хотя этот answer предназначен для другого Project Oxford API, вы можете применить тот же метод.

+0

спасибо, это была проблема, с помощью blob она отлично работала ... еще раз спасибо ... – user852566