FaceDetectorOptions.setMinFaceSize() 不起作用

Posted

技术标签:

【中文标题】FaceDetectorOptions.setMinFaceSize() 不起作用【英文标题】:FaceDetectorOptions.setMinFaceSize() is not working 【发布时间】:2020-11-27 08:31:49 【问题描述】:

目前我正在使用 ML Kit 在我的应用程序中检测人脸。 它工作,但有一个问题。我想在它上面设置最小的脸尺寸,但它似乎没有效果。无论人脸大小,它总是会检测到人脸。

这是我的代码:

private fun setupCamera(cameraProviderFuture: ListenableFuture<ProcessCameraProvider>, mainView: MainView) 
    val cameraProvider = cameraProviderFuture.get()

    preview = Preview.Builder().build()

    val cameraSelector = CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_FRONT).build()

    val realTimeOpts = FaceDetectorOptions.Builder()
        .setPerformanceMode(FaceDetectorOptions.PERFORMANCE_MODE_FAST)
        .setMinFaceSize(0.5f)
        .enableTracking()
        .build()

    detector = FaceDetection.getClient(realTimeOpts)

    val imageAnalysis = ImageAnalysis.Builder()
        .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
        .build()
        .apply  setAnalyzer(Executors.newSingleThreadExecutor(), FaceDetectAnalyzer(detector!!, mainView))

    try 
        cameraProvider.unbindAll()

        camera = cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, imageAnalysis, preview)
        preview?.setSurfaceProvider(binding.pvCameraPreview.createSurfaceProvider())
     catch (e: Exception) 
        Log.e(TAG, "Use case binding failed", e)
    

有人能给我点线索或建议吗?谢谢。

【问题讨论】:

【参考方案1】:

确实如此,图片大小不是硬性限制,这就是我们将评论放在java doc的原因。

"这不是对人脸大小的硬性限制;检测器可能会发现比指定的人脸稍小。"

如果您只对较大的面孔感兴趣,则可以增加 minFaceSize。或者您可以对最终的尺寸进行过滤。通过增加 minFaceSize,性能将会得到提升。

【讨论】:

你的意思是只和性能有关吗?因为我试图将它设置为最大(1.0f),但它仍然无法正常工作。无论人脸有多小,它总是能检测到人脸。 是的,现在主要是为了提高性能。我们在扫描图像时使用它来决定块大小。它不能直接用于过滤掉人脸大小,我们可以改进。如果您确实想过滤掉小人脸,您可能需要使用返回边界框大小在应用程序大小中过滤掉。 我明白了。所以现在,我可以通过使用边界框大小的宽度来过滤它。谢谢。 @Shiyu 为什么不能在文档中解释它不能用于按大小过滤人脸?

以上是关于FaceDetectorOptions.setMinFaceSize() 不起作用的主要内容,如果未能解决你的问题,请参考以下文章