|
|
@@ -16,6 +16,8 @@ |
|
|
|
|
|
|
|
|
package com.mindspore.lite; |
|
|
package com.mindspore.lite; |
|
|
|
|
|
|
|
|
|
|
|
import android.util.Log; |
|
|
|
|
|
|
|
|
public class MSTensor { |
|
|
public class MSTensor { |
|
|
private long tensorPtr; |
|
|
private long tensorPtr; |
|
|
|
|
|
|
|
|
@@ -52,6 +54,10 @@ public class MSTensor { |
|
|
return this.getData(this.tensorPtr); |
|
|
return this.getData(this.tensorPtr); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public float[] getFloatData() { |
|
|
|
|
|
return decodeBytes(this.getData(this.tensorPtr)); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
public void setData(byte[] data) { |
|
|
public void setData(byte[] data) { |
|
|
this.setData(this.tensorPtr, data, data.length); |
|
|
this.setData(this.tensorPtr, data, data.length); |
|
|
} |
|
|
} |
|
|
@@ -69,6 +75,24 @@ public class MSTensor { |
|
|
this.tensorPtr = 0; |
|
|
this.tensorPtr = 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private float[] decodeBytes(byte[] bytes) { |
|
|
|
|
|
if (bytes.length % 4 != 0) { |
|
|
|
|
|
Log.e("MS_LITE", "Length of bytes should be multi of 4 "); |
|
|
|
|
|
return null; |
|
|
|
|
|
} |
|
|
|
|
|
int size = bytes.length / 4; |
|
|
|
|
|
float[] ret = new float[size]; |
|
|
|
|
|
for (int i = 0; i < size; i=i+4) { |
|
|
|
|
|
int accNum = 0; |
|
|
|
|
|
accNum = accNum | (bytes[i] & 0xff) << 0; |
|
|
|
|
|
accNum = accNum | (bytes[i+1] & 0xff) << 8; |
|
|
|
|
|
accNum = accNum | (bytes[i+2] & 0xff) << 16; |
|
|
|
|
|
accNum = accNum | (bytes[i+3] & 0xff) << 24; |
|
|
|
|
|
ret[i/4] = Float.intBitsToFloat(accNum); |
|
|
|
|
|
} |
|
|
|
|
|
return ret; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
private native long createMSTensor(int dataType, int[] shape, int shapeLen); |
|
|
private native long createMSTensor(int dataType, int[] shape, int shapeLen); |
|
|
|
|
|
|
|
|
private native int[] getShape(long tensorPtr); |
|
|
private native int[] getShape(long tensorPtr); |
|
|
|