2017-02-10 8 views
0

私はAndroidで顔検出にGoogle Visionを使用しています。現在、私のコード:検出された顔の座標を正面カメラから正しく翻訳する方法

public void onPreviewFrame(byte[] data, Camera camera) { 

     // creating Google Vision frame from a camera frame for face recognition 
     com.google.android.gms.vision.Frame frame = new com.google.android.gms.vision.Frame.Builder() 
       .setImageData(ByteBuffer.wrap(data), previewWidth, 
         previewHeight, ImageFormat.NV21) 
       .setId(frameId++) 
       .setRotation(com.google.android.gms.vision.Frame.ROTATION_270) 
       .setTimestampMillis(lastTimestamp).build(); 

     // recognize the face in the frame 
     SparseArray<Face> faces = detector.detect(frame); 

     // wrong coordinates 
     float x = faces.valueAt(0).getPosition().x; 
     float y = faces.valueAt(0).getPosition().y; 
} 

問題がxyは時々正しいとしてもマイナスではないということです。私はそれが何とか回転する必要がありますが、正確な座標を得ることを知っているが、正確にどのように?

+0

http://stackoverflow.com/questions/39281320/how-to-detect-the-corners-center-xy-coordinates-using-googles-:これはここで行われている方法の例を参照してください。 face-apiこれは理にかなっています。 – bvk256

答えて

1

これらの座標は、顔が画像の上端および/または左端を超えている場合は負になります。頭が写真の中に完全には入っていない場合でも、顔検出器は、目に見えるものに基づいて画像境界を超えて顔の境界ボックスを推定します。

座標は画像に対して正しいはずです。ただし、正面カメラからプレビューを描画している場合は、このプレビューが反転して表示されます(鏡像など)。この場合、プレビューを描画するために座標を逆にする必要があります。

https://github.com/googlesamples/android-vision/blob/master/visionSamples/FaceTracker/app/src/main/java/com/google/android/gms/samples/vision/face/facetracker/ui/camera/GraphicOverlay.java#L101

関連する問題