У меня есть код для анализа изображений, и я пытаюсь передать список обработанных текстовых данных в ViewModel. Текст распознается, но не отправляется должным образом в ViewModel. Я зарегистрировал данные, и анализ изображений распознает текст, обработает его, сопоставит со списком и успешно обновит _detectedText.value. Однако когда я регистрирую ViewModel, он сначала получает данные, но затем останавливается. Я не знаю, что делать — я работаю над этим уже около двух недель.
Код анализа изображений:
class TextRecognitionAnalyzer: ImageAnalysis.Analyzer {
//Throttling time for the text recognition 1000L - 1 second
companion object {
const val THROTTLE_TIMEOUT_MS = 1_000L
}
//defining the coroutine scope and the text recognizer
private val scope: CoroutineScope = CoroutineScope(Dispatchers.IO + SupervisorJob())
private val textRecognizer: TextRecognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
// StateFlow to hold the detected text
private val _detectedText = MutableStateFlow(emptyList())
val detectedText: StateFlow get() = _detectedText
@androidx.annotation.OptIn(ExperimentalGetImage::class)
override fun analyze(imageProxy: ImageProxy) {
scope.launch {
val mediaImage: Image = imageProxy.image ?: run { imageProxy.close(); return@launch }
val inputImage: InputImage = InputImage.fromMediaImage(mediaImage, imageProxy.imageInfo.rotationDegrees)
suspendCoroutine { continuation ->
textRecognizer.process(inputImage)
.addOnSuccessListener { visionText: Text ->
// Process and update detected text
Log.d("TextRecognitionAnalyzer", "Detected Text: ${visionText.text}")
_detectedText.value = ProcessDetectedText(visionText).processText().toList()
Log.d("TextRecognitionAnalyzer state flow", "Detected Text in State: ${_detectedText.value}")
}
.addOnCompleteListener {
continuation.resume(Unit)
}
}
delay(THROTTLE_TIMEOUT_MS)
}.invokeOnCompletion { exception ->
exception?.printStackTrace()
imageProxy.close()
}
}
}
Код модели просмотра:
@HiltViewModel
class ClassRoomAddViewModel @Inject constructor(
private val textRecognitionAnalyzer: TextRecognitionAnalyzer
) : ViewModel() {
private val _addClassRoomState = MutableStateFlow(AddClassRoomState())
val addClassRoomState: StateFlow = _addClassRoomState
init {
Log.d("ViewModel", "Analyzer injected: $textRecognitionAnalyzer")
collectDetectedText()
Log.d("ViewModel", "Initialized ViewModel")
}
private fun collectDetectedText() {
viewModelScope.launch {
textRecognitionAnalyzer.detectedText.collect { updatedText ->
Log.d("ViewModel", "Collected Detected Text: $updatedText")
_addClassRoomState.value = _addClassRoomState.value.copy(
detectedText = updatedText
)
Log.d("ViewModel", "State Updated: ${_addClassRoomState.value}")
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... -viewmodel
Мой State Flow не обновляет значения в модели представления ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
JetPack Compose TextField State не обновляет пользовательский интерфейс при наборах
Anonymous » » в форуме Android - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-