синхронный запуск распознавания текста Google mlkit

#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. Это в основном означает, что вы не можете ждать в основном потоке. Поэтому, если вы хотите запустить обнаружение синхронно, запустите его в рабочем потоке вместо основного потока.