Как я могу использовать два детектора 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()
})
}
})
}
}
Это сработало для меня, поскольку он анализирует, пока не находит что-то, что «работает для него», и использует это. Если вы можете придумать лучший способ, я слушаю.