I - the input typeO - the output typepublic interface Translator<I,O> extends PreProcessor<I>, PostProcessor<O>
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) {
...
}
}
| Modifier and Type | Method and Description |
|---|---|
default Batchifier |
getBatchifier()
Gets the
Batchifier. |
default void |
prepare(TranslatorContext ctx)
Prepares the translator with the manager and model to use.
|
processInputprocessOutputdefault Batchifier getBatchifier()
Batchifier.Batchifierdefault void prepare(TranslatorContext ctx) throws java.lang.Exception
ctx - the context for the Predictor.java.lang.Exception - if there is an error for preparing the translator