Classe de driver para impulsionar a inferência de modelo com o TensorFlow Lite.
Observação: se você não precisa acessar as opções os recursos da API abaixo, prefira usar InterpreterApi e InterpreterFactory em vez de usar o Interpreter diretamente.
Um Interpreter
encapsula um modelo do TensorFlow Lite pré-treinado, em que as operações
são executados para inferência de modelos.
Por exemplo, se um modelo usa apenas uma entrada e retorna apenas uma saída:
try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
interpreter.run(input, output);
}
Se um modelo usa várias entradas ou saídas:
Object[] inputs = {input0, input1, ...};
Map<Integer, Object> map_of_indices_to_outputs = new HashMap<>();
FloatBuffer ith_output = FloatBuffer.allocateDirect(3 * 2 * 4); // Float tensor, shape 3x2x4.
ith_output.order(ByteOrder.nativeOrder());
map_of_indices_to_outputs.put(i, ith_output);
try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
interpreter.runForMultipleInputsOutputs(inputs, map_of_indices_to_outputs);
}
Se um modelo usa ou produz tensores de string:
String[] input = {"foo", "bar"}; // Input tensor shape is [2].
String[][] output = new String[3][2]; // Output tensor shape is [3, 2].
try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
interpreter.runForMultipleInputsOutputs(input, output);
}
Há uma distinção entre formato [] e forma[1]. Para tensor de string escalar saídas:
String[] input = {"foo"}; // Input tensor shape is [1].
ByteBuffer outputBuffer = ByteBuffer.allocate(OUTPUT_BYTES_SIZE); // Output tensor shape is [].
try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
interpreter.runForMultipleInputsOutputs(input, outputBuffer);
}
byte[] outputBytes = new byte[outputBuffer.remaining()];
outputBuffer.get(outputBytes);
// Below, the `charset` can be StandardCharsets.UTF_8.
String output = new String(outputBytes, charset);
As ordens de entradas e saídas são determinadas ao converter o modelo do TensorFlow para o TensorFlowLite com o Toco, assim como as formas padrão das entradas.
Quando as entradas são fornecidas como matrizes (multidimensionais), os tensores de entrada correspondentes
ser redimensionadas implicitamente de acordo com a forma dessa matriz. Quando as entradas são fornecidas como Buffer
tipos, nenhum redimensionamento implícito é feito; o autor da chamada precisa garantir que o tamanho de byte Buffer
corresponde ao tensor correspondente ou que primeiro eles redimensionam o tensor usando resizeInput(int, int[])
. As informações de formato e tipo do tensor podem ser recebidas usando a classe Tensor
, disponível em getInputTensor(int)
e getOutputTensor(int)
.
AVISO:as instâncias de Interpreter
não são seguras para linhas de execução. Um Interpreter
tem recursos que precisam ser liberados explicitamente invocando close()
A biblioteca TFLite foi criada com a API NDK 19. Pode funcionar para APIs do Android de níveis anteriores ao 19, mas isso não é garantido.
Classes aninhadas
classe | Interpreter.Options | Uma classe de opções para controlar o comportamento do interpretador em tempo de execução. |
Construtores públicos
Interpreter(opções de Arquivo modelFile, Interpreter.Options)
Inicializa um
Interpreter e especifica opções para personalizar o comportamento do intérprete. |
|
Interpretador(byteBuffer ByteBuffer)
Inicializa um
Interpreter com um ByteBuffer de um arquivo de modelo. |
|
Interpreter(byteBuffer do ByteBuffer, opções Interpreter.Options)
Inicializa um
Interpreter com um ByteBuffer de um arquivo de modelo e um conjunto de
um Interpreter.Options personalizado. |
Métodos públicos
void |
allocateTensors()
Atualiza explicitamente as alocações de todos os tensores, se necessário.
|
void |
close()
Liberar recursos associados à instância
InterpreterApi . |
int | |
Tensor |
getInputTensor(int inputIndex)
Recebe o tensor associado ao índice de entrada fornecido.
|
int |
getInputTensorCount()
Recebe o número de tensores de entrada.
|
Tensor |
getInputTensorFromSignature(String inputName, String signatureKey)
Recebe o tensor associado ao nome de entrada e ao nome do método de assinatura fornecidos.
|
Longo |
getLastNativeInferenceDurationNanoseconds()
Retorna o tempo de inferência nativa.
|
int | |
Tensor |
getOutputTensor(int outputIndex)
Recebe o tensor associado ao índice de saída fornecido.
|