问题描述
我想在我的应用程序中同时使用图像标记和文本识别。我有以下几点:
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.
解决方法
我自己回答,我已经用布尔值解决了:
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()
})
}
})
}
}
它对我有用,因为它会分析直到找到“适合它”的东西并使用它,如果你能想到更好的方法,我会倾听。