FaceDetector によって検出された顔のオイラー角を取得しようとしています。
Logcatへの出力に使用するものは次のとおりです。
Log.v("debug", " X: " + face.pose(Face.EULER_X) + " Y: " + face.pose(Face.EULER_Y) + " Z: " + face.pose(Face.EULER_Z) );
ただし、顔の角度に関係なく、3 つすべてに対して常に 0.0 を返します。理由はありますか?
FaceDetector によって検出された顔のオイラー角を取得しようとしています。
Logcatへの出力に使用するものは次のとおりです。
Log.v("debug", " X: " + face.pose(Face.EULER_X) + " Y: " + face.pose(Face.EULER_Y) + " Z: " + face.pose(Face.EULER_Z) );
ただし、顔の角度に関係なく、3 つすべてに対して常に 0.0 を返します。理由はありますか?
ええ、API 1 のFaceDetectorはポーズ角度を返しません。ソースコードを見て確認できます。
API 14の新しいFaceDetectionListenerはポーズ角度を返しますが、現時点では限られた数のデバイスでのみ使用できます。API 14 を実行しているすべてのデバイスでさえ、それを使用できるわけではありません。デバイスがその API をサポートしているかどうかを確認するには、getMaxNumDetectedFaces()を呼び出す必要があります。
または、OpenCV を使用してみることができます。そのためのいくつかのオプションはhttp://code.opencv.org/projects/opencv/wiki/OpenCV4Androidとhttp://code.google.com/p/javacv/です。私の経験では、ポーズ角度が本当に本当に必要でない限り、手間をかける価値はありません。
ここにいくつかの同様の質問があります。このリンクから最初の答えをチェックしてください:
AndroidFacedetectorのポーズ値は常に0です
そして、問題を解決したと言っている人については、以下を参照してください。
検出器setMode
をACCURATE_MODE
Kotlinで私のために働いた例を次に示します。
val detector = FaceDetector.Builder(context)
.setClassificationType(FaceDetector.ACCURATE_MODE)
.setMode(FaceDetector.ACCURATE_MODE)
.setTrackingEnabled(true)
.build()