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
參數
圖片 |
---|