我正在使用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.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;
}
问题是x
和y
有时不正确,甚至是否定的。我知道要获得正确的坐标,它应该以某种方式旋转,但究竟是怎么回事?
答案 0 :(得分:1)
如果面部延伸超出图像的顶部和/或左边缘,则这些坐标可能为负。即使头部可能不完全在照片内,人脸检测器也会根据可见内容估计超出图像边界的脸部边界框。
坐标应相对于图像正确。但是,如果要从前置摄像头进行预览,请注意此预览会反转显示(如镜像)。在这种情况下,您需要反转坐标以便在预览上绘制。请参阅此处的示例: