【发布时间】:2020-07-29 23:16:16
【问题描述】:
使用 Camera 2 API 和 Firebase,我们可以在来自摄像头的预览流中检测人脸。 以下 sn-p 是我们如何确定与我们要使用的相机兼容的预览尺寸的示例:
Size[] cameraSupportedOutputSizes;
StreamConfigurationMap map = ch.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
if(map != null) {
cameraSupportedOutputSizes = map.getOutputSizes(SurfaceTexture.class);
List<Size> sizes = Arrays.asList(cameraSupportedOutputSizes);
Log.e(TAG, Arrays.asList(cameraSupportedOutputSizes).toString());
}
这将产生以下输出(例如):
[960x720,640x640,800x480,720x480,768x432,640x480,480x640,576x432,640x360,480x360,480x320,384x288,352x288,320x240,240x320,240x160,176x144,144x176,160x120]
让我们说,为了优化性能,我们选择较小的预览尺寸之一,例如 800x480,并像这样配置我们的 Firebase 人脸检测器元:
faceDetectorFrameMetadata = new FirebaseVisionImageMetadata.Builder()
.setRotation(correctRotation)
.setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_NV21)
.setHeight(previewSize.getHeight())
.setWidth(previewSize.getWidth())
.build();
现在,一旦我们打开相机并开始检测人脸,我们会发现人脸检测器在预览尺寸方面是“挑剔的”。我可以告诉你一个事实,在许多情况下,除了最大的预览尺寸和几个典型的预览尺寸(例如,但不限于 16:9 设备上的 1280 x 720 或旧 4:3 设备上的 1024 x 768 ) 将允许正确实例化人脸检测器,但不会产生任何人脸。人脸检测任务监听器将返回 0 个找到的人脸。
有没有办法预先确定哪种预览尺寸适合 Firebase 检测器的喜好?
谢谢!
【问题讨论】:
标签: android firebase face-detection firebase-mlkit