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 物件。
TensorImage(DataType dataType)
使用指定的資料類型初始化 TensorImage 物件。

公用方法

靜態 TensorImage
createFrom(TensorImage src、DataType dataType)
使用所需資料類型,建立指定 TensorImage 的深層連結。
靜態 TensorImage
fromBitmap(點陣圖點陣圖)
使用 Bitmap 初始化 DataType.UINT8TensorImage 物件。
點陣圖
getBitmap()
傳回此 TensorImageBitmap 表示法。
ByteBuffer
getBuffer()
傳回此 TensorImage 包含預期資料類型的 ByteBuffer 表示法。
ColorSpaceType
getColorSpaceType()
取得這個 TensorImage 的色域類型。
DataType
getDataType()
取得這個 TensorImage 的資料類型。
int
getHeight()
取得圖片高度。
圖片
getMediaImage()
傳回此 TensorImageImage 表示法。
TensorBuffer
getTensorBuffer()
傳回此 TensorImageTensorBuffer 表示法,其中包含預期的資料類型。
int
getWidth()
取得圖片寬度。
void
load(TensorBuffer 緩衝區、ColorSpaceType colorSpaceType)
以特定 ColorSpaceType 載入包含像素值的 TensorBuffer
void
load(點陣圖點陣圖)
Bitmap 圖片物件載入此 TensorImage
void
load(int[] 像素, int[] 形狀)
以 RGB 像素的形式將 int 陣列載入這個 TensorImage,代表其中的像素。
void
load(float[] 像素, int[] 形狀)
以 RGB 像素的形式將浮點陣列載入這個 TensorImage,代表其中的像素。
void
load(ByteBuffer 緩衝區, ImageProperties imageProperties)
以特定 ImageProperties 載入包含像素值的 ByteBuffer
void
load(TensorBuffer 緩衝區、ImageProperties imageProperties)
以特定 ImageProperties 載入包含像素值的 TensorBuffer
void
load(圖片圖片)
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.UINT8DataType.FLOAT32

公用方法

公開靜態 靜態圖片 TensorImage createFrom (TensorImage src、DataType dataType)

使用所需資料類型,建立指定 TensorImage 的深層連結。

參數
src 要複製的 TensorImage
dataType 新建 TensorImage 的預期資料類型
傳回
  • 一個 TensorImage,其資料是從 src 複製且資料類型為 dataType

public 點陣圖 getBitmap ()

傳回此 TensorImageBitmap 表示法。

如果儲存的資料不是 uint8,系統將套用數值轉換與取值範圍限制。

請注意,從 ALPHA_8 點陣圖取得像素的可靠方法是使用 copyPixelsToBuffer。「setPixels()」和「getPixels」等點陣圖方法無法運作。

重要注意事項:這只是參考資料,請勿修改。我們不會在這裡建立副本的目的在於提升效能,但如果需要修改,請建立副本。

傳回
擲回
IllegalStateException 如果 TensorImage 從未載入資料

public ByteBuffer getBuffer ()

傳回此 TensorImage 包含預期資料類型的 ByteBuffer 表示法。

如果儲存的資料與 TensorImage 的資料類型不同,系統會套用數字轉換與取值範圍限制。

重要注意事項:這只是參考資料,請勿修改。我們不會為了效能問題而建立副本,但如果需要修改,請建立副本。

基本上是 getTensorBuffer().getBuffer() 的簡短剪裁。

傳回
擲回
IllegalStateException 如果 TensorImage 從未載入資料

public ColorSpaceType getColorSpaceType ()

取得這個 TensorImage 的色域類型。

擲回
IllegalStateException 如果 TensorImage 從未載入資料

public DataType getDataType ()

取得這個 TensorImage 的資料類型。

傳回

public int getHeight ()

取得圖片高度。

擲回
IllegalStateException 如果 TensorImage 從未載入資料
IllegalArgumentException 表示基礎資料損毀

public 圖片 getMediaImage ()

傳回此 TensorImageImage 表示法。

這個方法只有在 TensorImage 支援 Image 時才會運作,也就是說,您需要先透過 load(Image) 載入 Image

重要注意事項:這只是參考資料,請勿修改。我們不會在這裡建立副本的目的在於提升效能,但如果需要修改,請建立副本。

傳回
擲回
IllegalStateException 如果 TensorImage 從未載入資料

公開 TensorBuffer getTensorBuffer ()

傳回此 TensorImage 包含預期資料類型的 TensorBuffer 表示法。

如果儲存的資料與 TensorImage 的資料類型不同,系統會套用數字轉換與取值範圍限制。

重要注意事項:這只是參考資料,請勿修改。我們不會在這裡建立副本的目的在於提升效能,但如果需要修改,請建立副本。

傳回
擲回
IllegalStateException 如果 TensorImage 從未載入資料

public int getWidth ()

取得圖片寬度。

擲回
IllegalStateException 如果 TensorImage 從未載入資料
IllegalArgumentException 表示基礎資料損毀

public void load (TensorBuffer 緩衝區、ColorSpaceType colorSpaceType)

載入包含特定 ColorSpaceType 的像素值的 TensorBuffer

僅支援 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[] 像素, int[] 形狀)

以 RGB 像素的形式將 int 陣列載入這個 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[] 像素, int[] 形狀)

以 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 buffer、ImageProperties imageProperties)

載入包含特定 ImageProperties 的像素值的 ByteBuffer

注意:如果 buffer 的資料類型與此 TensorImage 的資料類型不符,系統會在呼叫 getTensorBuffer()getBuffer() 時套用數字轉換和取值範圍限制。

參數
緩衝區
imageProperties
擲回
IllegalArgumentException 緩衝區大小小於 ImageProperties 中圖片高度、寬度和色域類型指定的圖片大小

public void load (TensorBuffer 緩衝區、ImageProperties imageProperties)

載入包含特定 ImageProperties 的像素值的 TensorBuffer

不會使用 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 就會發生 @throws IllegalArgumentException

參數
圖片