TensorImage

klasa publiczna TensorImage

TensorImage jest klasą opakowującą obiekt Image. Podczas korzystania z narzędzi do przetwarzania obrazu w bibliotece TFLite.support często najpierw konwertuje się obiekty obrazu w typach wariantowych 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 w razie potrzeby. Typowym przypadkiem użycia TensorImage jest najpierw załadowanie obrazu Bitmap , następnie przetworzenie go za pomocą ImageProcessor i na koniec pobranie bazowego ByteBuffer z TensorBuffer i wprowadzenie 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. Obiekty wywołujące nie powinny modyfikować obiektów danych przekazywanych 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 ( typ danych typ danych)
Inicjuje obiekt TensorImage o określonym typie danych.

Metody publiczne

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

Metody dziedziczone

Konstruktorzy publiczni

publiczny obraz Tensora ()

Inicjuje obiekt TensorImage .

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

publiczny TensorImage ( Typ danychDaneType )

Inicjuje obiekt TensorImage o określonym typie 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 ustalony. Można go dostosować do kształtu obrazu ładowanego do tego TensorImage .

Parametry
typ danych oczekiwany typ danych wynikowego TensorBuffer . Typ jest zawsze ustalany przez cały okres istnienia TensorImage . Aby przekonwertować typ danych, użyj createFrom(TensorImage, DataType) w celu jednoczesnego utworzenia kopii i konwersji typu danych.
Rzuca
Wyjątek IllegalArgument jeśli dataType nie jest ani DataType.UINT8 , ani DataType.FLOAT32

Metody publiczne

publiczny statyczny TensorImage createFrom ( TensorImage src, DataType typ danych)

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

Parametry
źródło TensorImage z którego chcesz skopiować
typ danych oczekiwany typ danych nowo utworzonego TensorImage
Zwroty
  • TensorImage , którego dane są kopiowane z src , a typ danych to dataType

publiczna mapa bitowa getBitmap ()

Zwraca reprezentację Bitmap tego TensorImage .

Jeśli przechowywane dane nie są uint8, zostaną zastosowane rzutowanie numeryczne i zaciskanie.

Należy pamiętać, że niezawodnym sposobem uzyskania pikseli z mapy bitowej ALPHA_8 jest użycie copyPixelsToBuffer . Metody bitmapowe, takie jak `setPixels()` i `getPixels` nie działają.

Ważne: to tylko odniesienie. NIE MODYFIKUJ. Nie tworzymy tutaj kopii ze względu na wydajność, ale jeśli konieczna jest modyfikacja, wykonaj 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 .
Rzuca
Wyjątek IllegalStateException jeśli TensorImage nigdy nie ładuje danych

publiczny ByteBuffer getBuffer ()

Zwraca reprezentację ByteBuffer tego TensorImage z oczekiwanym typem danych.

Jeśli przechowywane dane różnią się od typu danych TensorImage zostaną zastosowane rzutowanie numeryczne i zaciskanie.

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

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

Zwroty
  • odwołanie do ByteBuffer , który przechowuje dane obrazu
Rzuca
Wyjątek IllegalStateException jeśli TensorImage nigdy nie ładuje danych

publiczny ColorSpaceType getColorSpaceType ()

Pobiera typ przestrzeni kolorów tego TensorImage .

Rzuca
Wyjątek IllegalStateException jeśli TensorImage nigdy nie ładuje danych

publiczny typ danych getDataType ()

Pobiera typ danych tego TensorImage .

Zwroty

publiczny int getHeight ()

Pobiera wysokość obrazu.

Rzuca
Wyjątek IllegalStateException jeśli TensorImage nigdy nie ładuje danych
Wyjątek IllegalArgument jeśli podstawowe dane są uszkodzone

obraz publiczny 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, wykonaj 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 .
Rzuca
Wyjątek IllegalStateException jeśli TensorImage nigdy nie ładuje danych

publiczny TensorBuffer getTensorBuffer ()

Zwraca reprezentację TensorBuffer tego TensorImage z oczekiwanym typem danych.

