BowlerKernel
FaceFeatureTranslator.java
Go to the documentation of this file.
1 package com.neuronrobotics.bowlerkernel.djl;
2 
3 import ai.djl.modality.cv.Image;
4 import ai.djl.modality.cv.transform.Normalize;
5 import ai.djl.modality.cv.transform.ToTensor;
6 import ai.djl.ndarray.NDArray;
7 import ai.djl.ndarray.NDList;
8 import ai.djl.translate.Pipeline;
9 import ai.djl.translate.Translator;
10 import ai.djl.translate.TranslatorContext;
11 
12 public class FaceFeatureTranslator implements Translator<Image, float[]> {
13 
15  }
16 
18  @Override
19  public NDList processInput(TranslatorContext ctx, Image input) {
20  NDArray array = input.toNDArray(ctx.getNDManager(), Image.Flag.COLOR);
21  Pipeline pipeline = new Pipeline();
22  pipeline
23  // .add(new Resize(160))
24  .add(new ToTensor())
25  .add(new Normalize(new float[] { 127.5f / 255.0f, 127.5f / 255.0f, 127.5f / 255.0f },
26  new float[] { 128.0f / 255.0f, 128.0f / 255.0f, 128.0f / 255.0f }));
27 
28  return pipeline.transform(new NDList(array));
29  }
30 
32  @Override
33  public float[] processOutput(TranslatorContext ctx, NDList list) {
34  NDList result = new NDList();
35  long numOutputs = list.singletonOrThrow().getShape().get(0);
36  for (int i = 0; i < numOutputs; i++) {
37  result.add(list.singletonOrThrow().get(i));
38  }
39  float[][] embeddings = result.stream().map(NDArray::toFloatArray).toArray(float[][]::new);
40  float[] feature = new float[embeddings.length];
41  for (int i = 0; i < embeddings.length; i++) {
42  feature[i] = embeddings[i][0];
43  }
44  return feature;
45  }
46 }
NDList processInput(TranslatorContext ctx, Image input)
float[] processOutput(TranslatorContext ctx, NDList list)