2017-11-22 14 views
0

지난 2 일 이래로 무엇이 잘못되었는지 알아 내려고 노력하고 있습니까? 나는 Microsoft Cognitive Services를 사용하여 얼굴 인식을위한 Cordova android app 작업을하고 있습니다. 이미지 촬영을 위해 Cordova Camera 플러그인을 사용하고 작업 수행 (얼굴 감지, 식별 등)을 위해 JS를 사용하고 있습니다. 나는이 글에서 코드를 단계별로 설명 할 것이다. 그것이 내가 사용 코르도바 카메라 플러그인이기 때문에,JS의 Cordova Camera Plugin & MS-Cognitive Services를 사용한 얼굴 검출 (Face-API 호출)

<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"> 

그 표준 HTML 코드 후 캡처 사진의 디스플레이 버튼

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

지금 파일 코드 된 .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 인식 서비스를 사용하여 얼굴 인식을위한 Face API를 사용하여 아약스 호출을 작성하는 코드입니다 (FaceAPI 문서에서 바이너리 데이터 또는 Blob 또는 POST 메소드의 파일을 전송할 수 있음을 알고 있으므로 이미지를 바이너리 데이터로 변환) 여러분이 이해할 수 있도록 이미지 변환 코드와 아약스 코드를 함께 게시 할 예정입니다.

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

... 오해 등 오류 코드의 목록은 문서 here를 참조하십시오 InvalidImage, InvalidImageSize 같은 여러 가지 원인입니다 무슨 일이 있었는지 말씀에 대한 응답에 메시지가 있어야하고 메시지.