Interface Translator<I,O>

Type Parameters:
I - the input type
O - the output type
All Superinterfaces:
PostProcessor<O>, PreProcessor<I>
All Known Subinterfaces:
NoBatchifyTranslator<I,O>, ServingTranslator, StreamingTranslator<I,O>
All Known Implementing Classes:
BaseImageTranslator, BasicTranslator, BigGANTranslator, CrossEncoderServingTranslator, ImageClassificationTranslator, ImageFeatureExtractor, ImageServingTranslator, InstanceSegmentationTranslator, NoopTranslator, ObjectDetectionTranslator, QaServingTranslator, QATranslator, SemanticSegmentationTranslator, SimplePoseTranslator, SimpleText2TextTranslator, SingleShotDetectionTranslator, SpeechRecognitionTranslator, StyleTransferTranslator, TextClassificationServingTranslator, TextEmbeddingServingTranslator, TokenClassificationServingTranslator, YoloTranslator, YoloV5Translator, YoloV8Translator

public interface Translator<I,O> extends PreProcessor<I>, PostProcessor<O>
The Translator interface provides model pre-processing and postprocessing functionality.

Users can use this in Predictor with input and output objects specified. The recommended flow is to use the Translator to translate only a single data item at a time (Record) rather than a Batch. For example, the input parameter would then be Image rather than Image[]. The Records will then be combined using a Batchifier. If it is easier in your use case to work with batches directly or your model uses records instead of batches, you can use the NoBatchifyTranslator.

The following is an example of processing an image and creating classification output:

 private static final class MyTranslator implements Translator<Image, Classification> {

     private int imageWidth;
     private int imageHeight;

     public MyTranslator(int imageWidth, int imageHeight) {
         this.imageWidth = imageWidth;
         this.imageHeight = imageHeight;
     }

     @Override
     public NDList processInput(TranslatorContext ctx, Image input) {
         NDArray imageND = input.toNDArray(ctx.getNDManager());
         return new NDList(NDImageUtils.resize(imageND, imageWidth, imageHeight);
     }

     @Override
     public Classification processOutput(TranslatorContext ctx, NDList list) throws TranslateException {
         Model model = ctx.getModel();
         NDArray array = list.get(0).at(0);
         NDArray sorted = array.argSort(-1, false);
         NDArray top = sorted.at(0);

         float[] probabilities = array.toFloatArray();
         int topIndex = top.toIntArray()[0];

         String[] synset;
         try {
             synset = model.getArtifact("synset.txt", MyTranslator::loadSynset);
         } catch (IOException e) {
             throw new TranslateException(e);
         }
         return new Classification(synset[topIndex], probabilities[topIndex]);
     }

     private static String[] loadSynset(InputStream is) {
         ...
     }
 }
 
  • Method Details

    • getBatchifier

      default Batchifier getBatchifier()
      Returns the Batchifier.
      Returns:
      the Batchifier
    • prepare

      default void prepare(TranslatorContext ctx) throws Exception
      Prepares the translator with the manager and model to use.
      Parameters:
      ctx - the context for the Predictor.
      Throws:
      Exception - if there is an error for preparing the translator
    • getExpansions

      default TranslatorOptions getExpansions()
      Returns possible TranslatorOptions that can be built using this Translator.
      Returns:
      possible options or null if not defined
    • toBatchTranslator

      default Translator<I[],O[]> toBatchTranslator()
      Returns a batch translator.
      Returns:
      a batch translator
    • toBatchTranslator

      default Translator<I[],O[]> toBatchTranslator(Batchifier batchifier)
      Returns a batch translator.
      Parameters:
      batchifier - the Batchifier to use
      Returns:
      a batch translator