位图只保存整数值(0-255)。我需要将每个像素值除以255。位图被转换为TensorImage,然后在将其传递给预测输出的解释器时调用getBuffer()。(tflite.run())在中间的某个位置,我必须将每个RGB像素除以255。我担心还有另一个缺点,因为getBuffer()函数返回字节缓冲区。我找不到太多关于TensorFlow lite函数的文档。所以我不确定tflite.run()是否只能接受字节缓冲区。我是用Java编写的,对Android AppD不熟悉。请帮助我,因为这种规范化对于预测正确的值至关重要。
这是在调整大小后将位图转换为tensorimage的代码。在这里我需要将每个像素值除以255,但我被难住了。
private TensorImage resizePic(Bitmap bp) {
ImageProcessor imageProcessor =
new ImageProcessor.Builder()
.add(new ResizeOp(60, 60, ResizeOp.ResizeMethod.BILINEAR))
.build();
TensorImage tImage = new TensorImage(DataType.FLOAT32);
tImage.load(bp);
tImage = imageProcessor.process(tImage);
return tImage;
}
下面是运行模型的行
tflite.run(tImage.getBuffer(), probabilityBuffer.getBuffer());
probabilityBuffer保存输出。
5条答案
按热度按时间umuewwlo1#
我可以使用以下链接构建合适的函数-
第二个链接在Kotlin,代码如下:
这里,60是我要求输入的图像高度和宽度,而且,该方法不需要使用TensorImage,因此www.example.com()的最后一次调用tflite.run如下所示:
这里,bp是位图图像。
nszi6y052#
当你训练模型时,不要归一化图像。所以当你部署你的应用程序时,没有必要归一化位图图像。
fykwrbwg3#
你的第一篇参考文献给出了一个使用OpenCV进行转换的例子,下面是我得出的工作原理:
返回的ByteBuffer可以很容易地加载到TensorBuffer中。我测试了这两种方法,对于112X112的图像,这个OpenCV方法大约快了50毫秒。
iqxoj9l94#
正如这里提到的,使用here中的以下代码将位图转换为
ByteBuffer(float32)
d7v8vwbk5#
我找到了答案:
终端: