Android 如何正确转换前摄像头检测到的人脸坐标

Android 如何正确转换前摄像头检测到的人脸坐标,android,google-vision,Android,Google Vision,我在Android上使用谷歌视觉进行人脸检测。当前我的代码: 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.v

我在Android上使用谷歌视觉进行人脸检测。当前我的代码:

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; 
}
public void onPreviewFrame(字节[]数据,摄像头){
//从用于人脸识别的相机帧创建Google Vision帧
com.google.android.gms.vision.Frame=new com.google.android.gms.vision.Frame.Builder()
.setImageData(ByteBuffer.wrap(数据),预览宽度,
预览视图,图像格式.NV21)
.setId(frameId++)
.setRotation(com.google.android.gms.vision.Frame.ROTATION_270)
.setTimestampMillis(lastTimestamp).build();
//识别画面中的人脸
SparseArray faces=检测器。检测(帧);
//错误坐标
float x=faces.valueAt(0.getPosition().x;
float y=faces.valueAt(0.getPosition().y;
}

问题是
x
y
不正确,有时甚至是负面的。我知道,为了获得正确的坐标,应该以某种方式旋转,但具体如何旋转?

如果面延伸到图像的顶部和/或左边缘之外,这些坐标可能是负数。即使头部可能不完全在照片内,人脸检测器也会根据可见内容估计超出图像边界的人脸边界框

相对于图像,坐标应正确。但是,如果在前向摄影机的预览上绘制,请注意,此预览显示为反向(如镜像)。在这种情况下,您需要反转上的坐标,以便在预览中绘制。请参见如何在此处执行此操作的示例:

这是有道理的。