【问题标题】:Android MLKit - Internal error has occurred when executing Firebase ML tasksAndroid MLKit - 执行 Firebase ML 任务时发生内部错误
【发布时间】:2019-05-20 05:00:04
【问题描述】:

您好,我有一个自定义模型,我在 android 应用程序中使用,但是当我尝试运行它时,抛出 MLkitExceptions,所述错误的日志输出如下:

Internal error has occurred when executing Firebase ML tasks

我的应用程序的 java 代码如下所示:

FirebaseLocalModel localModel = new FirebaseLocalModel.Builder("local_places_recommend")
                .setAssetFilePath("recsys.tflite").build();

FirebaseModelManager.getInstance().registerLocalModel(localModel);



FirebaseModelOptions options = new FirebaseModelOptions.Builder()
                .setLocalModelName("local_places_recommend")
                .build();

FirebaseModelInterpreter firebaseInterpreter = FirebaseModelInterpreter.getInstance(options);

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

float[][] input = new float[1][3];

input[0][0] = d1;
input[0][1] = d2;
input[0][2] = d3;


FirebaseModelInputs inputs = new FirebaseModelInputs.Builder()
                .add(input)
                .build();

每当我尝试运行 FirebaseModelInterpreter 时,我都会收到该错误,但没有其他任何内容。

输入张量和输出张量的形状分别如下:

[1 3]
<class 'numpy.float32'>
[ 1  1 34]
<class 'numpy.int64'>

我们将不胜感激任何有关此问题的帮助或见解。

【问题讨论】:

    标签: android firebase tensorflow machine-learning firebase-mlkit


    【解决方案1】:

    如果您使用的是 CameraX,您可能会收到此错误。

    I/CameraXBasic: Internal error has occurred when executing ML Kit tasks 
    

    请确保在MLKit操作后关闭analyze函数中的ImageProxyimage

    这是小sn-p

    override fun analyze(imageProxy: ImageProxy) {
    
         val image:Image? = imageProxy.image
    
         image?.let {img->
                   val iImage = InputImage
                     .fromMediaImage(img,imageProxy.imageInfo.rotationDegrees)
                    textRecognizer.process(iImage)
                        .addOnSuccessListener { listener(it)}
                        .addOnFailureListener { Log.i(TAG,it.toString()) }
                        .addOnCompleteListener {
                            image.close()
                            imageProxy.close() }
         }
    
    }
    

    【讨论】:

      【解决方案2】:

      如 Firebase 文档中所述: https://firebase.google.com/docs/reference/android/com/google/firebase/ml/custom/FirebaseModelDataType

      没有INT64类型,请尝试写INT32而不是FLOAT32。

      FirebaseModelInputOutputOptions inputOutputOptions =
                 new FirebaseModelInputOutputOptions.Builder()
                          .setInputFormat(0, FirebaseModelDataType.FLOAT32, new int[]{1, 3})
                          .setOutputFormat(0, FirebaseModelDataType.FLOAT32, new int[]{1, 1, 34})// try to change FLOAT32 to Int32
                          .build();
      

      【讨论】:

        【解决方案3】:

        我遇到了同样的问题,因为我的版本控制更改了我的 tflite 模型并且没有更新我的代码。我的模型输入形状错误。 我只是改变了:

        val inputOutputOptions = FirebaseModelInputOutputOptions.Builder()
                        .setInputFormat(0, FirebaseModelDataType.FLOAT32, intArrayOf(1, **RightSize, RightSize**, 3))
                        .setOutputFormat(0, FirebaseModelDataType.FLOAT32, intArrayOf(1, 4))
                        .build()
        

        来源:https://github.com/tensorflow/tensorflow/issues/30187

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-11-24
          • 1970-01-01
          • 2016-10-15
          • 1970-01-01
          • 1970-01-01
          • 2020-03-15
          • 1970-01-01
          相关资源
          最近更新 更多