TensorImage

public class TensorImage

TensorImage jest klasą opakowującą dla obiektu Image. Podczas korzystania z narzędzi do przetwarzania obrazu w bibliotece TFLite.support, często na początku konwertuje się obiekty obrazu w typach wariantów na TensorImage.

Obecnie obsługiwane są tylko obrazy RGB, a kanał A jest zawsze ignorowany.

Szczegóły przechowywania danych: obiekt TensorImage może mieć 2 potencjalne źródła prawdy: Bitmap lub TensorBuffer . TensorImage utrzymuje stan i konwertuje jeden na drugi tylko wtedy, gdy jest to konieczne. Typowym przypadkiem użycia TensorImage jest najpierw załadowanie obrazu Bitmap , następnie przetworzenie go za pomocą ImageProcessor , a na koniec pobranie bazowego ByteBuffer z TensorBuffer i przekazanie go do interpretera TFLite.

WAŻNE: aby osiągnąć najlepszą wydajność, TensorImage unika kopiowania danych, gdy tylko jest to możliwe. Dlatego nie jest właścicielem swoich danych. Wywołujący nie powinien modyfikować obiektów danych, które są przekazywane do load(Bitmap) lub load(TensorBuffer, ColorSpaceType) .

WAŻNE: nie udowodniono, że wszystkie metody są bezpieczne dla wątków.

Konstruktorzy publiczni

Obraz Tensora ()
Inicjuje obiekt TensorImage .
TensorImage ( DataType dataType)
Inicjuje obiekt TensorImage z określonym typem danych.

Metody publiczne

statyczny obraz tensorowy
createFrom ( TensorImage src, DataType dataType)
Tworzy głęboką kopię danego TensorImage z żądanym typem danych.
statyczny obraz tensorowy
fromBitmap (bitmapa bitmapowa)
Inicjuje obiekt TensorImage DataType.UINT8 Bitmap .
Mapa bitowa
pobierzBitmapę ()
Zwraca reprezentację Bitmap tego TensorImage .
Bufor bajtów
pobierzBufor ()
Zwraca ByteBuffer reprezentację tego TensorImage z oczekiwanym typem danych.
Typ przestrzeni kolorów
getColorSpaceType ()
Pobiera typ przestrzeni kolorów tego TensorImage .
Typ danych
pobierz typ danych ()
Pobiera typ danych tego TensorImage .
int
weźWysokość ()
Pobiera wysokość obrazu.
Obraz
getMediaImage ()
Zwraca reprezentację Image tego TensorImage .
Bufor tensora
pobierzTensorBuffer ()
Zwraca reprezentację TensorBuffer tego TensorImage z oczekiwanym typem danych.
int
pobierzSzerokość ()
Pobiera szerokość obrazu.
próżnia
wczytaj (bufor TensorBuffer , ColorSpaceType colorSpaceType)
Ładuje TensorBuffer zawierający wartości pikseli z określonym ColorSpaceType .
próżnia
wczytaj (mapa bitowa)
Ładuje obiekt obrazu Bitmap do tego TensorImage .
próżnia
load (int[] piksele, int[] kształt)
Ładuje tablicę int jako piksele RGB do tego TensorImage , reprezentującą piksele wewnątrz.
próżnia
load (float[] piksele, int[] kształt)
Ładuje tablicę zmiennoprzecinkową jako piksele RGB do tego TensorImage , reprezentującego piksele wewnątrz.
próżnia
load (bufor ByteBuffer , ImageProperties imageProperties)
Ładuje ByteBuffer zawierający wartości pikseli z określonymi ImageProperties .
próżnia
wczytaj (bufor TensorBuffer , ImageProperties imageProperties)
Ładuje TensorBuffer zawierający wartości pikseli z określonymi ImageProperties .
próżnia
wczytaj (obraz obrazu)
Ładuje obiekt Image do tego TensorImage .

Metody odziedziczone

Konstruktorzy publiczni

publiczny TensorImage ()

Inicjuje obiekt TensorImage .

Uwaga: typ danych tego TensorImage to DataType.UINT8 . Użyj TensorImage(DataType) , jeśli preferowane są inne typy danych.

public TensorImage ( DataType dataType)

Inicjuje obiekt TensorImage z określonym typem danych.

Podczas pobierania TensorBuffer lub ByteBuffer z tego TensorImage , na przykład przy użyciu getTensorBuffer() i getBuffer() , wartości danych zostaną przekonwertowane na określony typ danych.

Uwaga: kształt TensorImage nie jest stały. Można go dostosować do kształtu obrazu ładowanego do tego TensorImage .

Parametry
typ danych oczekiwany typ danych wynikowego TensorBuffer . Typ jest zawsze ustalany w czasie życia TensorImage . Aby przekonwertować typ danych, użyj createFrom(TensorImage, DataType) aby jednocześnie utworzyć kopię i przekonwertować typ danych.
Rzuty
Niedozwolony argumentWyjątek jeśli dataType nie jest ani DataType.UINT8 , ani DataType.FLOAT32