Jeśli przechowywane dane różnią się od typu danych TensorImage zostaną zastosowane rzutowanie numeryczne i zaciskanie.

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

Zwroty
  • odniesienie do TensorBuffer , który przechowuje dane obrazu
Rzuca
Wyjątek IllegalStateException jeśli TensorImage nigdy nie ładuje danych

publiczny int getWidth ()

Pobiera szerokość obrazu.

Rzuca
Wyjątek IllegalStateException jeśli TensorImage nigdy nie ładuje danych
Wyjątek IllegalArgument jeśli podstawowe dane są uszkodzone

publiczne obciążenie puste (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() zostaną zastosowane rzutowanie numeryczne i zaciskanie.

Parametry
bufor TensorBuffer który ma zostać załadowany. Jego kształt powinien wynosić (h, w, 3) lub (1, h, w, 3) w przypadku obrazów RGB oraz (h, w) lub (1, h, w) w przypadku obrazów w skali szarości
colorSpaceType
Rzuca
Wyjątek IllegalArgument jeśli kształt bufora nie jest zgodny z typem przestrzeni kolorów lub jeśli typ przestrzeni kolorów nie jest obsługiwany

publiczne puste ładowanie (mapa bitowa)

Ładuje obiekt obrazu Bitmap do tego TensorImage .

Uwaga: jeśli TensorImage ma typ danych inny niż DataType.UINT8 , podczas wywoływania funkcji getTensorBuffer() i getBuffer() zostaną zastosowane rzutowanie numeryczne i zaciskanie , gdzie Bitmap zostanie przekonwertowana na TensorBuffer .

Ważne: podczas ładowania mapy bitowej NIE MODYFIKUJ już mapy bitowej od strony wywołującej. Obiekt TensorImage będzie opierał się na mapie bitowej. Prawdopodobnie zmodyfikuje również bitmapę. W tej metodzie stosujemy metodę zerowej kopii dla tej mapy bitowej, po prostu utrzymując jej odniesienie. Użyj bitmap.copy(bitmap.getConfig(), true) aby utworzyć kopię, jeśli to konieczne.

Uwaga: aby uzyskać najlepszą wydajność, należy załadować obrazy w tym samym kształcie, aby uniknąć ponownej alokacji pamięci.

Parametry
bitmapa
Rzuca
Wyjątek IllegalArgument jeśli bitmap nie jest w ARGB_8888

publiczne obciążenie puste (int[] piksele, int[] kształt)

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

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

Parametry
pikseli piksele RGB reprezentujące obraz
kształt kształt obrazu powinien mieć formę (h, w, 3) lub formę (1, h, w, 3)
Rzuca
Wyjątek IllegalArgument jeśli kształt nie jest ani (h, w, 3), ani (1, h, w, 3)

publiczne obciążenie puste (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 metod getTensorBuffer() i getBuffer() zostaną zastosowane rzutowanie numeryczne i zaciskanie.

Parametry
pikseli piksele RGB reprezentujące obraz
kształt kształt obrazu powinien mieć formę (h, w, 3) lub formę (1, h, w, 3)
Rzuca
Wyjątek IllegalArgument jeśli kształt nie jest ani (h, w, 3), ani (1, h, w, 3)

publiczne puste ładowanie (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() zostaną zastosowane rzutowanie numeryczne i zaciskanie.

Parametry
bufor
Właściwości obrazu
Rzuca
Wyjątek IllegalArgument jeśli rozmiar buforu jest mniejszy niż rozmiar obrazu wskazany przez wysokość, szerokość i typ przestrzeni kolorów we ImageProperties

publiczne obciążenie puste (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 poprzez ImageProperties .

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

Parametry
bufor
Właściwości obrazu
Rzuca
Wyjątek IllegalArgument jeśli rozmiar buforu jest mniejszy niż rozmiar obrazu wskazany przez wysokość, szerokość i typ przestrzeni kolorów we ImageProperties

publiczne obciążenie puste (obraz obrazu)

Ł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 obsługiwany przez Image nie jest obsługiwany przez ImageProcessor .

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

Parametry
obraz