web-dev-qa-db-ja.com

Android Studio MLキットはOCRモジュールをロードできません

私はAndroidアプリに取り組んでいます。設定方法について チュートリアル を試してみましたAndroid Studio to次に、Firebaseを操作します。次に、テキスト認識APIを使用します。ボタンクリックリスナーにあるコードは次のとおりです。

        FirebaseVisionTextRecognizer detector = FirebaseVision.getInstance()
            .getOnDeviceTextRecognizer();
        Task<FirebaseVisionText> result = detector.processImage(
            FirebaseVisionImage.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.test))
        )
            .addOnSuccessListener(new OnSuccessListener<FirebaseVisionText>() {
                @Override
                public void onSuccess(FirebaseVisionText firebaseVisionText) {
                    System.out.println(firebaseVisionText);
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    e.printStackTrace();
                }
            });

次のログが表示されます。

W/DynamiteModule: Local module descriptor class for com.google.Android.gms.vision.dynamite.ocr not found.
I/DynamiteModule: Considering local module com.google.Android.gms.vision.dynamite.ocr:0 and remote module com.google.Android.gms.vision.dynamite.ocr:0
D/TextNativeHandle: Cannot load feature, fall back to load dynamite module.
W/DynamiteModule: Local module descriptor class for com.google.Android.gms.vision.ocr not found.
I/DynamiteModule: Considering local module com.google.Android.gms.vision.ocr:0 and remote module com.google.Android.gms.vision.ocr:0
E/Vision: Error loading module com.google.Android.gms.vision.ocr optional module true: com.google.Android.gms.dynamite.DynamiteModule$LoadingException: No acceptable module found. Local version is 0 and remote version is 0.
D/TextNativeHandle: Broadcasting download intent for dependency ocr
W/TextNativeHandle: Native handle not yet available. Reverting to no-op handle.
W/DynamiteModule: Local module descriptor class for com.google.Android.gms.vision.dynamite.ocr not found.
I/DynamiteModule: Considering local module com.google.Android.gms.vision.dynamite.ocr:0 and remote module com.google.Android.gms.vision.dynamite.ocr:0
D/TextNativeHandle: Cannot load feature, fall back to load dynamite module.
W/DynamiteModule: Local module descriptor class for com.google.Android.gms.vision.ocr not found.
I/DynamiteModule: Considering local module com.google.Android.gms.vision.ocr:0 and remote module com.google.Android.gms.vision.ocr:0
E/Vision: Error loading module com.google.Android.gms.vision.ocr optional module true: com.google.Android.gms.dynamite.DynamiteModule$LoadingException: No acceptable module found. Local version is 0 and remote version is 0.
W/System.err: com.google.firebase.ml.common.FirebaseMLException: Waiting for the text recognition model to be downloaded. Please wait.
        at com.google.Android.gms.internal.firebase_ml.zzrw.zzd(com.google.firebase:firebase-ml-vision@@24.0.0:21)
        at com.google.Android.gms.internal.firebase_ml.zzrw.zza(com.google.firebase:firebase-ml-vision@@24.0.0:39)
        at com.google.Android.gms.internal.firebase_ml.zzpd.zza(com.google.firebase:firebase-ml-common@@22.0.0:31)
        at com.google.Android.gms.internal.firebase_ml.zzpf.call(Unknown Source:8)
        at com.google.Android.gms.internal.firebase_ml.zzoz.zza(com.google.firebase:firebase-ml-common@@22.0.0:32)
        at com.google.Android.gms.internal.firebase_ml.zzoy.run(Unknown Source:4)
        at Android.os.Handler.handleCallback(Handler.Java:873)
W/System.err:     at Android.os.Handler.dispatchMessage(Handler.Java:99)
        at com.google.Android.gms.internal.firebase_ml.zze.dispatchMessage(com.google.firebase:firebase-ml-common@@22.0.0:6)
        at Android.os.Looper.loop(Looper.Java:193)
        at Android.os.HandlerThread.run(HandlerThread.Java:65)

これらのエラーを修正する方法を確認するためにググった。

W/DynamiteModule: Local module descriptor class for com.google.Android.gms.vision.dynamite.ocr not found.
I/DynamiteModule: Considering local module com.google.Android.gms.vision.dynamite.ocr:0 and remote module com.google.Android.gms.vision.dynamite.ocr:0
D/TextNativeHandle: Cannot load feature, fall back to load dynamite module.
W/DynamiteModule: Local module descriptor class for com.google.Android.gms.vision.ocr not found.
I/DynamiteModule: Considering local module com.google.Android.gms.vision.ocr:0 and remote module com.google.Android.gms.vision.ocr:0
E/Vision: Error loading module com.google.Android.gms.vision.ocr optional module true: com.google.Android.gms.dynamite.DynamiteModule$LoadingException: No acceptable module found. Local version is 0 and remote version is 0.
W/System.err: com.google.firebase.ml.common.FirebaseMLException: Waiting for the text recognition model to be downloaded. Please wait.

