2016-06-21 59 views
0

因此,我在使用Microsoft的Emotion API for Android時遇到了問題。我沒有關於運行Face API的問題;我能夠得到臉部矩形,但我無法得到它在情緒api上的工作。我正在使用內置Android相機拍攝圖像。這裏是我使用的代碼:Microsoft API的問題

private void detectAndFrame(final Bitmap imageBitmap) 
{ 
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
    imageBitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream); 
    ByteArrayInputStream inputStream = 
      new ByteArrayInputStream(outputStream.toByteArray()); 
    AsyncTask<InputStream, String, List<RecognizeResult>> detectTask = 
      new AsyncTask<InputStream, String, List<RecognizeResult>>() { 
       @Override 
       protected List<RecognizeResult> doInBackground(InputStream... params) { 
        try { 
         Log.e("i","Detecting..."); 
         faces = faceServiceClient.detect(
           params[0], 
           true,   // returnFaceId 
           false,  // returnFaceLandmarks 
           null   // returnFaceAttributes: a string like "age, gender" 
         ); 
         if (faces == null) 
         { 
          Log.e("i","Detection Finished. Nothing detected"); 
          return null; 
         } 
         Log.e("i", 
           String.format("Detection Finished. %d face(s) detected", 
             faces.length)); 
         ImageView imageView = (ImageView)findViewById(R.id.imageView); 
         InputStream stream = params[0]; 
         com.microsoft.projectoxford.emotion.contract.FaceRectangle[] rects = new com.microsoft.projectoxford.emotion.contract.FaceRectangle[faces.length]; 
         for (int i = 0; i < faces.length; i++) { 
          com.microsoft.projectoxford.face.contract.FaceRectangle rect = faces[i].faceRectangle; 
          rects[i] = new com.microsoft.projectoxford.emotion.contract.FaceRectangle(rect.left, rect.top, rect.width, rect.height); 
         } 
         List<RecognizeResult> result; 
         result = client.recognizeImage(stream, rects); 
         return result; 
        } catch (Exception e) { 
         Log.e("e", e.getMessage()); 
         Log.e("e", "Detection failed"); 
         return null; 
        } 
       } 
       @Override 
       protected void onPreExecute() { 
        //TODO: show progress dialog 
       } 
       @Override 
       protected void onProgressUpdate(String... progress) { 
        //TODO: update progress 
       } 
       @Override 
       protected void onPostExecute(List<RecognizeResult> result) { 
        ImageView imageView = (ImageView)findViewById(R.id.imageView); 
        imageView.setImageBitmap(drawFaceRectanglesOnBitmap(imageBitmap, faces)); 
        MediaStore.Images.Media.insertImage(getContentResolver(), imageBitmap, "AnImage" ,"Another image"); 
        if (result == null) return; 
        for (RecognizeResult res: result) { 
         Scores scores = res.scores; 
         Log.e("Anger: ", ((Double)scores.anger).toString()); 
         Log.e("Neutral: ", ((Double)scores.neutral).toString()); 
         Log.e("Happy: ", ((Double)scores.happiness).toString()); 
        } 

       } 
      }; 
    detectTask.execute(inputStream); 
} 

我不斷收到錯誤發佈請求400,指示某種問題與JSON或面部矩形。但我不確定從哪裏開始調試此問題。

回答

1

您正在使用流兩次,所以第二次你已經在流的末尾。因此,您可以重置流,或者,只需調用情緒API而不使用矩形(即跳過面向API的調用)。情緒API將爲您確定面部矩形。