TensorImage

公共类 TensorImage

TensorImage 是 Image 对象的封装容器类。在 TFLite.support 库中使用图像处理实用程序时,通常会先将变体类型的图像对象转换为 TensorImage。

目前仅支持 RGB 图片,并始终忽略 A 通道。

数据存储详情:TensorImage 对象可能有 2 个潜在的可信来源:BitmapTensorBufferTensorImage 会维护相应状态,并仅在需要时将一种状态转换为另一种状态。TensorImage 的典型用例是首先加载 Bitmap 图片,然后使用 ImageProcessor 对其进行处理,最后获取 TensorBuffer 的底层 ByteBuffer 并将其馈送给 TFLite 解释器。

重要提示:为了获得最佳性能,TensorImage 会尽可能避免复制数据。因此,它对自己的数据没有所有权。调用方不应修改传递给 load(Bitmap)load(TensorBuffer, ColorSpaceType) 的数据对象。

重要提示:并非所有方法都经过证明线程安全。

公共构造函数

TensorImage()
初始化一个 TensorImage 对象。
TensorImageDataType 数据类型)
初始化具有指定数据类型的 TensorImage 对象。

公共方法

静态 TensorImage
createFrom(TensorImage src, DataType dataType)
使用所需数据类型创建指定 TensorImage 的深层副本。
静态 TensorImage
fromBitmap(位图位图)
使用 Bitmap 初始化 DataType.UINT8TensorImage 对象。
位图
getBitmap()
返回此 TensorImageBitmap 表示法。
ByteBuffer
getBuffer()
返回此 TensorImageByteBuffer 表示法(具有预期数据类型)。
ColorSpaceType
getColorSpaceType()
获取此 TensorImage 的颜色空间类型。
DataType
getDataType()
获取此 TensorImage 的数据类型。
整型
getHeight()
获取图片高度。
图片
getMediaImage()
返回此 TensorImageImage 表示法。
TensorBuffer
getTensorBuffer()
返回此 TensorImageTensorBuffer 表示法(具有预期数据类型)。
整型
getWidth()
获取图片宽度。
void
loadTensorBuffer 缓冲区,ColorSpaceType colorSpaceType)
加载 TensorBuffer,其中包含具有特定 ColorSpaceType 的像素值。
void
加载(位图位图)
Bitmap 图片对象加载到此 TensorImage 中。
void
load(int[] 像素, int[] shape)
将 int 数组作为 RGB 像素加载到此 TensorImage,表示内部的像素。
void
加载(float[] pixel, int[] shape)
将浮点数组作为 RGB 像素加载到此 TensorImage 中,表示内部的像素。
void
loadByteBuffer 缓冲区、ImageProperties imageProperties)
加载 ByteBuffer,其中包含具有特定 ImageProperties 的像素值。
void
loadTensorBuffer 缓冲区、ImageProperties imageProperties)
加载 TensorBuffer,其中包含具有特定 ImageProperties 的像素值。
void
加载(图片图片)
Image 对象加载到此 TensorImage 中。

继承的方法

公共构造函数

public TensorImage ()

初始化一个 TensorImage 对象。

注意:此 TensorImage 的数据类型为 DataType.UINT8。如果首选其他数据类型,请使用 TensorImage(DataType)

public TensorImage (DataType dataType)

初始化具有指定数据类型的 TensorImage 对象。

从此 TensorImage 获取 TensorBufferByteBuffer 时(例如使用 getTensorBuffer()getBuffer()),数据值将转换为指定的数据类型。

注意:TensorImage 的形状不是固定的。可将其调整为要加载到此 TensorImage 的图片的形状。

参数
dataType 生成的 TensorBuffer 的预期数据类型。在 TensorImage 的生命周期内,类型始终固定。如需转换数据类型,请使用 createFrom(TensorImage, DataType) 同时创建副本并转换数据类型。
抛出
IllegalArgumentException 如果 dataType 既不是 DataType.UINT8 也不是 DataType.FLOAT32

公共方法

public static TensorImage createFrom (TensorImage src, DataType dataType)

使用所需数据类型创建指定 TensorImage 的深层副本。

参数
src 要复制的 TensorImage
dataType 新创建的 TensorImage 的预期数据类型
返回
  • 一个 TensorImage,其数据从 src 复制而来,数据类型为 dataType

public Bitmap getBitmap ()

返回该 TensorImageBitmap 表示法。

如果存储的数据不是 uint8,则会应用数字类型转换和取值范围限制。

请注意,从 ALPHA_8 位图获取像素的可靠方法是使用 copyPixelsToBuffer。“setPixels()”和“getPixels”等位图方法不起作用。

重要提示:这只是一个引用。请勿修改。出于性能方面的考虑,我们不会在此处创建副本,但如果需要修改,请创建副本。

返回
抛出
IllegalStateException 如果 TensorImage 从不加载数据

public ByteBuffer getBuffer ()

返回此 TensorImageByteBuffer 表示法(具有预期数据类型)。

如果存储的数据与 TensorImage 的数据类型不同,系统就会应用数字类型转换和取值范围限制。

重要提示:这只是一个引用。请勿修改。出于性能方面的考虑,我们不会在此处创建副本,但如果需要修改,请创建副本。

它本质上是 getTensorBuffer().getBuffer() 的快捷方式。

返回
抛出
IllegalStateException 如果 TensorImage 从不加载数据

public ColorSpaceType getColorSpaceType ()

获取此 TensorImage 的颜色空间类型。

抛出
IllegalStateException 如果 TensorImage 从不加载数据

public DataType getDataType ()

获取此 TensorImage 的数据类型。

