TensorImage 是 Image 对象的封装容器类。在 TFLite.support 库中使用图像处理实用程序时,通常会先将变体类型的图像对象转换为 TensorImage。
目前仅支持 RGB 图片,并始终忽略 A 通道。
数据存储详情:TensorImage
对象可能有 2 个潜在的可信来源:Bitmap
或 TensorBuffer
。TensorImage
会维护相应状态,并仅在需要时将一种状态转换为另一种状态。TensorImage
的典型用例是首先加载 Bitmap
图片,然后使用 ImageProcessor
对其进行处理,最后获取 TensorBuffer
的底层 ByteBuffer
并将其馈送给 TFLite 解释器。
重要提示:为了获得最佳性能,TensorImage
会尽可能避免复制数据。因此,它对自己的数据没有所有权。调用方不应修改传递给 load(Bitmap)
或 load(TensorBuffer, ColorSpaceType)
的数据对象。
重要提示:并非所有方法都经过证明线程安全。
公共构造函数
TensorImage()
初始化一个
TensorImage 对象。 |
|
公共方法
静态 TensorImage | |
静态 TensorImage |
fromBitmap(位图位图)
|
位图 |
getBitmap()
返回此
TensorImage 的 Bitmap 表示法。 |
ByteBuffer |
getBuffer()
返回此
TensorImage 的 ByteBuffer 表示法(具有预期数据类型)。 |
ColorSpaceType |
getColorSpaceType()
获取此
TensorImage 的颜色空间类型。 |
DataType |
getDataType()
获取此
TensorImage 的数据类型。 |
整型 |
getHeight()
获取图片高度。
|
图片 |
getMediaImage()
返回此
TensorImage 的 Image 表示法。 |
TensorBuffer |
getTensorBuffer()
返回此
TensorImage 的 TensorBuffer 表示法(具有预期数据类型)。 |
整型 |
getWidth()
获取图片宽度。
|
void | |
void |
加载(位图位图)
将
Bitmap 图片对象加载到此 TensorImage 中。 |
void |
load(int[] 像素, int[] shape)
将 int 数组作为 RGB 像素加载到此
TensorImage ,表示内部的像素。 |
void |
加载(float[] pixel, int[] shape)
将浮点数组作为 RGB 像素加载到此
TensorImage 中,表示内部的像素。 |
void | |
void |
load(TensorBuffer 缓冲区、ImageProperties imageProperties)
加载
TensorBuffer ,其中包含具有特定 ImageProperties 的像素值。 |
void |
加载(图片图片)
将
Image 对象加载到此 TensorImage 中。 |
继承的方法
公共构造函数
public TensorImage ()
初始化一个 TensorImage
对象。
注意:此 TensorImage
的数据类型为 DataType.UINT8
。如果首选其他数据类型,请使用 TensorImage(DataType)
。
public TensorImage (DataType dataType)
初始化具有指定数据类型的 TensorImage
对象。
从此 TensorImage
获取 TensorBuffer
或 ByteBuffer
时(例如使用 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 static TensorImage fromBitmap (位图位图)
public Bitmap getBitmap ()
返回该 TensorImage
的 Bitmap
表示法。
如果存储的数据不是 uint8,则会应用数字类型转换和取值范围限制。
请注意,从 ALPHA_8
位图获取像素的可靠方法是使用 copyPixelsToBuffer
。“setPixels()”和“getPixels”等位图方法不起作用。
重要提示:这只是一个引用。请勿修改。出于性能方面的考虑,我们不会在此处创建副本,但如果需要修改,请创建副本。
返回
- 在
ARGB_8888
配置(“A”通道始终不透明)或ALPHA_8
中引用Bitmap
,具体取决于此TensorBuffer
的ColorSpaceType
。
抛出
IllegalStateException | 如果 TensorImage 从不加载数据
|
---|
public ByteBuffer getBuffer ()
返回此 TensorImage
的 ByteBuffer
表示法(具有预期数据类型)。
如果存储的数据与 TensorImage
的数据类型不同,系统就会应用数字类型转换和取值范围限制。
重要提示:这只是一个引用。请勿修改。出于性能方面的考虑,我们不会在此处创建副本,但如果需要修改,请创建副本。
它本质上是 getTensorBuffer().getBuffer()
的快捷方式。
返回
- 对保存图片数据的
ByteBuffer
的引用
抛出
IllegalStateException | 如果 TensorImage 从不加载数据
|
---|
public ColorSpaceType getColorSpaceType ()
获取此 TensorImage
的颜色空间类型。
抛出
IllegalStateException | 如果 TensorImage 从不加载数据
|
---|
public DataType getDataType ()
获取此 TensorImage
的数据类型。
返回
- 一种数据类型。目前仅支持
DataType.UINT8
和DataType.FLOAT32
。
public int getHeight ()
获取图片高度。
抛出
IllegalStateException | 如果 TensorImage 从不加载数据 |
---|---|
IllegalArgumentException | 在底层数据已损坏时 |
public 图片 getMediaImage ()
返回该 TensorImage
的 Image
表示法。
此方法仅在 TensorImage
由 Image
提供支持时才有效,这意味着您需要先通过 load(Image)
加载 Image
。
重要提示:这只是一个引用。请勿修改。出于性能方面的考虑,我们不会在此处创建副本,但如果需要修改,请创建副本。
返回
- 在
ARGB_8888
配置(“A”通道始终不透明)或ALPHA_8
中引用Bitmap
,具体取决于此TensorBuffer
的ColorSpaceType
。
抛出
IllegalStateException | 如果 TensorImage 从不加载数据
|
---|
public TensorBuffer getTensorBuffer ()
返回此 TensorImage
的 TensorBuffer
表示法(具有预期数据类型)。
如果存储的数据与 TensorImage
的数据类型不同,系统就会应用数字类型转换和取值范围限制。
重要提示:这只是一个引用。请勿修改。出于性能方面的考虑,我们不会在此处创建副本,但如果需要修改,请创建副本。
返回
- 对保存图片数据的
TensorBuffer
的引用
抛出
IllegalStateException | 如果 TensorImage 从不加载数据
|
---|
public int getWidth ()
获取图片宽度。
抛出
IllegalStateException | 如果 TensorImage 从不加载数据 |
---|---|
IllegalArgumentException | 在底层数据已损坏时 |
public void load (TensorBuffer缓冲区, ColorSpaceType colorSpaceType)
加载 TensorBuffer
,其中包含具有特定 ColorSpaceType
的像素值。
仅支持 ColorSpaceType.RGB
和 ColorSpaceType.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/overview。ImageProcessor
不支持 Image
支持的 TensorImage
。
* 如果 image
的 ImageFormat
不是 YUV_420_888,则会抛出 IllegalArgumentException
参数
图片 |
---|