2017-02-10 78 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

相關問題