tflite float 32模型的图像输入推断

时间:2020-02-11 05:34:28

标签: android

我在我的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;

}

0 个答案:

没有答案