2017-11-22 8 views
0

私は最後の2日間から何がうまくいかなかったのか把握しようとしていますか?私は、Microsoft Cognitive Servicesを使用して、顔認識のためにCordovaアンドロイドアプリを開発しています。画像を撮るために、私はCordova Cameraプラグインを使用して操作を実行しました(顔の検出、識別など)。私はJSを使用しています。この記事では、コードをステップごとに説明します。ここ は私のコンテンツセキュリティポリシーである:キャプチャ画像の表示ボタンJSのCordova Camera Plugin&MS認知サービスを使用した顔検出(Face-API呼び出し)

<button id="take-picture-button">Take Picture</button> 

ため、標準のHTMLコードの後

<meta http-equiv="Content-Security-Policy" content="media-src * blob:; script-src 'self' 'unsafe-inline' 'unsafe-eval' *; style-src 'self' 'unsafe-inline' *"> 
<meta name="format-detection" content="telephone=no"> 
<meta name="msapplication-tap-highlight" content="no"> 
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width"> 

が今することができます、それは私が使用コルドバカメラプラグインですので、ファイルのコードを.jsファイルに来ていくつかの事前定義されたイベント:

bindEvents: function() { 
    document.addEventListener('deviceready', this.onDeviceReady, false); 
    document.addEventListener('pause', this.onPause, false); 
    document.addEventListener('resume', this.onResume, false); 
}, 
onDeviceReady: function() { 
    document.getElementById("take-picture-button").addEventListener("click", function() { 
     appState.takingPicture = true; 
     navigator.camera.getPicture(cameraSuccessCallback, cameraFailureCallback, 
      { 
       sourceType: Camera.PictureSourceType.CAMERA, 
       destinationType: Camera.DestinationType.FILE_URI, 
       targetWidth: 500, 
       targetHeight: 500 
      });  }); 
}, 

その後onPause:関数(){} & onResume:関数(){} 次は、MS-Cognitiveサービスの顔検出用Face APIを使用してajax呼び出しを行うコードです(FaceAPIドキュメントからは、BinaryデータまたはBlobまたはFileをPOSTメソッドで送信できることがわかったので、画像をバイナリデータに変換する)画像変換コードとAjaxコードを一緒に投稿して、皆さんが理解できるようにします。さて、上記のコードの出力は「顔に失敗さ

var img = new Image(); 
img.src = imageUri; // System Path (eg: file:///storage/android/.......) 

    var canvas = document.createElement("canvas"); 
    canvas.width = $(window).width(); 
    canvas.height = $(window).height(); 

    var ctx = canvas.getContext("2d"); 
    img.onload = function() { 
     ctx.drawImage(img, 0, 0); 
    } 
    var dataURL = canvas.toDataURL("image/jpeg"); 

    var data = dataURL.split(',')[1]; 
    var mimeType = dataURL.split(';')[0].slice(5) 
    var bytes = window.atob(data); 
    var buf = new ArrayBuffer(bytes.length); 
    var byteArr = new Uint8Array(buf); 

    for (var i = 0; i < bytes.length; i++) { 
     byteArr[i] = bytes.charCodeAt(i); 
    } 

var params = { 
    "returnFaceId": "true", 
    "returnFaceLandmarks": "false", 
    "returnFaceAttributes": "age", 
}; 

var faceIds = new Array(); 
$.ajax({ 
    url: "https://australiaeast.api.cognitive.microsoft.com/face/v1.0/detect?" + $.param(params), 
    beforeSend: function (xhrObj) { 
     xhrObj.setRequestHeader("Content-Type", "application/octet-stream"); 
     xhrObj.setRequestHeader("Ocp-Apim-Subscription-Key", "API_KEY"); 
    }, 
    type: "POST", 
    data: byteArr, 
    processData: false, 
}) 
    .done(function (data) { 
      for (var i = 0; i < data.length; i++) { 
       faceIds.push(data.faceId); 
       alert("FaceID at index"+ i+" is " + JSON.stringify(data.faceId[i])); 
      } 
    }) 
    .fail(function (jqXHR, textStatus, errorThrown) { 
     alert("Failed in Face Detect, Details: Status:: " + jqXHR.status + " ResponseText:: " + jqXHR.statusText + ""); 
    }); 

検出、詳細:ステータス:: 400 ResponseText ::不正な要求 私は変更を加える必要があるか、私は何も欠けたところ、私は理解していないのです ?助けてください。 サンキュー

答えて

0

wrong.There等のエラーコードのリストについては、ドキュメントhereを参照してくださいInvalidImage、InvalidImageSizeのようないくつかの原因、ある行って何を伝えるために応答したメッセージがあるはずですし、メッセージ。

関連する問題