TensorImage é a classe wrapper para o objeto de imagem. Ao usar os utilitários de processamento de imagens na biblioteca TFLite.support, é comum primeiro converter objetos de imagem em tipos de variantes para o TensorImage.
No momento, apenas imagens RGB são compatíveis e o canal A é sempre ignorado.
Detalhes do armazenamento de dados: um objeto TensorImage
pode ter duas possíveis fontes de verdade: uma
Bitmap
ou uma TensorBuffer
. TensorImage
mantém o
estado e só converte um para o outro quando necessário. Um caso de uso típico de TensorImage
é primeiro carregar uma imagem Bitmap
, processá-la usando ImageProcessor
e, por fim, receber o ByteBuffer
subjacente do TensorBuffer
e alimentá-lo ao intérprete do TFLite.
IMPORTANTE: para ter o melhor desempenho, o TensorImage
evita copiar dados sempre que possível. Portanto, os dados não pertencem a ele. Autores de chamadas não podem modificar objetos de dados que são transmitidos para load(Bitmap)
ou load(TensorBuffer, ColorSpaceType)
.
IMPORTANTE: nenhum método é seguro para linhas de execução.
Construtores públicos
TensorImage()
Inicializa um objeto
TensorImage . |
|
Métodos públicos
estático TensorImage |
createFrom(TensorImage src, DataType dataType)
Cria uma cópia detalhada de um determinado
TensorImage com o tipo de dados desejado. |
estático TensorImage |
fromBitmap(Bitmap de bitmap)
|
Bitmap |
getBitmap()
Retorna uma representação
Bitmap desse TensorImage . |
ByteBuffer |
Função getBuffer()
Retorna uma representação
ByteBuffer desse TensorImage com o tipo de dados esperado. |
ColorSpaceType |
getColorSpaceType()
Recebe o tipo de espaço de cores desse
TensorImage . |
DataType |
Função getDataType()
Recebe o tipo de dados desse
TensorImage . |
int |
getHeight()
Recebe a altura da imagem.
|
Imagem |
getMediaImage()
Retorna uma representação
Image desse TensorImage . |
TensorBuffer |
getTensorBuffer()
Retorna uma representação
TensorBuffer desse TensorImage com o tipo de dados
esperado. |
int |
getWidth()
Recebe a largura da imagem.
|
void |
load(buffer TensorBuffer, ColorSpaceType colorSpaceType)
Carrega um
TensorBuffer contendo valores de pixel com o ColorSpaceType específico. |
void |
load(bitmap de bitmap)
Carrega um objeto de imagem
Bitmap neste TensorImage . |
void |
load(int[] pixels, int[] forma)
Carrega uma matriz int como pixels RGB neste
TensorImage , representando os pixels dentro dela. |
void |
load(flutuação[] pixels, int[] forma)
Carrega uma matriz flutuante como pixels RGB neste
TensorImage , representando os pixels
dentro dela. |
void |
load(buffer ByteBuffer, ImageProperties imageProperties)
Carrega um
ByteBuffer contendo valores de pixel com o ImageProperties específico. |
void |
load(buffer TensorBuffer, ImageProperties imageProperties)
Carrega um
TensorBuffer contendo valores de pixel com o ImageProperties específico. |
void |
load(imagem da imagem)
Carrega um objeto
Image nesse TensorImage . |
Métodos herdados
Construtores públicos
pública TensorImage ()
Inicializa um objeto TensorImage
.
Observação: o tipo de dados desse TensorImage
é DataType.UINT8
. Use TensorImage(DataType)
se outros tipos de dados forem preferidos.
público TensorImage (DataType dataType)
Inicializa um objeto TensorImage
com o tipo de dados especificado.
Ao receber um TensorBuffer
ou um ByteBuffer
desse TensorImage
, como ao usar getTensorBuffer()
e getBuffer()
, os valores de dados serão convertidos para o tipo de dados especificado.
Observação: a forma de uma TensorImage
não é fixa. Ele pode ser ajustado de acordo com a forma da
imagem que está sendo carregada no TensorImage
.
Parâmetros
dataType | o tipo de dados esperado do TensorBuffer resultante. O tipo é sempre fixo durante o ciclo de vida da TensorImage . Para converter o tipo de dados, use
createFrom(TensorImage, DataType) para criar uma cópia e converter o tipo de dados ao
mesmo tempo. |
---|
Gera
IllegalArgumentException | se dataType não for DataType.UINT8 nem DataType.FLOAT32
|
---|
Métodos públicos
público estático TensorImage createFrom (TensorImage src, DataType dataType)
Cria uma cópia detalhada de um determinado TensorImage
com o tipo de dados desejado.
Parâmetros
src | o TensorImage que será copiado |
---|---|
dataType | o tipo de dados esperado das TensorImage recém-criadas |
Retorna
- Uma
TensorImage
com dados copiados desrc
, e o tipo de dados édataType
.
público estático TensorImage fromBitmap (Bitmap bitmap)
Inicializa um objeto TensorImage
de DataType.UINT8
com um Bitmap
.
Parâmetros
bitmap |
---|
public Bitmap getBitmap ()
Retorna uma representação Bitmap
desse TensorImage
.
A transmissão numérica e a restrição serão aplicadas se os dados armazenados não forem uint8.
A maneira confiável de receber pixels de um bitmap ALPHA_8
é usar copyPixelsToBuffer
. Métodos de bitmap, como `setPixels()` e `getPixels`, não funcionam.
Importante: é apenas uma referência. NÃO MODIFICAR. Não criaremos uma cópia aqui para questão de desempenho. No entanto, se a modificação for necessária, faça uma cópia.
Retorna
- uma referência a um
Bitmap
na configuraçãoARGB_8888
(o canal A é sempre opaco) ou emALPHA_8
, dependendo doColorSpaceType
dessaTensorBuffer
;
Gera
IllegalStateException | se TensorImage nunca carregar dados.
|
---|
public ByteBuffer getBuffer ()
Retorna uma representação ByteBuffer
desse TensorImage
com o tipo de dados esperado.
O cast e a restrição numéricos serão aplicados se os dados armazenados forem diferentes do tipo
de dados de TensorImage
.
Importante: é apenas uma referência. NÃO MODIFICAR. Não criaremos uma cópia aqui para questão de desempenho. No entanto, se a modificação for necessária, faça uma cópia.
É essencialmente um atalho para getTensorBuffer().getBuffer()
.
Retorna
- Uma referência a um
ByteBuffer
que contém os dados da imagem.
Gera
IllegalStateException | se TensorImage nunca carregar dados.
|
---|
public ColorSpaceType getColorSpaceType ()
Recebe o tipo de espaço de cores desse TensorImage
.
Gera
IllegalStateException | se TensorImage nunca carregar dados.
|
---|
público DataType getDataType ()
Recebe o tipo de dados desse TensorImage
.
Retorna
- um tipo de dado. Atualmente, apenas
DataType.UINT8
eDataType.FLOAT32
são compatíveis.
public int getHeight ()
Recebe a altura da imagem.
Gera
IllegalStateException | se TensorImage nunca carregar dados. |
---|---|
IllegalArgumentException | se os dados estiverem corrompidos |
public Imagem getMediaImage ()
Retorna uma representação Image
desse TensorImage
.
Esse método só funciona quando o TensorImage
tem o suporte de um Image
, o que significa que você precisa primeiro carregar um Image
usando load(Image)
.
Importante: é apenas uma referência. NÃO MODIFICAR. Não criaremos uma cópia aqui para questão de desempenho. No entanto, se a modificação for necessária, faça uma cópia.
Retorna
- uma referência a um
Bitmap
na configuraçãoARGB_8888
(o canal A é sempre opaco) ou emALPHA_8
, dependendo doColorSpaceType
dessaTensorBuffer
;
Gera
IllegalStateException | se TensorImage nunca carregar dados.
|
---|
público TensorBuffer getTensorBuffer ()
Retorna uma representação TensorBuffer
desse TensorImage
com o tipo de dados
esperado.
O cast e a restrição numéricos serão aplicados se os dados armazenados forem diferentes do tipo
de dados de TensorImage
.
Importante: é apenas uma referência. NÃO MODIFICAR. Não criaremos uma cópia aqui para questão de desempenho. No entanto, se a modificação for necessária, faça uma cópia.
Retorna
- Uma referência a um
TensorBuffer
que contém os dados da imagem.
Gera
IllegalStateException | se TensorImage nunca carregar dados.
|
---|
public int getWidth ()
Recebe a largura da imagem.
Gera
IllegalStateException | se TensorImage nunca carregar dados. |
---|---|
IllegalArgumentException | se os dados estiverem corrompidos |
public void load (buffer TensorBuffer, ColorSpaceType colorSpaceType)
Carrega um TensorBuffer
contendo valores de pixel com o ColorSpaceType
específico.
Compatível apenas com ColorSpaceType.RGB
e ColorSpaceType.GRAYSCALE
. Use load(TensorBuffer, ImageProperties)
para outros tipos de espaço de cores.
Observação: se o tipo de dados de buffer
não corresponder ao tipo deste TensorImage
, a transmissão e a restrição numérica serão aplicadas ao chamar getTensorBuffer()
e getBuffer()
.
Parâmetros
buffer | o TensorBuffer que será carregado. O formato precisa ser (h, w, 3) ou
(1, h, w, 3) para imagens RGB e (h, w) ou (1, h, w) para imagens GRAYSCALE |
---|---|
colorSpaceType |
Gera
IllegalArgumentException | se a forma do buffer não corresponder ao tipo de espaço de cores ou se o tipo de espaço de cores não for compatível. |
---|
public void load (Bitmap bitmap)
Carrega um objeto de imagem Bitmap
neste TensorImage
.
Observação: se o TensorImage
tiver um tipo de dados diferente de DataType.UINT8
, a transmissão numérica e a restrição serão aplicadas ao chamar getTensorBuffer()
e getBuffer()
, em que Bitmap
será convertido em TensorBuffer
.
Importante: ao carregar um bitmap, NÃO MODIFICA mais o bitmap do lado do autor da chamada. O
objeto TensorImage
dependerá do bitmap. Provavelmente, o bitmap também será modificado.
Nesse método, realizamos uma abordagem de cópia zero para esse bitmap, simplesmente mantendo a
referência dele. Use bitmap.copy(bitmap.getConfig(), true)
para criar uma cópia, se necessário.
Observação: para ter o melhor desempenho, carregue imagens no mesmo formato para evitar a realocação de memória.
Parâmetros
bitmap |
---|
Gera
IllegalArgumentException | se bitmap não estiver em ARGB_8888
|
---|
public void load (int[] pixels, int[] shape)
Carrega uma matriz int como pixels RGB neste TensorImage
, representando os pixels dentro dela.
Observação: o cast e a restrição numérica serão aplicados para converter os valores no tipo de dados
deste TensorImage
ao chamar getTensorBuffer()
e getBuffer()
.
Parâmetros
pixels | os pixels RGB que representam a imagem |
---|---|
shape | o formato da imagem deve estar no formato (h, w, 3) ou (1, h, w, 3) |
Gera
IllegalArgumentException | se a forma não for (h, w, 3) nem (1, h, w, 3) |
---|
public void load (float[] pixels, int[] shape)
Carrega uma matriz flutuante como pixels RGB neste TensorImage
, representando os pixels
dentro dela.
Observação: se o TensorImage
tiver um tipo de dados diferente de DataType.FLOAT32
, a transmissão numérica e a restrição serão aplicadas ao chamar getTensorBuffer()
e getBuffer()
.
Parâmetros
pixels | os pixels RGB que representam a imagem |
---|---|
shape | o formato da imagem deve estar no formato (h, w, 3) ou (1, h, w, 3) |
Gera
IllegalArgumentException | se a forma não for (h, w, 3) nem (1, h, w, 3) |
---|
public void load (buffer ByteBuffer, ImageProperties imageProperties)
Carrega um ByteBuffer
contendo valores de pixel com o ImageProperties
específico.
Observação: se o tipo de dados de buffer
não corresponder ao tipo deste TensorImage
, a transmissão e a restrição numérica serão aplicadas ao chamar getTensorBuffer()
e getBuffer()
.
Parâmetros
buffer | |
---|---|
imageProperties |
Gera
IllegalArgumentException | se o tamanho do buffer for menor que o tamanho indicado pela altura,
largura e tipo de espaço de cor da imagem em ImageProperties
|
---|
public void load (buffer TensorBuffer, ImageProperties imageProperties)
Carrega um TensorBuffer
contendo valores de pixel com o ImageProperties
específico.
O formato do TensorBuffer
não vai ser usado para determinar a altura e a largura da imagem.
Defina as propriedades da imagem usando ImageProperties
.
Observação: se o tipo de dados de buffer
não corresponder ao tipo deste TensorImage
, a transmissão e a restrição numérica serão aplicadas ao chamar getTensorBuffer()
e getBuffer()
.
Parâmetros
buffer | |
---|---|
imageProperties |
Gera
IllegalArgumentException | se o tamanho do buffer for menor que o tamanho indicado pela altura,
largura e tipo de espaço de cor da imagem em ImageProperties
|
---|
public void load (Imagem da imagem)
Carrega um objeto Image
nesse TensorImage
.
O principal uso desse método é carregar um objeto Image
como entrada de modelo para https://www.tensorflow.org/lite/inference_with_metadata/task_library/overview.
O TensorImage
com suporte de Image
não é compatível com ImageProcessor
.
* @gera uma IllegalArgumentException se o ImageFormat
de image
não for YUV_420_888.
Parâmetros
imagem |
---|