使用Camera 2 API和Firebase,我们可以从相机预览流中检测人脸。以下代码段示例说明了如何确定与我们要使用的相机兼容的预览尺寸:
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、864x480、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检测器的需求?
谢谢!
使用Camera 2 API和Firebase,我们可以从相机预览流中检测人脸。以下代码段示例说明了如何确定与我们... ...>
谢谢你的问题!
基础模型需要较小的正方形图像(例如256 * 256之类的东西)。在运行模型之前,ML Kit会将输入图像的大小调整为较小的大小。我想在某些情况下,调整大小后的图像会失真得无法检测到脸部。如果您可以提供一些图像示例,那就太好了。