Firebase ML Kit:“内部错误”异常,但输入正确且配置正确

JarsOfJam-Scheduler

概要

  1. 语境
  2. 问题
  3. 试图解决问题
  4. 相关问题

语境

我使用.tflite保存在Firebase服务器中的自定义模型(https://firebase.google.com/docs/ml-kit/android/use-custom-models)。这是我自定义的超分辨率图像GAN生成器:我给它一个32x32的图像,它给了我超分辨率的128x128的图像。我正在尝试在我的Android应用中使用它。

我遵循了上面链接的文档。

问题

引发以下异常:

I / System.out:com.google.firebase.ml.common.FirebaseMLException:执行Firebase ML任务时发生内部错误

试图解决问题

分析预期的输入和输出形状

根据Google Colab Python解释器,我的预期输入和输出如下:

[1 32 32 3]

类'numpy.float32'>

[1 128 128 3]

类'numpy.float32'>

因此,我必须给生成器模型一个32x32x3的图像,并且它必须输出一个128x128x3的图像,这里一切正常:)。这是SRGAN生成器的正常工作。

分析Android应用程序源

这是Android应用程序的源代码...它包括我的生成器模型的配置和推断运行。还显示要发送的数据。

配置ML Kit客户端

FirebaseModelDownloadConditions.Builder conditionsBuilder =
        new FirebaseModelDownloadConditions.Builder().requireWifi();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    // Enable advanced conditions on Android Nougat and newer.
    conditionsBuilder = conditionsBuilder
            .requireCharging();
}
FirebaseModelDownloadConditions conditions = conditionsBuilder.build();

cloudSource = new FirebaseRemoteModel.Builder("srgan")
        .enableModelUpdates(true)
        .setInitialDownloadConditions(conditions)
        .setUpdatesDownloadConditions(conditions)
        .build();
FirebaseModelManager.getInstance().registerRemoteModel(cloudSource);

FirebaseModelOptions options = new FirebaseModelOptions.Builder()
        .setRemoteModelName("srgan")
        .build();
FirebaseModelInterpreter firebaseInterpreter =
        FirebaseModelInterpreter.getInstance(options);

FirebaseModelInputOutputOptions inputOutputOptions =
        new FirebaseModelInputOutputOptions.Builder()
                .setInputFormat(0, FirebaseModelDataType.FLOAT32, new int[]{32, 32, 3})
                .setOutputFormat(0, FirebaseModelDataType.FLOAT32, new int[]{128, 128, 3})
                .build();

定义作为输入发送的数据,即像素的32x32x3张量(定义byte[][][] pixels

Bitmap bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), Uri.parse("file://" + selected_image_uri));
Bitmap bitmapResized = Bitmap.createScaledBitmap(bitmap, 32, 32, false);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmapResized.compress(Bitmap.CompressFormat.PNG, 100, stream);
float[][][] pixels = new float[bitmapResized.getWidth()][bitmapResized.getHeight()][3];
for(int i = 0; i < bitmapResized.getWidth(); i++) {
    for(int j = 0; j < bitmapResized.getHeight(); j++) {
        pixels[i][j][0] = Color.red(bitmapResized.getPixel(i,j));
        pixels[i][j][1] = Color.green(bitmapResized.getPixel(i,j));
        pixels[i][j][2] = Color.blue(bitmapResized.getPixel(i,j));
    }
}

生成器模型的推断(使用先前定义的byte[][][] pixels

FirebaseModelInputs inputs = new FirebaseModelInputs.Builder()
        .add(pixels)
        .build();
firebaseInterpreter.run(inputs, inputOutputOptions)
        .addOnSuccessListener(
                new OnSuccessListener<FirebaseModelOutputs>() {
                    @Override
                    public void onSuccess(FirebaseModelOutputs result) {
                        SweetAlertDialog pDialog2 = new SweetAlertDialog(context, SweetAlertDialog.SUCCESS_TYPE);
                        pDialog2.setTitleText("GG!");
                        pDialog2.setContentText("Image treated!");
                        pDialog2.show();
                    }
                })
        .addOnFailureListener(
                new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        System.out.println(e);
                        SweetAlertDialog pDialog2 = new SweetAlertDialog(context, SweetAlertDialog.ERROR_TYPE);
                        pDialog2.setTitleText(context.getResources().getString(R.string.error_firebase_model_interpreter_running));
                        pDialog2.setContentText(context.getResources().getString(R.string.error_firebase_model_interpreter_running_contents));
                        pDialog2.show();
                    }
                });

引发的异常非常广泛。输入似乎很好。也配置我的客户端。有什么事吗 我一点都不知道

相关问题

JarsOfJam-Scheduler

通过更改几行来解决问题...愚蠢的错误!这里的关键是要考虑第一个维度,该维度仅包含一个值(第一个“ 1”)。仅因为我只发送(和接收)1张图像,所以只有1个值。

1。

.setInputFormat(0, FirebaseModelDataType.FLOAT32, new int[]{1, 32, 32, 3})


.setOutputFormat(0, FirebaseModelDataType.FLOAT32, new int[]{1, 128, 128, 3})
  1. float[][][][] pixels = new float[1][bitmapResized.getWidth()][bitmapResized.getHeight()][3];

  2. pixels[0][i][j][0] = Color.red(bitmapResized.getPixel(i,j)); pixels[0][i][j][1] = Color.green(bitmapResized.getPixel(i,j)); pixels[0][i][j][2] = Color.blue(bitmapResized.getPixel(i,j));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我如何找到上下文并从Android Firebase ML-Kit BarcodeScannerProcessor onSuccess启动新的活动

Firebase ML KIT无法识别古吉拉特语

Firebase Android ML Kit:在QR代码上隐藏显示值的方法

Firebase ML Kit可以用于手写文本吗?

Firebase ML套件无法正确识别语言(英语或其他语言)

Firebase ML kit API是否可以与离子一起使用?

在没有cocapods的iOS上使用Firebase ML Kit时,GoogleMobileVision中的链接器错误

ML模型无法正确预测

通过相机的Android Firebase ML-Kit实时条形码检测

Firebase MLKIT Translate的相关性错误(firebase-ml-natural-language-translate-model)

如何使用Firebase ML Kit查找图像中的标记?

使用相机和Firebase ML套件的Android设备上的文本识别不正确

Firebase ML Kit可以用作人脸验证吗

使用自定义TFLITE的Firebase ML Kit对Android上的各种输出产生相同的推断

如何使用Firebase ML Kit识别条形码?

使用Firebase ML Kit无法读取更多30个字符的条形码

Flutter firebase_ml_vision构建因异常而失败

iOS Firebase ML Kit 简单音频识别“无法为给定模型创建 TFLite 解释器”

是否可以在 Unity3D 上集成 Firebase ML-Kit?

如何使用 Firebase ML Kit 创建用于条码扫描的模块化类

如何使用 Firebase ML 套件识别地标?

添加 firebase ML-kit 时的依赖项冲突

自定义模型 [MLKit] - FirebaseMLException:执行 Firebase ML 任务时发生内部错误

如何避免在 firebase ML Kit 的人脸检测 API 中捕获模糊图像

Firebase ML 套件未对齐的边界框

Firebase ML Kit proguard 问题

为什么 Firebase ML Kit 每次都为同一张脸检测不同的轮廓值

Firebase ML Kit 人脸检测,无法检索实例 ID

React-Native Firebase ML Kit 视觉图像标签不适用于 iOS