У меня есть код для анализа изображений, и я пытаюсь передать список обработанных текстовых данных в модель представления. Текст распознается, но не отправляется должным образом в модель представления. Я зарегистрировал данные, и анализ изображений распознает текст, обработает его, сопоставит со списком и успешно обновит _detectedText.value. Однако когда я регистрирую модель представления, она сначала получает данные, но затем останавливается. Я не знаю, что делать — я работаю над этим уже около двух недель.
Код анализа изображения:
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
Форум для тех, кто программирует под Android
-
Anonymous
1761162212
Anonymous
У меня есть код для анализа изображений, и я пытаюсь передать список обработанных текстовых данных в модель представления. Текст распознается, но не отправляется должным образом в модель представления. Я зарегистрировал данные, и анализ изображений распознает текст, обработает его, сопоставит со списком и успешно обновит _detectedText.value. Однако когда я регистрирую модель представления, она сначала получает данные, но затем останавливается. Я не знаю, что делать — я работаю над этим уже около двух недель.
Код анализа изображения:
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}")
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79226421/my-state-flow-wont-update-the-values-in-the-viewmodel[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия