有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓如何在Java上使用TFLite处理base64字符串

我正在尝试使用一个导出的tflite文件,该文件是我在Android Studio项目中使用Python编写的。由于我是Android新手,我将遵循Tensorflow在this video中给出的示例

在尝试测试模型时,我遇到以下异常:

W/System.err: java.lang.IllegalArgumentException: Cannot convert between a TensorFlowLite tensor with type FLOAT32 and a Java object of type java.lang.String (which is compatible with the TensorFlowLite type STRING).

完整堆栈跟踪:

W/System.err: java.lang.IllegalArgumentException: Cannot convert between a TensorFlowLite tensor with type FLOAT32 and a Java object of type java.lang.String (which is compatible with the TensorFlowLite type STRING).
        at org.tensorflow.lite.Tensor.throwIfTypeIsIncompatible(Tensor.java:260)
        at org.tensorflow.lite.Tensor.getInputShapeIfDifferent(Tensor.java:162)
        at org.tensorflow.lite.NativeInterpreterWrapper.run(NativeInterpreterWrapper.java:132)
        at org.tensorflow.lite.Interpreter.runForMultipleInputsOutputs(Interpreter.java:275)
        at org.tensorflow.lite.Interpreter.run(Interpreter.java:249)
        at me.dmizael.tcc.MainActivity.doInference(MainActivity.java:68)
        at me.dmizael.tcc.MainActivity.loadInputImage(MainActivity.java:62)
        at me.dmizael.tcc.MainActivity.onCreate(MainActivity.java:45)
        at 安卓.app.Activity.performCreate(Activity.java:7009)
W/System.err:     at 安卓.app.Activity.performCreate(Activity.java:7000)
        at 安卓.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
        at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
        at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
        at 安卓.app.ActivityThread.-wrap11(Unknown Source:0)
        at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
        at 安卓.os.Handler.dispatchMessage(Handler.java:106)
        at 安卓.os.Looper.loop(Looper.java:164)
        at 安卓.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.安卓.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:807)

我不太明白我在这个例子中到底在做什么,以及如何解决这个问题。任何帮助都将不胜感激。此外,模型还应该返回base64字符串

代码:

public void doInference(String inputBase64){
    String[][] output = new String[1][1];
    outputBase64 = new String();
    tflite.run(inputBase64, output);
}
private MappedByteBuffer loadModelFile() throws IOException {
    AssetFileDescriptor fileDescriptor = this.getAssets().openFd("pix2pix-faces.tflite");
    FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor());
    FileChannel fileChannel = inputStream.getChannel();
    long startOffSet = fileDescriptor.getStartOffset();
    long declaredLength = fileDescriptor.getDeclaredLength();
    return fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffSet, declaredLength);
}

共 (0) 个答案