Android MLKit - 执行 Firebase ML 任务时发生内部错误

Avr*_*bro 8 android machine-learning firebase tensorflow firebase-mlkit

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

Internal error has occurred when executing Firebase ML tasks
Run Code Online (Sandbox Code Playgroud)

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

Internal error has occurred when executing Firebase ML tasks
Run Code Online (Sandbox Code Playgroud)

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

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

[1 3]
<class 'numpy.float32'>
[ 1  1 34]
<class 'numpy.int64'>
Run Code Online (Sandbox Code Playgroud)

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

小智 11

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

I/CameraXBasic: Internal error has occurred when executing ML Kit tasks 
Run Code Online (Sandbox Code Playgroud)

请确保在MLKit操作后关闭ImageProxyimageinanalyze函数

这是小片段

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() }
     }

}
Run Code Online (Sandbox Code Playgroud)

  • 这可行,但为什么呢? (2认同)

小智 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();
Run Code Online (Sandbox Code Playgroud)