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 的資料類型。 |
| int |
getHeight()
取得圖片高度。
|
| 圖片 |
getMediaImage()
傳回此
TensorImage 的 Image 表示法。 |
| TensorBuffer |
getTensorBuffer()
傳回此
TensorImage 的 TensorBuffer 表示法,其中包含預期的資料類型。 |
| int |
getWidth()
取得圖片寬度。
|
| void | |
| void |
load(點陣圖點陣圖)
將
Bitmap 圖片物件載入此 TensorImage。 |
| void |
load(int[] 像素, int[] 形狀)
以 RGB 像素的形式將 int 陣列載入這個
TensorImage,代表其中的像素。 |
| void |
load(float[] 像素, int[] 形狀)
以 RGB 像素的形式將浮點陣列載入這個
TensorImage,代表其中的像素。 |
| void | |
| void | |
| void |
load(圖片圖片)
將
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 |
|---|
公用方法
公開靜態 靜態圖片 TensorImage createFrom (TensorImage src、DataType dataType)
使用所需資料類型,建立指定 TensorImage 的深層連結。
參數
| src | 要複製的 TensorImage |
|---|---|
| dataType | 新建 TensorImage 的預期資料類型 |
傳回
- 一個
TensorImage,其資料是從src複製且資料類型為dataType
公開 靜態 TensorImage fromBitmap (點陣圖點陣圖)
public 點陣圖 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 從未載入資料 |
|---|
公開 TensorBuffer getTensorBuffer ()
傳回此 TensorImage 包含預期資料類型的 TensorBuffer 表示法。
如果儲存的資料與 TensorImage 的資料類型不同,系統會套用數字轉換與取值範圍限制。
重要注意事項:這只是參考資料,請勿修改。我們不會在這裡建立副本的目的在於提升效能,但如果需要修改,請建立副本。
傳回
- 包含圖片資料的
TensorBuffer參照
擲回
| IllegalStateException | 如果 TensorImage 從未載入資料 |
|---|
public int getWidth ()
取得圖片寬度。
擲回
| IllegalStateException | 如果 TensorImage 從未載入資料 |
|---|---|
| IllegalArgumentException | 表示基礎資料損毀 |
public void load (TensorBuffer 緩衝區、ColorSpaceType colorSpaceType)
載入包含特定 ColorSpaceType 的像素值的 TensorBuffer。
僅支援 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[] 像素, 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/overview。
ImageProcessor 不支援 Image 支援的 TensorImage。
* 如果 image 的 ImageFormat 不是 YUV_420_888 就會發生 @throws IllegalArgumentException
參數
| 圖片 |
|---|