返回

public int getHeight ()

获取图片高度。

抛出
IllegalStateException 如果 TensorImage 从不加载数据
IllegalArgumentException 在底层数据已损坏时

public 图片 getMediaImage ()

返回该 TensorImageImage 表示法。

此方法仅在 TensorImageImage 提供支持时才有效,这意味着您需要先通过 load(Image) 加载 Image

重要提示:这只是一个引用。请勿修改。出于性能方面的考虑,我们不会在此处创建副本,但如果需要修改,请创建副本。

返回
抛出
IllegalStateException 如果 TensorImage 从不加载数据

public TensorBuffer getTensorBuffer ()

返回此 TensorImageTensorBuffer 表示法(具有预期数据类型)。

如果存储的数据与 TensorImage 的数据类型不同,系统就会应用数字类型转换和取值范围限制。

重要提示:这只是一个引用。请勿修改。出于性能方面的考虑,我们不会在此处创建副本,但如果需要修改,请创建副本。

返回
抛出
IllegalStateException 如果 TensorImage 从不加载数据

public int getWidth ()

获取图片宽度。

抛出
IllegalStateException 如果 TensorImage 从不加载数据
IllegalArgumentException 在底层数据已损坏时

public void load (TensorBuffer缓冲区, ColorSpaceType colorSpaceType)

加载 TensorBuffer,其中包含具有特定 ColorSpaceType 的像素值。

仅支持 ColorSpaceType.RGBColorSpaceType.GRAYSCALE。对于其他颜色空间类型,请使用 load(TensorBuffer, ImageProperties)

注意:如果 buffer 的数据类型与此 TensorImage 的数据类型不匹配,则在调用 getTensorBuffer()getBuffer() 时,系统会应用数字类型转换和限制值。

参数
缓存空间 要加载的 TensorBuffer。对于 RGB 图片,其形状应为 (h, w, 3) 或 (1, h, w, 3);对于 GRAYSCALE 图片,其形状应为 (h, w) 或 (1, h, w)
colorSpaceType
抛出
IllegalArgumentException 如果缓冲区的形状与颜色空间类型不匹配,或者颜色空间类型不受支持

public void load (位图位图)

Bitmap 图片对象加载到此 TensorImage 中。

注意:如果 TensorImage 的数据类型不是 DataType.UINT8,则在调用 getTensorBuffer()getBuffer() 时,系统会应用数字类型转换和限制,其中 Bitmap 将转换为 TensorBuffer

重要提示:加载位图时,请勿再从调用方修改位图。TensorImage 对象将依赖位图。它可能还会修改位图。在此方法中,我们只需保留该位图的引用,即可对其执行零复制方法。如有必要,请使用 bitmap.copy(bitmap.getConfig(), true) 创建副本。

注意:为获得最佳性能,请以相同的形状加载图片,以避免重新分配内存。

参数
位图
抛出
IllegalArgumentException 如果 bitmap 不在 ARGB_8888 中

public void load (int[] pixel, int[] shape)

将 int 数组作为 RGB 像素加载到此 TensorImage 中,表示内部的像素。

注意:在调用 getTensorBuffer()getBuffer() 时,将应用数字类型转换和取值范围限制,以将值转换为此 TensorImage 的数据类型。

参数
像素 表示图片的 RGB 像素
shape 图像的形状,应为 (h, w, 3) 或 (1, h, w, 3)
抛出
IllegalArgumentException 如果形状既不是 (h, w, 3),也不是 (1, h, w, 3)

public void load (float[] pixel, int[] shape)

将浮点数组作为 RGB 像素加载到此 TensorImage 中,表示内部的像素。

注意:如果 TensorImage 的数据类型不是 DataType.FLOAT32,则在调用 getTensorBuffer()getBuffer() 时,系统会应用数字类型转换和取值范围限制。

参数
像素 表示图片的 RGB 像素
shape 图像的形状,应为 (h, w, 3) 或 (1, h, w, 3)
抛出
IllegalArgumentException 如果形状既不是 (h, w, 3),也不是 (1, h, w, 3)

public void load (ByteBuffer缓冲区, ImageProperties imageProperties)

加载 ByteBuffer,其中包含具有特定 ImageProperties 的像素值。

注意:如果 buffer 的数据类型与此 TensorImage 的数据类型不匹配,则在调用 getTensorBuffer()getBuffer() 时,系统会应用数字类型转换和限制值。

参数
缓存空间
imageProperties
抛出
IllegalArgumentException 如果缓冲区空间小于 ImageProperties 中的图片高度、宽度和颜色空间类型所指示的图片大小

public void load (TensorBuffer Buffer, ImageProperties imageProperties)

加载 TensorBuffer,其中包含具有特定 ImageProperties 的像素值。

TensorBuffer 的形状不会用于确定图片的高度和宽度。通过 ImageProperties 设置图片属性。

注意:如果 buffer 的数据类型与此 TensorImage 的数据类型不匹配,则在调用 getTensorBuffer()getBuffer() 时,系统会应用数字类型转换和限制值。

参数
缓存空间
imageProperties
抛出
IllegalArgumentException 如果缓冲区空间小于 ImageProperties 中的图片高度、宽度和颜色空间类型所指示的图片大小

public void load (图片图片)

Image 对象加载到此 TensorImage 中。

此方法的主要用途是将 Image 对象作为模型输入加载到 https://www.tensorflow.org/lite/inference_with_metadata/task_library/overviewImageProcessor 不支持 Image 支持的 TensorImage

* 如果 imageImageFormat 不是 YUV_420_888,则会抛出 IllegalArgumentException

参数
图片