public final class **Interpreter** Driver class to drive model inference with TensorFlow Lite.

Note: If you don't need access to any of the "experimental" API features below, prefer to use
InterpreterApi and InterpreterFactory rather than using Interpreter directly.

A `Interpreter` encapsulates a pre-trained TensorFlow Lite model, in which operations
are executed for model inference.

For example, if a model takes only one input and returns only one output:

    try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
       interpreter.run(input, output);
     }
     
If a model takes multiple inputs or outputs:

    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);
     }
     
If a model takes or produces string tensors:

    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);
     }
     
Note that there's a distinction between shape \[\] and shape\[1\]. For scalar string tensor
outputs:

    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);
     
Orders of inputs and outputs are determined when converting TensorFlow model to TensorFlowLite
model with Toco, as are the default shapes of the inputs.

When inputs are provided as (multi-dimensional) arrays, the corresponding input tensor(s) will
be implicitly resized according to that array's shape. When inputs are provided as `Buffer`
types, no implicit resizing is done; the caller must ensure that the `Buffer` byte size
either matches that of the corresponding tensor, or that they first resize the tensor via `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#resizeInput(int,%20int[])`. Tensor shape and type information can be obtained via the `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Tensor` class, available via `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#getInputTensor(int)` and `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#getOutputTensor(int)`.

**WARNING:** `Interpreter` instances are **not** thread-safe. A `Interpreter`
owns resources that **must** be explicitly freed by invoking `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#close()`

The TFLite library is built against NDK API 19. It may work for Android API levels below 19,
but is not guaranteed.

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

### Nested Classes

|---|---|---|---|
| class | [Interpreter.Options](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter.Options) || An options class for controlling runtime interpreter behavior. |

### Public Constructors

