【问题标题】:Is there a way to know if a correct camera preview size will be compatible with the face detector (yield detected faces)有没有办法知道正确的相机预览尺寸是否与面部检测器兼容(产生检测到的面部)
【发布时间】: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


    【解决方案1】:

    感谢您的提问!

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

    在人脸检测器中,它也有一个face size option来选择感兴趣的人脸尺寸。因此,请确保人脸尺寸足够大,可以被检测到。

    【讨论】:

    • 谢谢!这可能为我指明了正确的方向,但还不是答案。您在哪里找到有关模型重新缩放方形图像的信息?这是在剪脸之前还是之后?我很期待前者是这样的。您提到的面部大小选项是一个相对设置,应该与预览大小无关。
    • 我来自 ML Kit 团队。我们将很快在我们的文档中提供有关预期图像大小的更多详细信息。在人脸检测之前调整整个图像的大小。
    • 太棒了!非常感谢您的工作。我会留意更新的文档。如果在此期间您可以与我分享任何内容(关于使用 ML 套件的最佳预览大小),它将对我的工作有所帮助。我对你所说的在人脸检测之前重新缩放整个图像感到惊讶,因为我可以成功地为距离他们的设备 2 米的人获得 eyeOpenProbability。如果图像是 256x256 像素,则没有足够的像素来分辨眼睛! :)
    猜你喜欢
    • 2021-07-15
    • 2017-08-06
    • 2012-03-14
    • 2017-12-09
    • 2021-07-25
    • 1970-01-01
    • 2023-03-02
    • 2012-05-07
    • 2018-04-17
    相关资源
    最近更新 更多