これまでのところ、Google Play Servicesデータ(バージョン19.4.20)のクリア、エミュレーターの再起動/再作成、Gradle構成の微調整(例:firebase-core依存関係の追加/削除)を試しました。プロジェクトレベルの構成:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        google()
        jcenter()

    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:3.5.1'
        classpath 'com.google.gms:google-services:4.3.2'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()

    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

アプリモジュールレベルの設定:

apply plugin: 'com.Android.application'

Android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
        applicationId "com.example.user.app"
        minSdkVersion 24
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.google.Android.gms:play-services-vision:19.0.0'
    implementation 'com.google.firebase:firebase-ml-vision:24.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

}

apply plugin: 'com.google.gms.google-services'

Barcode APIを試してみることにし、追加しました

implementation 'com.google.firebase:firebase-ml-vision-barcode-model:16.0.1'

依存関係として。驚いたことに、API呼び出しを行うと、成功リストにヒットし、次のログが表示されました。

I/DynamiteModule: Considering local module com.google.firebase.ml.vision.dynamite.barcode:10000 and remote module com.google.firebase.ml.vision.dynamite.barcode:0
    Selected local version of com.google.firebase.ml.vision.dynamite.barcode
W/is.moneytravel: Accessing hidden field Ljava/nio/Buffer;->address:J (light greylist, reflection)
I/tflite: Initialized TensorFlow Lite runtime.
I/native: barcode_detector_client.cc:222 Not using NNAPI

OCR APIはまだ同じエラーを生成しましたが。ライブラリの取得元のリポジトリを処理する必要があると思います。バーコードAPI:

Considering local module com.google.firebase.ml.vision.dynamite.barcode:10000 and remote module com.google.firebase.ml.vision.dynamite.barcode:0

OCR API:

Considering local module com.google.Android.gms.vision.dynamite.ocr:0 and remote module com.google.Android.gms.vision.dynamite.ocr:0

これを理解するには、GradleとFirebaseの経験がほとんどありません。 OCR APIがAndroid.gmsからフェッチされるのに、Barcode APIはfirebase.mlからフェッチされるのはなぜですか?

2
Big Monday

解決策は、Google Play開発者サービスアプリを更新することでした。 API 29エミュレータに最新のGoogle Play開発者サービスがインストールされていることを期待していたので、最初はこれをオプションとは考えていませんでした。エミュレーターでGoogle Playにサインインし、Google Play開発者サービスを検索してアンインストールし(「更新」オプションはありませんでした)、再度インストールしました。インストールされているバージョンは19.4.20ただし、テキスト認識は期待どおりに機能し始めました。ここにいくつかの関連ログがあります:

W/DynamiteModule: Local module descriptor class for com.google.Android.gms.vision.dynamite.ocr not found.
I/DynamiteModule: Considering local module com.google.Android.gms.vision.dynamite.ocr:0 and remote module com.google.Android.gms.vision.dynamite.ocr:0
D/TextNativeHandle: Cannot load feature, fall back to load dynamite module.
I/DynamiteModule: Considering local module com.google.Android.gms.vision.ocr:0 and remote module com.google.Android.gms.vision.ocr:1
I/DynamiteModule: Selected remote version of com.google.Android.gms.vision.ocr, version >= 1
V/DynamiteModule: Dynamite loader version >= 2, using loadModule2NoCrashUtils

1
Big Monday

一人一人のためにあなたのコードをここで私に確認してください...たぶん一つが欠落しています

ManifestFile installLocation

<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="com.******.***"
    Android:installLocation="auto" <!-- make sure added this was missing for me -->
>

ManifestFileメタデータ

<application
 ......
    <meta-data
        Android:name="com.google.Android.gms.version"
        Android:value="@integer/google_play_services_version" /> <!--version--><!-- make sure added-->
    <meta-data
        Android:name="com.google.Android.gms.vision.DEPENDENCIES"
        Android:value="barcode" /><!-- barcode,face,ocr make sure added-->
.......
</application>

インターネット接続を確認する

ストレージの空き容量を確認する

エミュレータで作業する場合

googleサービスに問題がないかどうかを確認します==>これは解決策ではありません必要に応じて更新できますが、主な手順は上記のコードがない場合の確認です(**エミュレータの最後の1つは実際のクライアントアプリの解決ではありません**)

0
Hassan Badawi