Package ai.djl.translate
Interface Translator<I,O>
-
- Type Parameters:
I
- the input typeO
- the output type
- All Superinterfaces:
PostProcessor<O>
,PreProcessor<I>
- All Known Subinterfaces:
NoBatchifyTranslator<I,O>
,ServingTranslator
- All Known Implementing Classes:
BaseImageTranslator
,BigGANTranslator
,FileTranslator
,ImageClassificationTranslator
,ImageServingTranslator
,InputStreamTranslator
,InstanceSegmentationTranslator
,NoopTranslator
,ObjectDetectionTranslator
,QaServingTranslator
,QATranslator
,SemanticSegmentationTranslator
,SimplePoseTranslator
,SimpleText2TextTranslator
,SingleShotDetectionTranslator
,StyleTransferTranslator
,TextClassificationServingTranslator
,UrlTranslator
,YoloTranslator
,YoloV5Translator
public interface Translator<I,O> extends PreProcessor<I>, PostProcessor<O>
TheTranslator
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 beImage
rather thanImage[]
. TheRecord
s will then be combined using aBatchifier
. If it is easier in your use case to work with batches directly or your model uses records instead of batches, you can use theNoBatchifyTranslator
.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 Summary
All Methods Instance Methods Default Methods Modifier and Type Method Description default Batchifier
getBatchifier()
Gets theBatchifier
.default void
prepare(TranslatorContext ctx)
Prepares the translator with the manager and model to use.-
Methods inherited from interface ai.djl.translate.PostProcessor
processOutput
-
Methods inherited from interface ai.djl.translate.PreProcessor
processInput
-
-
-
-
Method Detail
-
getBatchifier
default Batchifier getBatchifier()
Gets theBatchifier
.- Returns:
- the
Batchifier
-
prepare
default void prepare(TranslatorContext ctx) throws java.lang.Exception
Prepares the translator with the manager and model to use.- Parameters:
ctx
- the context for thePredictor
.- Throws:
java.lang.Exception
- if there is an error for preparing the translator
-
-