Interpreter

aula final pública Intérprete

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

Intérprete(arquivo modelFile)
Inicializa um Interpreter.
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
getInputIndex(String opName)
Recebe o índice de uma entrada conforme o nome da operação.
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
getOutputIndex(String opName)
Recebe o índice de uma saída, de acordo com o nome da operação.
Tensor
getOutputTensor(int outputIndex)
Recebe o tensor associado ao índice de saída fornecido.