Metody publiczne

public static TensorImage createFrom ( TensorImage src, DataType dataType)

Tworzy głęboką kopię danego TensorImage z żądanym typem danych.

Parametry
src TensorImage do skopiowania
typ danych oczekiwany typ danych nowo utworzonego TensorImage
Zwroty
  • TensorImage , którego dane są kopiowane z src , a typ danych to dataType

public Bitmapa getBitmap ()

Zwraca reprezentację Bitmap tego TensorImage .

Rzutowanie numeryczne i zaciskanie zostaną zastosowane, jeśli przechowywane dane nie są uint8.

Zwróć uwagę, że niezawodnym sposobem uzyskania pikseli z mapy bitowej ALPHA_8 jest użycie copyPixelsToBuffer . Nie działają metody bitmapowe, takie jak `setPixels()` i `getPixels`.

Ważne: to tylko odniesienie. NIE MODYFIKUJ. Nie tworzymy tutaj kopii ze względu na wydajność, ale jeśli konieczna jest modyfikacja, zrób kopię.

Zwroty
  • odniesienie do Bitmap w konfiguracji ARGB_8888 (kanał „A” jest zawsze nieprzezroczysty) lub w ALPHA_8 , w zależności od ColorSpaceType tego TensorBuffer .
Rzuty
Nielegalny wyjątek stanu jeśli TensorImage nigdy nie ładuje danych

publiczny bufor bajtów getBuffer ()

Zwraca ByteBuffer reprezentację tego TensorImage z oczekiwanym typem danych.

Rzutowanie numeryczne i clampowanie zostaną zastosowane, jeśli przechowywane dane różnią się od typu danych TensorImage .

Ważne: to tylko odniesienie. NIE MODYFIKUJ. Nie tworzymy tutaj kopii ze względu na wydajność, ale jeśli konieczna jest modyfikacja, zrób kopię.

Zasadniczo jest to skrót do getTensorBuffer().getBuffer() .

Zwroty
  • odwołanie do ByteBuffer , który przechowuje dane obrazu
Rzuty
Nielegalny wyjątek stanu jeśli TensorImage nigdy nie ładuje danych

public ColorSpaceType getColorSpaceType ()

Pobiera typ przestrzeni kolorów tego TensorImage .

Rzuty
Nielegalny wyjątek stanu jeśli TensorImage nigdy nie ładuje danych

public DataType getDataType ()

Pobiera typ danych tego TensorImage .

Zwroty

public int getHeight ()

Pobiera wysokość obrazu.

Rzuty
Nielegalny wyjątek stanu jeśli TensorImage nigdy nie ładuje danych
Niedozwolony argumentWyjątek jeśli podstawowe dane są uszkodzone

public Image getMediaImage ()

Zwraca reprezentację Image tego TensorImage .

Ta metoda działa tylko wtedy, gdy TensorImage jest wspierany przez Image , co oznacza, że ​​musisz najpierw załadować Image poprzez load(Image) .

Ważne: to tylko odniesienie. NIE MODYFIKUJ. Nie tworzymy tutaj kopii ze względu na wydajność, ale jeśli konieczna jest modyfikacja, zrób kopię.

Zwroty
  • odniesienie do Bitmap w konfiguracji ARGB_8888 (kanał „A” jest zawsze nieprzezroczysty) lub w ALPHA_8 , w zależności od ColorSpaceType tego TensorBuffer .
Rzuty
Nielegalny wyjątek stanu jeśli TensorImage nigdy nie ładuje danych

public TensorBuffer getTensorBuffer ()

Zwraca reprezentację TensorBuffer tego TensorImage z oczekiwanym typem danych.

Rzutowanie numeryczne i clampowanie zostaną zastosowane, jeśli przechowywane dane różnią się od typu danych TensorImage .

Ważne: to tylko odniesienie. NIE MODYFIKUJ. Nie tworzymy tutaj kopii ze względu na wydajność, ale jeśli konieczna jest modyfikacja, zrób kopię.

Zwroty
  • odniesienie do TensorBuffer , który przechowuje dane obrazu
Rzuty
Nielegalny wyjątek stanu jeśli TensorImage nigdy nie ładuje danych

public int getWidth ()

Pobiera szerokość obrazu.

Rzuty
Nielegalny wyjątek stanu jeśli TensorImage nigdy nie ładuje danych
Niedozwolony argumentWyjątek jeśli podstawowe dane są uszkodzone

public void load (bufor TensorBuffer , ColorSpaceType colorSpaceType)

Ładuje TensorBuffer zawierający wartości pikseli z określonym ColorSpaceType .

Obsługuje tylko ColorSpaceType.RGB i ColorSpaceType.GRAYSCALE . Użyj load(TensorBuffer, ImageProperties) dla innych typów przestrzeni kolorów.

Uwaga: jeśli typ danych buffer nie pasuje do tego TensorImage , podczas wywoływania getTensorBuffer() i getBuffer() zostanie zastosowane rzutowanie numeryczne i clampowanie.

