安卓如何在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) 个答案