0

目前我正在使用 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)
    }
}

有人可以指出我的任何线索或建议吗?谢谢你。

4

1 回答 1

2

确实如此,图像大小不是硬性限制,这就是我们将注释放在java doc中的原因。

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

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

于 2020-08-08T02:30:24.973 回答