Как я могу использовать два детектора Ml Kit одновременно

Я хочу использовать в своем приложении теги к изображениям и распознавание текста одновременно. Имею следующее:

      fun initAnalyzer(cameraExecutor: Executor) {
        imageAnalyzer = ImageAnalysis.Builder().build().also { imageAnalysis ->
            imageAnalysis.setAnalyzer(
                    cameraExecutor,
                    ImageMLAnalyzer { image, imageProxy, machineLearningUtils ->
                        textClassifier?.processImageWithText(image,
                                onSuccess = { result ->
                                    val resultString = processLineText(result)
                                    if (TextRecognitionClassifier.NORESULT !=
                                            resultString &&
                                            !isProcessingImage) {
                                        processAnalyzedResult(resultString)

                                    } else {
                                        imageClassifier?.processImage(image,
                                                onSuccess = { labelProbList ->
                                                    val labelResult = processResult(labelProbList)
                                                    if (ImageClassifier.NORESULT != labelResult &&
                                                            !isProcessingImage) {
                                                        openWebView(labelResult)
                                                    }
                                                    machineLearningUtils.analyzing(false)
                                                    imageProxy.close()

                                                }, onFailure = {
                                            machineLearningUtils.analyzing(false)
                                            imageProxy.close()
                                        })
                                    }
                                    machineLearningUtils.analyzing(false)
                                    imageProxy.close()

                                }, onFailure = {
                            machineLearningUtils.analyzing(false)
                            imageProxy.close()
                        })
                    })
        }
    }

Проблема в том, что, во-первых, я не использую их одновременно, а во-вторых, я получаю сообщение об ошибке, когда вхожу в детектор изображений, который говорит:

      com.google.firebase.ml.common.FirebaseMLException: No image data found.

1 ответ

Отвечаю сам, решил с помощью логического:

      fun initAnalyzer(cameraExecutor: Executor) {
        imageAnalyzer = ImageAnalysis.Builder().build().also { imageAnalysis ->
            imageAnalysis.setAnalyzer(
                    cameraExecutor,
                    ImageMLAnalyzer { image, imageProxy, machineLearningUtils ->
                        if (!useNextDetector) {
                            textClassifier?.processImageWithText(image,
                                    onSuccess = { result ->
                                        val resultString = processLineText(result)
                                        if (TextRecognitionClassifier.NORESULT !=
                                                resultString &&
                                                !isProcessingImage) {
                                            processAnalyzedResult(resultString)
                                        }
                                        useNextDetector = true
                                        machineLearningUtils.analyzing(false)
                                        imageProxy.close()

                                    }, onFailure = {
                                machineLearningUtils.analyzing(false)
                                imageProxy.close()
                            })

                        } else {
                            imageClassifier?.processImage(image,
                                    onSuccess = { labelProbList ->
                                        val result = processResult(labelProbList)
                                        if (ImageClassifier.NORESULT != result &&
                                                !isProcessingImage) {
                                            openWebView(result)
                                        }
                                        useNextDetector = false
                                        machineLearningUtils.analyzing(false)
                                        imageProxy.close()

                                    }, onFailure = {
                                machineLearningUtils.analyzing(false)
                                imageProxy.close()
                            })
                        }
                    })
        }
    }

Это сработало для меня, поскольку он анализирует, пока не находит что-то, что «работает для него», и использует это. Если вы можете придумать лучший способ, я слушаю.

Другие вопросы по тегам