Parametry
bufor TensorBuffer do załadowania. Jego kształt powinien być (h, w, 3) lub (1, h, w, 3) dla obrazów RGB i albo (h, w) albo (1, h, w) dla obrazów w skali szarości
colorSpaceType
Rzuty
Niedozwolony argumentWyjątek jeśli kształt bufora nie pasuje do typu przestrzeni kolorów lub jeśli typ przestrzeni kolorów nie jest obsługiwany

public void load (bitmapa bitmapowa)

Ładuje obiekt obrazu Bitmap do tego TensorImage .

Uwaga: jeśli TensorImage ma typ danych inny niż DataType.UINT8 , podczas wywoływania getTensorBuffer() i getBuffer() zostanie zastosowane rzutowanie numeryczne i clampowanie, w których Bitmap zostanie przekonwertowana na TensorBuffer .

Ważne: podczas ładowania mapy bitowej NIE MODYFIKUJ już mapy bitowej od strony wywołującego. Obiekt TensorImage będzie polegał na bitmapie. Prawdopodobnie zmodyfikuje również bitmapę. W tej metodzie wykonujemy podejście zerowej kopii dla tej mapy bitowej, po prostu przechowując jej odwołanie. Użyj bitmap.copy(bitmap.getConfig(), true) aby w razie potrzeby utworzyć kopię.

Uwaga: aby uzyskać najlepszą wydajność, ładuj obrazy w tym samym kształcie, aby uniknąć ponownego przydzielania pamięci.

Parametry
mapa bitowa
Rzuty
Niedozwolony argumentWyjątek jeśli bitmap nie ma w ARGB_8888

public void load (piksele int[], kształt int[])

Ładuje tablicę int jako piksele RGB do tego TensorImage , reprezentującą piksele wewnątrz.

Uwaga: podczas wywoływania getTensorBuffer() i getBuffer() do konwersji wartości na typ danych tego TensorImage zostanie zastosowane rzutowanie numeryczne i clampowanie.

Parametry
piksele piksele RGB reprezentujące obraz
kształtować się kształt obrazu powinien być w formie (h, w, 3) lub w formie (1, h, w, 3)
Rzuty
Niedozwolony argumentWyjątek jeśli kształt nie jest ani (h, w, 3) ani (1, h, w, 3)

public void load (float[] piksele, int[] kształt)

Ładuje tablicę zmiennoprzecinkową jako piksele RGB do tego TensorImage , reprezentującego piksele wewnątrz.

Uwaga: jeśli TensorImage ma typ danych inny niż DataType.FLOAT32 , podczas wywoływania getTensorBuffer() i getBuffer() zostanie zastosowane rzutowanie numeryczne i clampowanie.

Parametry
piksele piksele RGB reprezentujące obraz
kształtować się kształt obrazu powinien być w formie (h, w, 3) lub w formie (1, h, w, 3)
Rzuty
Niedozwolony argumentWyjątek jeśli kształt nie jest ani (h, w, 3) ani (1, h, w, 3)

public void load (bufor ByteBuffer , ImageProperties imageProperties)

Ładuje ByteBuffer zawierający wartości pikseli z określonymi ImageProperties .

Uwaga: jeśli typ danych buffer nie pasuje do tego TensorImage , podczas wywoływania getTensorBuffer() i getBuffer() zostanie zastosowane rzutowanie numeryczne i clampowanie.

Parametry
bufor
Właściwości obrazu
Rzuty
Niedozwolony argumentWyjątek jeśli rozmiar bufora jest mniejszy niż rozmiar obrazu wskazywany przez wysokość obrazu, szerokość i typ przestrzeni kolorów w ImageProperties

public void load (bufor TensorBuffer , ImageProperties imageProperties)

Ładuje TensorBuffer zawierający wartości pikseli z określonymi ImageProperties .

Kształt TensorBuffer nie będzie używany do określenia wysokości i szerokości obrazu. Ustaw właściwości obrazu za pomocą ImageProperties .

Uwaga: jeśli typ danych buffer nie pasuje do tego TensorImage , podczas wywoływania getTensorBuffer() i getBuffer() zostanie zastosowane rzutowanie numeryczne i clampowanie.

Parametry
bufor
Właściwości obrazu
Rzuty
Niedozwolony argumentWyjątek jeśli rozmiar bufora jest mniejszy niż rozmiar obrazu wskazywany przez wysokość obrazu, szerokość i typ przestrzeni kolorów w ImageProperties

public void load (obraz)

Ładuje obiekt Image do tego TensorImage .

Głównym zastosowaniem tej metody jest załadowanie obiektu Image jako danych wejściowych modelu do https://www.tensorflow.org/lite/inference_with_metadata/task_library/overview . TensorImage wspierany przez Image nie jest obsługiwany przez ImageProcessor .

* @throws IllegalArgumentException, jeśli ImageFormat image nie jest YUV_420_888

Parametry
obraz