Android 有没有办法知道正确的摄像头预览尺寸是否与人脸检测器兼容(生成检测到的人脸)

Android 有没有办法知道正确的摄像头预览尺寸是否与人脸检测器兼容(生成检测到的人脸),android,firebase,face-detection,firebase-mlkit,Android,Firebase,Face Detection,Firebase Mlkit,使用Camera 2 API和Firebase,我们可以检测来自摄影机的预览流中的人脸。 以下代码片段是如何确定与要使用的相机兼容的预览大小的示例: Size[] cameraSupportedOutputSizes; StreamConfigurationMap map = ch.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); if(map != null) { cameraSup

使用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());

    }
现在,一旦我们打开相机并开始检测人脸,我们就会发现人脸检测器在预览尺寸方面是“挑剔”的。我可以告诉您一个事实,在许多情况下,除了最大预览大小和几种典型的预览大小(例如,但不限于16:9设备上的1280 x 720,或旧的4:3设备上的1024 x 768)之外,任何东西都可以正确实例化人脸检测器,但不会生成任何人脸。人脸检测任务侦听器将返回0个找到的人脸

有没有办法事先确定哪些预览尺寸适合Firebase探测器的喜好


谢谢大家!

谢谢你的提问

底层模型需要更小的方形图像(例如256*256)。在运行模型之前,ML Kit会将输入图像的大小调整为较小的大小。我想在某些情况下,调整大小后的图像太扭曲,无法检测人脸。如果您能提供一些图像示例,那就太好了


在人脸检测器中,它还可以选择感兴趣的人脸大小。因此,请确保面部大小足够大,可以检测到。

谢谢!这可能为我指明了正确的方向,但还不是完全正确的答案。您在哪里找到有关模型重缩放方形图像的信息?这是在修剪脸部之前还是之后完成的?我很希望前者是这样。您提到的面部大小选项是一个相对设置,应该独立于预览大小。我来自ML工具包团队。我们将很快在文档中提供有关预期图像大小的更详细信息。在人脸检测之前对整个图像进行了大小调整。太棒了!非常感谢你的工作。我会留意更新的文档。如果你有什么可以与我分享的同时(关于最佳预览大小与ML工具包工作),这将有助于我的工作。我对你所说的在人脸检测之前重新缩放整个图像感到惊讶,因为我可以成功地获得离设备2米远的人的睁眼概率。如果图像是256x256像素,那么就没有足够的像素来分辨眼睛
            faceDetectorFrameMetadata = new FirebaseVisionImageMetadata.Builder()
                .setRotation(correctRotation)
                .setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_NV21)
                .setHeight(previewSize.getHeight())
                .setWidth(previewSize.getWidth())
                .build();