我在我的android应用程序中使用tflite float32模型来嵌入图像,但与控制台上的python输出相比,它提供了不同的输出。我使用此代码->
private float[][] doInference(Bitmap inputBitmap) {
inputBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.face_trump);
inputBitmap = Bitmap.createScaledBitmap(inputBitmap, 160, 160, true);
ByteBuffer byteBuffer = convertBitmapToByteBuffer(inputBitmap);
float [][] outputval = new float[1][128];
tflite.run(byteBuffer, outputval);
float[][] inferredvalue = outputval;
return inferredvalue;
}
private ByteBuffer convertBitmapToByteBuffer(Bitmap bitmap) {
ByteBuffer byteBuffer;
byteBuffer = ByteBuffer.allocateDirect(4 * 1 * 160 * 160 * 3);
byteBuffer.order(ByteOrder.nativeOrder());
int[] intValues = new int[160 * 160];
bitmap.getPixels(intValues, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
int pixel = 0;
for (int i = 0; i < 160; ++i) {
for (int j = 0; j < 160; ++j) {
final int val = intValues[pixel++];
byteBuffer.putFloat((((val >> 16) & 0xFF)-127.5f)/127.5f); //255
byteBuffer.putFloat((((val >> 8) & 0xFF)-127.5f)/127.5f);//255
byteBuffer.putFloat((((val) & 0xFF)-127.5f)/127.5f);//255
}
}
return byteBuffer;
}