Распознавание текста в Firebase Cloud - PullRequest
0 голосов
/ 31 января 2019

Я получаю следующую ошибку при попытке использовать облачный API для распознавания текста:

W/System.err: com.google.firebase.ml.common.FirebaseMLException: Internal error has occurred when executing Firebase ML tasks
        at com.google.android.gms.internal.firebase_ml.zzmy.zza(Unknown Source:35)
        at com.google.android.gms.internal.firebase_ml.zzmz.run(Unknown Source:2)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at com.google.android.gms.internal.firebase_ml.zze.dispatchMessage(Unknown Source:6)
        at android.os.Looper.loop(Looper.java:280)
        at android.os.HandlerThread.run(HandlerThread.java:65)
    Caused by: java.lang.NullPointerException: The input TextAnnotation can not be null
        at com.google.android.gms.common.internal.Preconditions.checkNotNull(Unknown Source:11)
        at com.google.android.gms.internal.firebase_ml.zzpj.zzb(Unknown Source:1)
        at com.google.android.gms.internal.firebase_ml.zzpf.zza(Unknown Source:38)
        at com.google.android.gms.internal.firebase_ml.zzoo.zza(Unknown Source:23)
        at com.google.android.gms.internal.firebase_ml.zznd.call(Unknown Source:4)
        at com.google.android.gms.internal.firebase_ml.zzmy.zza(Unknown Source:29)
        ... 6 more

Я создаю детектор как

    private FirebaseVisionTextRecognizer cloudDetector = FirebaseVision.getInstance().getCloudTextRecognizer();

и вызываю детектор, используя:

FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(bm);
        Task<FirebaseVisionText> result =
                cloudDetector.processImage(image)
                        .addOnSuccessListener(new OnSuccessListener<FirebaseVisionText>() {
                            @Override
                            public void onSuccess(FirebaseVisionText firebaseVisionText) {
                                String text = firebaseVisionText.getText();
                                mFragment.setDetectedText(text);

                                // toggle isDetecting after 0.5 s. Do not want the textview to flickr to much
                                final Handler handler = new Handler();
                                handler.postDelayed(new Runnable() {
                                    @Override
                                    public void run() {
                                        isDetecting = false;
                                    }
                                }, delayTime);
                            }
                        })
                        .addOnFailureListener(
                                new OnFailureListener() {
                                    @Override
                                    public void onFailure(@NonNull Exception e) {
                                        // Task failed with an exception
                                        // ...
                                        Log.d("DETECTING", e.getMessage());
                                        e.printStackTrace();
                                    }
                                });

Я включил облачный API в консоли Firebase.Более того, текстовый детектор на устройстве работает на отлично.Я также не вижу никакой разницы между моим кодом и примером кода здесь .Кто-нибудь испытывал это?

1 Ответ

0 голосов
/ 22 февраля 2019

Очевидно, что Firebase обрабатывает изображения без текста в cloudDetector по-разному по сравнению с deviceDetector.

deviceDetctor переходит в onSuccess, но cloudDetector создает исключение NullPtrException и переходит в onFailure.Поскольку я переключил логическое значение в onSuccess, но не в onFailure, cloudDetector больше никогда не вызывался.Теперь я также переключаю логическое значение в onFailure, и это работает.

С учетом вышесказанного глупо иметь другое поведение для изображений без текста.Если текст не обнаружен, ничего не пошло не так, поэтому выбрасывать исключение не представляется целесообразным.

...