|---|---|
|   | [Interpreter](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#Interpreter(java.io.File))([File](https://developer.android.com/reference/java/io/File.html) modelFile) Initializes an `Interpreter`. |
|   | [Interpreter](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#Interpreter(java.io.File,%20org.tensorflow.lite.Interpreter.Options))([File](https://developer.android.com/reference/java/io/File.html) modelFile, [Interpreter.Options](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter.Options) options) Initializes an `Interpreter` and specifies options for customizing interpreter behavior. |
|   | [Interpreter](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#Interpreter(java.nio.ByteBuffer))([ByteBuffer](https://developer.android.com/reference/java/nio/ByteBuffer.html) byteBuffer) Initializes an `Interpreter` with a `ByteBuffer` of a model file. |
|   | [Interpreter](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#Interpreter(java.nio.ByteBuffer,%20org.tensorflow.lite.Interpreter.Options))([ByteBuffer](https://developer.android.com/reference/java/nio/ByteBuffer.html) byteBuffer, [Interpreter.Options](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter.Options) options) Initializes an `Interpreter` with a `ByteBuffer` of a model file and a set of custom `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter.Options`. |

### Public Methods

|---|---|
| void | [allocateTensors](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#allocateTensors())() Explicitly updates allocations for all tensors, if necessary. |
| void | [close](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#close())() Release resources associated with the `InterpreterApi` instance. |
| int | [getInputIndex](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#getInputIndex(java.lang.String))([String](https://developer.android.com/reference/java/lang/String.html) opName) Gets index of an input given the op name of the input. |
| [Tensor](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Tensor) | [getInputTensor](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#getInputTensor(int))(int inputIndex) Gets the Tensor associated with the provided input index. |
| int | [getInputTensorCount](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#getInputTensorCount())() Gets the number of input tensors. |
| [Tensor](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Tensor) | [getInputTensorFromSignature](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#getInputTensorFromSignature(java.lang.String,%20java.lang.String))([String](https://developer.android.com/reference/java/lang/String.html) inputName, [String](https://developer.android.com/reference/java/lang/String.html) signatureKey) Gets the Tensor associated with the provided input name and signature method name. |
| [Long](https://developer.android.com/reference/java/lang/Long.html) | [getLastNativeInferenceDurationNanoseconds](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#getLastNativeInferenceDurationNanoseconds())() Returns native inference timing. |
| int | [getOutputIndex](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#getOutputIndex(java.lang.String))([String](https://developer.android.com/reference/java/lang/String.html) opName) Gets index of an output given the op name of the output. |
| [Tensor](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Tensor) | [getOutputTensor](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#getOutputTensor(int))(int outputIndex) Gets the Tensor associated with the provided output index. |
| int | [getOutputTensorCount](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#getOutputTensorCount())() Gets the number of output Tensors. |
| [Tensor](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Tensor) | [getOutputTensorFromSignature](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#getOutputTensorFromSignature(java.lang.String,%20java.lang.String))([String](https://developer.android.com/reference/java/lang/String.html) outputName, [String](https://developer.android.com/reference/java/lang/String.html) signatureKey) Gets the Tensor associated with the provided output name in specific signature method. |
| [String\[\]](https://developer.android.com/reference/java/lang/String.html) | [getSignatureInputs](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#getSignatureInputs(java.lang.String))([String](https://developer.android.com/reference/java/lang/String.html) signatureKey) Gets the list of SignatureDefs inputs for method `signatureKey`. |
| [String\[\]](https://developer.android.com/reference/java/lang/String.html) | [getSignatureKeys](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#getSignatureKeys())() Gets the list of SignatureDef exported method names available in the model. |
| [String\[\]](https://developer.android.com/reference/java/lang/String.html) | [getSignatureOutputs](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#getSignatureOutputs(java.lang.String))([String](https://developer.android.com/reference/java/lang/String.html) signatureKey) Gets the list of SignatureDefs outputs for method `signatureKey`. |
| void | [resetVariableTensors](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#resetVariableTensors())() Advanced: Resets all variable tensors to the default value. |
| void | [resizeInput](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#resizeInput(int,%20int[],%20boolean))(int idx, int\[\] dims, boolean strict) Resizes idx-th input of the native model to the given dims. |
| void | [resizeInput](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#resizeInput(int,%20int[]))(int idx, int\[\] dims) Resizes idx-th input of the native model to the given dims. |
| void | [run](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#run(java.lang.Object,%20java.lang.Object))([Object](https://developer.android.com/reference/java/lang/Object.html) input, [Object](https://developer.android.com/reference/java/lang/Object.html) output) Runs model inference if the model takes only one input, and provides only one output. |
| void | [runForMultipleInputsOutputs](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#runForMultipleInputsOutputs(java.lang.Object[],%20java.util.Map<java.lang.Integer,%20java.lang.Object>))([Object\[\]](https://developer.android.com/reference/java/lang/Object.html) inputs, [Map](https://developer.android.com/reference/java/util/Map.html)\<[Integer](https://developer.android.com/reference/java/lang/Integer.html), [Object](https://developer.android.com/reference/java/lang/Object.html)\> outputs) Runs model inference if the model takes multiple inputs, or returns multiple outputs. |
| void | [runSignature](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#runSignature(java.util.Map<java.lang.String,%20java.lang.Object>,%20java.util.Map<java.lang.String,%20java.lang.Object>))([Map](https://developer.android.com/reference/java/util/Map.html)\<[String](https://developer.android.com/reference/java/lang/String.html), [Object](https://developer.android.com/reference/java/lang/Object.html)\> inputs, [Map](https://developer.android.com/reference/java/util/Map.html)\<[String](https://developer.android.com/reference/java/lang/String.html), [Object](https://developer.android.com/reference/java/lang/Object.html)\> outputs) Same as `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#runSignature(java.util.Map<java.lang.String,%20java.lang.Object>,%20java.util.Map<java.lang.String,%20java.lang.Object>,%20java.lang.String)` but doesn't require passing a signatureKey, assuming the model has one SignatureDef. |
| void | [runSignature](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#runSignature(java.util.Map<java.lang.String,%20java.lang.Object>,%20java.util.Map<java.lang.String,%20java.lang.Object>,%20java.lang.String))([Map](https://developer.android.com/reference/java/util/Map.html)\<[String](https://developer.android.com/reference/java/lang/String.html), [Object](https://developer.android.com/reference/java/lang/Object.html)\> inputs, [Map](https://developer.android.com/reference/java/util/Map.html)\<[String](https://developer.android.com/reference/java/lang/String.html), [Object](https://developer.android.com/reference/java/lang/Object.html)\> outputs, [String](https://developer.android.com/reference/java/lang/String.html) signatureKey) Runs model inference based on SignatureDef provided through `signatureKey`. |
| void | [setCancelled](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#setCancelled(boolean))(boolean cancelled) Advanced: Interrupts inference in the middle of a call to `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#run(java.lang.Object,%20java.lang.Object)`. |

### Inherited Methods

From class java.lang.Object

|---|---|
| boolean | equals([Object](https://developer.android.com/reference/java/lang/Object.html) arg0) |
| final [Class](https://developer.android.com/reference/java/lang/Class.html)\<?\> | getClass() |
| int | hashCode() |
| final void | notify() |
| final void | notifyAll() |
| [String](https://developer.android.com/reference/java/lang/String.html) | toString() |
| final void | wait(long arg0, int arg1) |
| final void | wait(long arg0) |
| final void | wait() |

From interface [org.tensorflow.lite.InterpreterApi](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi)

|---|---|
| abstract void | [allocateTensors](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi#allocateTensors())() Explicitly updates allocations for all tensors, if necessary. |
| abstract void | [close](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi#close())() Release resources associated with the `InterpreterApi` instance. |
| static [InterpreterApi](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi) | [create](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi#create(java.io.File,%20org.tensorflow.lite.InterpreterApi.Options))([File](https://developer.android.com/reference/java/io/File.html) modelFile, [InterpreterApi.Options](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi.Options) options) Constructs an `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi` instance, using the specified model and options. |
| static [InterpreterApi](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi) | [create](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi#create(java.nio.ByteBuffer,%20org.tensorflow.lite.InterpreterApi.Options))([ByteBuffer](https://developer.android.com/reference/java/nio/ByteBuffer.html) byteBuffer, [InterpreterApi.Options](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi.Options) options) Constructs an `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi` instance, using the specified model and options. |
| abstract int | [getInputIndex](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi#getInputIndex(java.lang.String))([String](https://developer.android.com/reference/java/lang/String.html) opName) Gets index of an input given the op name of the input. |
| abstract [Tensor](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Tensor) | [getInputTensor](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi#getInputTensor(int))(int inputIndex) Gets the Tensor associated with the provided input index. |
| abstract int | [getInputTensorCount](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi#getInputTensorCount())() Gets the number of input tensors. |
| abstract [Long](https://developer.android.com/reference/java/lang/Long.html) | [getLastNativeInferenceDurationNanoseconds](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi#getLastNativeInferenceDurationNanoseconds())() Returns native inference timing. |
| abstract int | [getOutputIndex](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi#getOutputIndex(java.lang.String))([String](https://developer.android.com/reference/java/lang/String.html) opName) Gets index of an output given the op name of the output. |
| abstract [Tensor](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Tensor) | [getOutputTensor](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi#getOutputTensor(int))(int outputIndex) Gets the Tensor associated with the provided output index. |
| abstract int | [getOutputTensorCount](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi#getOutputTensorCount())() Gets the number of output Tensors. |
| abstract void | [resizeInput](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi#resizeInput(int,%20int[],%20boolean))(int idx, int\[\] dims, boolean strict) Resizes idx-th input of the native model to the given dims. |
| abstract void | [resizeInput](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi#resizeInput(int,%20int[]))(int idx, int\[\] dims) Resizes idx-th input of the native model to the given dims. |
| abstract void | [run](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi#run(java.lang.Object,%20java.lang.Object))([Object](https://developer.android.com/reference/java/lang/Object.html) input, [Object](https://developer.android.com/reference/java/lang/Object.html) output) Runs model inference if the model takes only one input, and provides only one output. |
| abstract void | [runForMultipleInputsOutputs](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi#runForMultipleInputsOutputs(java.lang.Object[],%20java.util.Map<java.lang.Integer,%20java.lang.Object>))([Object\[\]](https://developer.android.com/reference/java/lang/Object.html) inputs, [Map](https://developer.android.com/reference/java/util/Map.html)\<[Integer](https://developer.android.com/reference/java/lang/Integer.html), [Object](https://developer.android.com/reference/java/lang/Object.html)\> outputs) Runs model inference if the model takes multiple inputs, or returns multiple outputs. |

From interface java.lang.AutoCloseable

|---|---|
| abstract void | close() |

## Public Constructors

#### public
**Interpreter**
([File](https://developer.android.com/reference/java/io/File.html) modelFile)

Initializes an `Interpreter`.

##### Parameters

| modelFile | a File of a pre-trained TF Lite model. |
|---|---|

##### Throws

| [IllegalArgumentException](https://developer.android.com/reference/java/lang/IllegalArgumentException.html) | if `modelFile` does not encode a valid TensorFlow Lite model. |
|---|---|

#### public
**Interpreter**
([File](https://developer.android.com/reference/java/io/File.html) modelFile, [Interpreter.Options](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter.Options) options)

Initializes an `Interpreter` and specifies options for customizing interpreter behavior.

##### Parameters

| modelFile | a file of a pre-trained TF Lite model |
| options | a set of options for customizing interpreter behavior |
|---|---|

##### Throws

| [IllegalArgumentException](https://developer.android.com/reference/java/lang/IllegalArgumentException.html) | if `modelFile` does not encode a valid TensorFlow Lite model. |
|---|---|

#### public
**Interpreter**
([ByteBuffer](https://developer.android.com/reference/java/nio/ByteBuffer.html) byteBuffer)

Initializes an `Interpreter` with a `ByteBuffer` of a model file.

The ByteBuffer should not be modified after the construction of a `Interpreter`. The
`ByteBuffer` can be either a `MappedByteBuffer` that memory-maps a model file, or a
direct `ByteBuffer` of nativeOrder() that contains the bytes content of a model.

<br />

##### Parameters

| byteBuffer |   |
|---|---|

##### Throws

| [IllegalArgumentException](https://developer.android.com/reference/java/lang/IllegalArgumentException.html) | if `byteBuffer` is not a `MappedByteBuffer` nor a direct `ByteBuffer` of nativeOrder. |
|---|---|

#### public
**Interpreter**
([ByteBuffer](https://developer.android.com/reference/java/nio/ByteBuffer.html) byteBuffer, [Interpreter.Options](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter.Options) options)

Initializes an `Interpreter` with a `ByteBuffer` of a model file and a set of
custom `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter.Options`.

The `ByteBuffer` should not be modified after the construction of an `Interpreter`. The `ByteBuffer` can be either a `MappedByteBuffer` that memory-maps
a model file, or a direct `ByteBuffer` of nativeOrder() that contains the bytes content
of a model.

<br />

##### Parameters

| byteBuffer |   |
| options |   |
|---|---|

##### Throws

| [IllegalArgumentException](https://developer.android.com/reference/java/lang/IllegalArgumentException.html) | if `byteBuffer` is not a `MappedByteBuffer` nor a direct `ByteBuffer` of nativeOrder. |
|---|---|

## Public Methods

#### public void
**allocateTensors**
()

Explicitly updates allocations for all tensors, if necessary.

This will propagate shapes and memory allocations for dependent tensors using the input
tensor shape(s) as given.

Note: This call is \*purely optional\*. Tensor allocation will occur automatically during
execution if any input tensors have been resized. This call is most useful in determining the
shapes for any output tensors before executing the graph, e.g.,

     interpreter.resizeInput(0, new int[]{1, 4, 4, 3}));
     interpreter.allocateTensors();
     FloatBuffer input = FloatBuffer.allocate(interpreter.getInputTensor(0).numElements());
     // Populate inputs...
     FloatBuffer output = FloatBuffer.allocate(interpreter.getOutputTensor(0).numElements());
     interpreter.run(input, output)
     // Process outputs...

Note: Some graphs have dynamically shaped outputs, in which case the output shape may not
fully propagate until inference is executed.

<br />

<br />

<br />

#### public void
**close**
()

Release resources associated with the `InterpreterApi` instance.

#### public int
**getInputIndex**
([String](https://developer.android.com/reference/java/lang/String.html) opName)

Gets index of an input given the op name of the input.

##### Parameters

| opName |   |
|---|---|

#### public [Tensor](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Tensor)
**getInputTensor**
(int inputIndex)

Gets the Tensor associated with the provided input index.

##### Parameters

| inputIndex |   |
|---|---|

#### public int
**getInputTensorCount**
()

Gets the number of input tensors.

#### public [Tensor](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Tensor)
**getInputTensorFromSignature**
([String](https://developer.android.com/reference/java/lang/String.html) inputName, [String](https://developer.android.com/reference/java/lang/String.html) signatureKey)

Gets the Tensor associated with the provided input name and signature method name.

WARNING: This is an experimental API and subject to change.

<br />

##### Parameters

| inputName | Input name in the signature. |
| signatureKey | Signature key identifying the SignatureDef, can be null if the model has one signature. |
|---|---|

##### Throws

| [IllegalArgumentException](https://developer.android.com/reference/java/lang/IllegalArgumentException.html) | if `inputName` or `signatureKey` is null or empty, or invalid name provided. |
|---|---|

#### public [Long](https://developer.android.com/reference/java/lang/Long.html)
**getLastNativeInferenceDurationNanoseconds**
()

Returns native inference timing.

#### public int
**getOutputIndex**
([String](https://developer.android.com/reference/java/lang/String.html) opName)

Gets index of an output given the op name of the output.

##### Parameters

| opName |   |
|---|---|

#### public [Tensor](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Tensor)
**getOutputTensor**
(int outputIndex)

Gets the Tensor associated with the provided output index.

Note: Output tensor details (e.g., shape) may not be fully populated until after inference
is executed. If you need updated details \*before\* running inference (e.g., after resizing an
input tensor, which may invalidate output tensor shapes), use `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/InterpreterApi#allocateTensors()` to
explicitly trigger allocation and shape propagation. Note that, for graphs with output shapes
that are dependent on input \*values\*, the output shape may not be fully determined until
running inference.

<br />

##### Parameters

| outputIndex |   |
|---|---|

#### public int
**getOutputTensorCount**
()

Gets the number of output Tensors.

#### public [Tensor](https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Tensor)
**getOutputTensorFromSignature**
([String](https://developer.android.com/reference/java/lang/String.html) outputName, [String](https://developer.android.com/reference/java/lang/String.html) signatureKey)

Gets the Tensor associated with the provided output name in specific signature method.

Note: Output tensor details (e.g., shape) may not be fully populated until after inference
is executed. If you need updated details \*before\* running inference (e.g., after resizing an
input tensor, which may invalidate output tensor shapes), use `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#allocateTensors()` to
explicitly trigger allocation and shape propagation. Note that, for graphs with output shapes
that are dependent on input \*values\*, the output shape may not be fully determined until
running inference.

WARNING: This is an experimental API and subject to change.

<br />

<br />

##### Parameters

| outputName | Output name in the signature. |
| signatureKey | Signature key identifying the SignatureDef, can be null if the model has one signature. |
|---|---|

##### Throws

| [IllegalArgumentException](https://developer.android.com/reference/java/lang/IllegalArgumentException.html) | if `outputName` or `signatureKey` is null or empty, or invalid name provided. |
|---|---|

#### public [String\[\]](https://developer.android.com/reference/java/lang/String.html)
**getSignatureInputs**
([String](https://developer.android.com/reference/java/lang/String.html) signatureKey)

Gets the list of SignatureDefs inputs for method `signatureKey`.

WARNING: This is an experimental API and subject to change.

<br />

##### Parameters

| signatureKey |   |
|---|---|

#### public [String\[\]](https://developer.android.com/reference/java/lang/String.html)
**getSignatureKeys**
()

Gets the list of SignatureDef exported method names available in the model.

WARNING: This is an experimental API and subject to change.

<br />

#### public [String\[\]](https://developer.android.com/reference/java/lang/String.html)
**getSignatureOutputs**
([String](https://developer.android.com/reference/java/lang/String.html) signatureKey)

Gets the list of SignatureDefs outputs for method `signatureKey`.

WARNING: This is an experimental API and subject to change.

<br />

##### Parameters

| signatureKey |   |
|---|---|

#### public void
**resetVariableTensors**
()

Advanced: Resets all variable tensors to the default value.

If a variable tensor doesn't have an associated buffer, it will be reset to zero.

WARNING: This is an experimental API and subject to change.

<br />

<br />

#### public void
**resizeInput**
(int idx, int\[\] dims, boolean strict)

Resizes idx-th input of the native model to the given dims.

When \`strict\` is True, only unknown dimensions can be resized. Unknown dimensions are
indicated as \`-1\` in the array returned by \`Tensor.shapeSignature()\`.

<br />

##### Parameters

| idx |   |
| dims |   |
| strict |   |
|---|---|

#### public void
**resizeInput**
(int idx, int\[\] dims)

Resizes idx-th input of the native model to the given dims.

##### Parameters

| idx |   |
| dims |   |
|---|---|

#### public void
**run**
([Object](https://developer.android.com/reference/java/lang/Object.html) input, [Object](https://developer.android.com/reference/java/lang/Object.html) output)

Runs model inference if the model takes only one input, and provides only one output.

Warning: The API is more efficient if a `Buffer` (preferably direct, but not required)
is used as the input/output data type. Please consider using `Buffer` to feed and fetch
primitive data for better performance. The following concrete `Buffer` types are
supported:

- `ByteBuffer` - compatible with any underlying primitive Tensor type.
- `FloatBuffer` - compatible with float Tensors.
- `IntBuffer` - compatible with int32 Tensors.
- `LongBuffer` - compatible with int64 Tensors.

Note that boolean types are only supported as arrays, not `Buffer`s, or as scalar inputs.

<br />

<br />

##### Parameters

| input | an array or multidimensional array, or a `Buffer` of primitive types including int, float, long, and byte. `Buffer` is the preferred way to pass large input data for primitive types, whereas string types require using the (multi-dimensional) array input path. When a `Buffer` is used, its content should remain unchanged until model inference is done, and the caller must ensure that the `Buffer` is at the appropriate read position. A `null` value is allowed only if the caller is using a `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Delegate` that allows buffer handle interop, and such a buffer has been bound to the input `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Tensor`. |
| output | a multidimensional array of output data, or a `Buffer` of primitive types including int, float, long, and byte. When a `Buffer` is used, the caller must ensure that it is set the appropriate write position. A null value is allowed, and is useful for certain cases, e.g., if the caller is using a `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Delegate` that allows buffer handle interop, and such a buffer has been bound to the output `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Tensor` (see also [Interpreter.Options#setAllowBufferHandleOutput(boolean)](https://www.tensorflow.org/lite/api_docs/java/org/tensorflow/lite/Interpreter.Options#setAllowBufferHandleOutput(boolean))), or if the graph has dynamically shaped outputs and the caller must query the output `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Tensor` shape after inference has been invoked, fetching the data directly from the output tensor (via `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Tensor#asReadOnlyBuffer()`). |
|---|---|

#### public void
**runForMultipleInputsOutputs**
([Object\[\]](https://developer.android.com/reference/java/lang/Object.html) inputs, [Map](https://developer.android.com/reference/java/util/Map.html)\<[Integer](https://developer.android.com/reference/java/lang/Integer.html), [Object](https://developer.android.com/reference/java/lang/Object.html)\> outputs)

Runs model inference if the model takes multiple inputs, or returns multiple outputs.

Warning: The API is more efficient if `Buffer`s (preferably direct, but not required)
are used as the input/output data types. Please consider using `Buffer` to feed and fetch
primitive data for better performance. The following concrete `Buffer` types are
supported:

- `ByteBuffer` - compatible with any underlying primitive Tensor type.
- `FloatBuffer` - compatible with float Tensors.
- `IntBuffer` - compatible with int32 Tensors.
- `LongBuffer` - compatible with int64 Tensors.

Note that boolean types are only supported as arrays, not `Buffer`s, or as scalar inputs.

Note: `null` values for invididual elements of `inputs` and `outputs` is
allowed only if the caller is using a `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Delegate` that allows buffer handle interop, and
such a buffer has been bound to the corresponding input or output `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Tensor`(s).

<br />

<br />

##### Parameters

| inputs | an array of input data. The inputs should be in the same order as inputs of the model. Each input can be an array or multidimensional array, or a `Buffer` of primitive types including int, float, long, and byte. `Buffer` is the preferred way to pass large input data, whereas string types require using the (multi-dimensional) array input path. When `Buffer` is used, its content should remain unchanged until model inference is done, and the caller must ensure that the `Buffer` is at the appropriate read position. |
| outputs | a map mapping output indices to multidimensional arrays of output data or `Buffer`s of primitive types including int, float, long, and byte. It only needs to keep entries for the outputs to be used. When a `Buffer` is used, the caller must ensure that it is set the appropriate write position. The map may be empty for cases where either buffer handles are used for output tensor data, or cases where the outputs are dynamically shaped and the caller must query the output `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Tensor` shape after inference has been invoked, fetching the data directly from the output tensor (via `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Tensor#asReadOnlyBuffer()`). |
|---|---|

#### public void
**runSignature**
([Map](https://developer.android.com/reference/java/util/Map.html)\<[String](https://developer.android.com/reference/java/lang/String.html), [Object](https://developer.android.com/reference/java/lang/Object.html)\> inputs, [Map](https://developer.android.com/reference/java/util/Map.html)\<[String](https://developer.android.com/reference/java/lang/String.html), [Object](https://developer.android.com/reference/java/lang/Object.html)\> outputs)

Same as `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#runSignature(java.util.Map<java.lang.String,%20java.lang.Object>,%20java.util.Map<java.lang.String,%20java.lang.Object>,%20java.lang.String)` but doesn't require passing a signatureKey,
assuming the model has one SignatureDef. If the model has more than one SignatureDef it will
throw an exception.

WARNING: This is an experimental API and subject to change.

<br />

##### Parameters

| inputs |   |
| outputs |   |
|---|---|

#### public void
**runSignature**
([Map](https://developer.android.com/reference/java/util/Map.html)\<[String](https://developer.android.com/reference/java/lang/String.html), [Object](https://developer.android.com/reference/java/lang/Object.html)\> inputs, [Map](https://developer.android.com/reference/java/util/Map.html)\<[String](https://developer.android.com/reference/java/lang/String.html), [Object](https://developer.android.com/reference/java/lang/Object.html)\> outputs, [String](https://developer.android.com/reference/java/lang/String.html) signatureKey)

Runs model inference based on SignatureDef provided through `signatureKey`.

See `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#run(java.lang.Object,%20java.lang.Object)` for more details on the allowed input and output
data types.

WARNING: This is an experimental API and subject to change.

<br />

<br />

##### Parameters

| inputs | A map from input name in the SignatureDef to an input object. |
| outputs | A map from output name in SignatureDef to output data. This may be empty if the caller wishes to query the `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Tensor` data directly after inference (e.g., if the output shape is dynamic, or output buffer handles are used). |
| signatureKey | Signature key identifying the SignatureDef. |
|---|---|

##### Throws

| [IllegalArgumentException](https://developer.android.com/reference/java/lang/IllegalArgumentException.html) | if `inputs` is null or empty, if `outputs` or `signatureKey` is null, or if an error occurs when running inference. |
|---|---|

#### public void
**setCancelled**
(boolean cancelled)

Advanced: Interrupts inference in the middle of a call to `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter#run(java.lang.Object,%20java.lang.Object)`.

A cancellation flag will be set to true when this function gets called. The interpreter will
check the flag between Op invocations, and if it's `true`, the interpreter will stop
execution. The interpreter will remain a cancelled state until explicitly "uncancelled" by
`setCancelled(false)`.

WARNING: This is an experimental API and subject to change.

<br />

<br />

##### Parameters

| cancelled | `true` to cancel inference in a best-effort way; `false` to resume. |
|---|---|

##### Throws

| [IllegalStateException](https://developer.android.com/reference/java/lang/IllegalStateException.html) | if the interpreter is not initialized with the cancellable option, which is by default off. |
|---|---|

##### See Also

- `https://developers.google.com/edge/api/tflite/java/org/tensorflow/lite/Interpreter.Options#setCancellable(boolean)`