私はテキスト認識にfirebase mlキットを使用していますが、エミュレータと実際のデバイスではこの例外を設けています。
_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.zzjz.zzc(Unknown Source)
at com.google.Android.gms.internal.firebase_ml.zzjz.zza(Unknown Source)
at com.google.Android.gms.internal.firebase_ml.zzic.call(Unknown Source)
at com.google.Android.gms.internal.firebase_ml.zzhx.zza(Unknown Source)
at com.google.Android.gms.internal.firebase_ml.zzhy.run(Unknown Source)
at Android.os.Handler.handleCallback(Handler.Java:733)
at Android.os.Handler.dispatchMessage(Handler.Java:95)
at com.google.Android.gms.internal.firebase_ml.zze.dispatchMessage(Unknown Source)
at Android.os.Looper.loop(Looper.Java:136)
at Android.os.HandlerThread.run(HandlerThread.Java:61)
_
ここに私のコード
_private fun MlProcessText(imageUri:Uri) {
val bitmap = MediaStore.Images.Media.getBitmap(contentResolver, imageUri)
val textVision = FirebaseVisionImage.fromBitmap(bitmap)
val detector = FirebaseVision.getInstance().onDeviceTextRecognizer
detector.processImage(textVision).addOnSuccessListener { it ->
val blocks = it.textBlocks
if (blocks.size == 0 ){
tvVision.text = "NO TEXT"
}else{
blocks.forEach {
tvVision.append(" ${it.text}")
}
}
}.addOnFailureListener {
it.printStackTrace() // this is the exception log
tvVision.text = it.message
}
}
_
また私が試した:
1-設定->アプリ-> Google Play開発者サービス->ストレージ->スペースの管理->すべてのデータをクリア
2-低ストレージチェック(少なくとも1ギガ空き)
そしてメタデータを追加
_ <meta-data
Android:name="com.google.firebase.ml.vision.DEPENDENCIES"
Android:value="ocr,text" />
_
しかし、それでも同じエラーです!
[〜#〜]更新[〜#〜]
数日間動かなくなった後、私は使用しようとしますGoogleモバイルビジョン
これを依存関係に追加します
_implementation 'com.google.Android.gms:play-services-vision:17.0.2'
_
そして this article for[〜#〜] ocr [〜#〜]を使用し、このコードで
_ //Create the TextRecognizer
final TextRecognizer textRecognizer = new TextRecognizer.Builder(getApplicationContext()).build();
if (!textRecognizer.isOperational()) {
Log.w(TAG, "Detector dependencies not loaded yet");
} else {
//Initialize camerasource to use high resolution and set Autofocus on.
mCameraSource = new CameraSource.Builder(getApplicationContext(), textRecognizer)
.setFacing(CameraSource.CAMERA_FACING_BACK)
.setRequestedPreviewSize(1280, 1024)
.setAutoFocusEnabled(true)
.setRequestedFps(2.0f)
.build();
}
_
textRecognizer.isOperational()
は常にfalse
を返します。つまり、あまり機能しません。この二つの問題には共通点があると思います。
だから私はAndroid!
テスト対象:Noxエミュレーター、Google Nexus 5X API 26エミュレーター、Huawei p10およびSamsung Galaxy S7の実際のデバイス。
この問題を解決するためのアイデアはありますか?
TextRecognizer textRecognizer = new TextRecognizer.Builder(this).build();
if(!textRecognizer.isOperational()) {
// Note: The first time that an app using a Vision API is installed on a
// device, GMS will download a native libraries to the device in order to do detection.
// Usually this completes before the app is run for the first time. But if that
// download has not yet completed, then the above call will not detect any text,
// barcodes, or faces.
// isOperational() can be used to check if the required native libraries are currently
// available. The detectors will automatically become operational once the library
// downloads complete on device.
Log.w(LOG_TAG, "Detector dependencies are not yet available.");
// Check for low storage. If there is low storage, the native library will not be
// downloaded, so detection will not become operational.
IntentFilter lowstorageFilter = new IntentFilter(Intent.ACTION_DEVICE_STORAGE_LOW);
boolean hasLowStorage = registerReceiver(null, lowstorageFilter) != null;
if (hasLowStorage) {
Toast.makeText(this,"Low Storage", Toast.LENGTH_LONG).show();
Log.w(LOG_TAG, "Low Storage");
}
私は時々問題が遅いインターネット接続であることに気づきました、そして、モデルがダウンロードされるのにより多くの時間が必要です。悪いユーザーエクスペリエンスを最小限に抑えるために、これを追加しましたウォームアップメソッドアプリが起動したらすぐに呼び出します。これにより、実際の認識が行われたときに、モデルが既にダウンロードされます。
/**
* We call that on startup with hope the needed model will be downloaded as soon as possible;
* It is used to prevent: "Waiting for the text recognition model to be downloaded. Please wait."
* exception when recognizing.
*/
public static void warmUp() {
Bitmap image = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
image.eraseColor(Android.graphics.Color.GREEN);
FirebaseVisionImage firebaseVisionImage = FirebaseVisionImage.fromBitmap(image);
FirebaseVision.getInstance().getOnDeviceTextRecognizer()
.processImage(firebaseVisionImage)
.addOnSuccessListener(null)
.addOnFailureListener(null);
}