2016-06-21 10 views
0

Android用のMicrosoftのEmotion APIを使用する際に問題が発生しました。私は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); 
} 

私はJSONや顔矩形の問題のいくつかの並べ替えを示す、エラーPOSTリクエスト400を得続ける:ここで私が使用していたコードです。しかし、私はこの問題のデバッグをどこで開始するのかは分かりません。

答えて

1

あなたは二回、ストリームを使用しているので、あなたの周りの二回目は、ストリームの終わりにすでにます。したがって、ストリームをリセットするか、長方形のない感情APIを呼び出すことができます(つまり、顔APIへの呼び出しをスキップします)。感情APIによって顔の四角形が決まります。

関連する問題