Android FaceDetectorOptions.setMinFaceSize()不工作

Android FaceDetectorOptions.setMinFaceSize()不工作,android,face-detection,firebase-mlkit,google-mlkit,Android,Face Detection,Firebase Mlkit,Google Mlkit,目前我在应用程序中使用ML工具包检测人脸。 它正在工作,但有一个问题。我想在上面设置最小的面部尺寸,但似乎没有效果。它总是检测一张脸,不管它有多大 这是我的密码: private fun setupCamera(cameraProviderFuture: ListenableFuture<ProcessCameraProvider>, mainView: MainView) { val cameraProvider = cameraProviderFuture.get()

目前我在应用程序中使用ML工具包检测人脸。 它正在工作,但有一个问题。我想在上面设置最小的面部尺寸,但似乎没有效果。它总是检测一张脸,不管它有多大

这是我的密码:

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)
    }
}
private fun setupCamera(cameraProviderFuture:ListenableFuture,mainView:mainView){
val cameraProvider=cameraProviderFuture.get()
preview=preview.Builder().build()
val cameraSelector=cameraSelector.Builder().requirensFacing(cameraSelector.LENS_-FACING_-FRONT).build()
val realTimeOpts=FaceDetectorOptions.Builder()
.setPerformanceMode(FaceDetectorOptions.PERFORMANCE\u MODE\u FAST)
.setMinFaceSize(0.5f)
.enableTracking()
.build()
detector=FaceDetection.getClient(realTimeOpts)
val imageAnalysis=imageAnalysis.Builder()
.SetbackPressureStragy(图像分析。策略\u仅保留\u最新)
.build()
.apply{setAnalyzer(Executors.newSingleThreadExecutor(),FaceDetectAnalyzer(detector!!,mainView))}
试一试{
cameraProvider.unbindAll()
camera=cameraProvider.bindToLifecycle(作为生命周期所有者、cameraSelector、图像分析、预览)
预览?.setSurfaceProvider(binding.pvCameraPreview.createSurfaceProvider())
}捕获(e:例外){
Log.e(标记“用例绑定失败”,e)
}
}

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

这是真的,图像大小不是一个硬限制,这就是为什么我们把评论放在

“这不是对面大小的硬性限制;探测器可能会发现面稍小于规定的面。”


如果你只对较大的脸感兴趣,你可以增加minFaceSize。或者你也可以对你这边的尺寸进行过滤。通过增加minFaceSize,性能将得到改善。

确实如此,图像大小不是一个硬限制,这就是为什么我们将注释放在中的原因

“这不是对面大小的硬性限制;探测器可能会发现面稍小于规定的面。”


如果你只对较大的脸感兴趣,你可以增加minFaceSize。或者你也可以对你这边的尺寸进行过滤。通过增加minFaceSize,性能将得到改善。

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