2016-04-01 11 views
2

Ich versuche über JavaScript mit einer PhoneGap App die Emotion Api anzurufen. Ich habe das Bild in base64 codiert und überprüft, dass die Daten von einem der Online-Tools entschlüsselt werden können. Dies ist der Code, den ich im Web gefunden habe.Emotion API Projekt Oxford base64 image

var apiKey = "e371fd4333ccad2"; // (Sie können einen kostenlosen Schlüssel vor Ort erhalten, der hier geändert wird)

// apiUrl: Die Basis-URL für die API. Finden Sie heraus, was dies für andere APIs ist über die API-Dokumentation var apiUrl = "https://api.projectoxford.ai/emotion/v1.0/recognize";

"Datei" ist die Base64-Zeichenfolge.

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); 

    } 

Ich habe dies zurück:

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 

Also habe ich versucht, ihre Konsole Testseite. https://dev.projectoxford.ai/docs/services/5639d931ca73072154c1ce89/operations/563b31ea778daf121cc3a5fa/console

Ich kann ein Bild wie Ihre "example.com/man.jpg" einfügen und es funktioniert super. aber wenn ich das gleiche Bild nehme und es als Basis 64 Bild kodiert habe, bekomme ich nur "Bad Body". Ich habe es sowohl als Inhaltstyp "application/octet-stream" als auch "application/json" probiert und bekomme den gleichen Fehler . Probe des codierten sieht like..and http Anfrage

POST https://api.projectoxford.ai/emotion/v1.0/recognize HTTP/1.1 Content-Type: application/octet-stream Host: api.projectoxford.ai Ocp-APIM-Abonnement-Key: ••• ••••••••••••••• Content-Length: 129420

Daten: image/jpeg; base64,/9j/4AAQSkZJRgABAQAASABIAAD/...

i zurück:

Pragma: no -cache Cache-Steuerung: no-cache Datum: Fr, 01 Apr 2016 16:23:09 GMT X-Powered-by: ASP.NET Inhaltslänge: 60 Content-Type: application/json; charset = UTF-8 Gültig bis:

-1

{ "error": { "Code": "BadBody" "message": "Invalid Gesichtsbild." } }

Ich bin jetzt nicht sicher, ob Sie ein Bild so oder nicht von Javascript senden können. Kann mir jemand sagen, ob mein Javascript korrekt ist oder ob es ein codiertes Base64-String-Bild an die Site senden kann.

Dank für Ihre Hilfe tim

Antwort

1

Diese API akzeptieren keine Daten URIs für Bilder. Was Sie tun müssen, ist es in einen binären Blob zu konvertieren. Obwohl diese answer für eine andere Project Oxford-API gilt, können Sie dieselbe Technik anwenden.

+0

danke, das war das Problem, mit dem Blob funktioniert es super ... wieder danke ... – user852566