1

のvlaueを与えます。しかし、何か奇妙なことが起こる、私はいつも目が開いても-1として確率を得る。getIsLeftEyeOpenProbabilityは、私は目が開いているかどうかを知るために<code>mobile vision API</code>から<code>getIsLeftEyeOpenProbability</code>を使用しています-1

FaceDetector faceDetector = new FaceDetector.Builder(getApplicationContext()) 
              .setTrackingEnabled(false) 
              .setLandmarkType(FaceDetector.ALL_LANDMARKS) 
              .build(); 

Frame frame = new Frame.Builder().setBitmap(obtainedBitmap).build(); 
SparseArray <Face> facesForLandmarks = faceDetector.detect(frame); 
faceDetector.release(); 
Thread homeSwipeThread; 

for (int a = 0; a < facesForLandmarks.size(); a++) { 
    Face thisFace = facesForLandmarks.valueAt(a); 
    List <Landmark> landmarks = thisFace.getLandmarks(); 

    for (int b = 0; b < landmarks.size(); b++) { 
     if (landmarks.get(b).getType() == landmarks.get(b).LEFT_EYE) { 
      leftEye = new Point(landmarks.get(b).getPosition().x, landmarks.get(b).getPosition().y - 3); 
     } else if (landmarks.get(b).getType() == landmarks.get(b).RIGHT_EYE) { 
      rightEye = new Point(landmarks.get(b).getPosition().x, landmarks.get(b).getPosition().y - 3); 
     } //end else if. 
    } //end inner 
    //for every detected face check eyes probability: 

    if (thisFace.getIsLeftEyeOpenProbability() <= 0.1) { 
     //some code 
    } 
} 

このエラーが発生する理由、そしてどのように私はそれを解決することができます:ここで

は、コードのですか?

答えて

2

あなたは「setClassificationType」を経て、オープン/クローズの目を分類するための検出器オプションが欠落しています。それは「setClassificationType」のための暗黙の依存関係であるため、あなたは、このケースでは「setLandmarkType」を省略することができ

FaceDetector faceDetector = 
    new FaceDetector.Builder(getApplicationContext()) 
     .setTrackingEnabled(false) 
     .setLandmarkType(FaceDetector.ALL_LANDMARKS) 
     .setClassificationType(FaceDetector.ALL_CLASSIFICATIONS) 
     .build(); 

:faceDetectorは、次のように作成する必要があります。 UNCOMPUTED_PROBABILITYを取得

https://developers.google.com/android/reference/com/google/android/gms/vision/face/Face.html#public-methods

が戻って通常の目がなかったことを意味します。また

が、でもこのオプションを設定し、それはドキュメントに記載された「UNCOMPUTED_PROBABILITY」値は-1を取得することが可能です検出されたので、目が開いているか閉じているかを判断することはできません。だからあなたはこれを代わりにしたいと思う:

float leftOpen = thisFace.getIsLeftEyeOpenProbability(); 
if ((leftOpen != Face.UNCOMPUTED_PROBABILITY) && (leftOpen <= 0.1)) { 
    //some code 
} 
+0

ありがとうございました。しかし、この行のブールisLeftOpen = thisFace.getIsLeftEyeOpenProbability();浮動小数点数をブール値に変換できないため、私にエラーが発生します。この行の意味を明確にしてください。または、isLeftOpenが浮動小数点型であることを意味しましたか? – Dania

+1

それはタイプミスでした。それを私が直した。 – pm0733464

+0

ありがとう、それは非常にうまくいった。 – Dania

関連する問題

 関連する問題