#android #asynchronous #text #ocr #google-mlkit
#Android #асинхронный #текст #распознавание текста #google-mlkit
Вопрос:
Я использую mlkit от Google для распознавания текста, мне нужно, чтобы это было синхронизировано, а не асинхронно. я попытался добавить следующее, без каких-либо успехов, какие-либо предложения?
Thread thread = new Thread() {
@Override
public void run() {
try {
Tasks.await(result);
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
InputImage image = InputImage.fromBitmap(processedImageOfROI, 0);
TextRecognizer recognizer = TextRecognition.getClient();
Task<Text> result =
recognizer.process(image)
.addOnSuccessListener(new OnSuccessListener<Text>() {
@Override
public void onSuccess(Text visionText) {
handleTextRecognizerResult(visionText);
Log.e("Text recognition", "Successfully to detected text");
}
})
.addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.e("Text recognition", "Failed to detect text");
}
});
Ответ №1:
Вы можете звонить Tasks.await(result)
сразу после recognizer.process()
звонка.
Комментарии:
1. java.lang. Исключение IllegalStateException: не должно вызываться в основном потоке приложения по адресу com.google.android.gms.common.internal. Предварительные условия.checkNotMainThread(com.google.android.gms:play-services-basement@@17.6.0:3 ) в com.google.android.gms.common.internal. Предварительные условия.checkNotMainThread(com.google.android.gms:play-services-basement@@17.6.0:1 ) в com.google.android.gms.tasks. Задачи.ожидание (com.google.android.gms:play-services-tasks@@17.2.1:1 )
2. Это в основном означает, что вы не можете ждать в основном потоке. Поэтому, если вы хотите запустить обнаружение синхронно, запустите его в рабочем потоке вместо основного потока.