public static void main()

in tensorflow-examples-legacy/object_detection/src/main/java/DetectObjects.java [45:95]


  public static void main(String[] args) throws Exception {
    if (args.length < 3) {
      printUsage(System.err);
      System.exit(1);
    }
    final String[] labels = loadLabels(args[1]);
    try (SavedModelBundle model = SavedModelBundle.load(args[0], "serve")) {
      printSignature(model);
      for (int arg = 2; arg < args.length; arg++) {
        final String filename = args[arg];
        List<Tensor<?>> outputs = null;
        try (Tensor<UInt8> input = makeImageTensor(filename)) {
          outputs =
              model
                  .session()
                  .runner()
                  .feed("image_tensor", input)
                  .fetch("detection_scores")
                  .fetch("detection_classes")
                  .fetch("detection_boxes")
                  .run();
        }
        try (Tensor<Float> scoresT = outputs.get(0).expect(Float.class);
            Tensor<Float> classesT = outputs.get(1).expect(Float.class);
            Tensor<Float> boxesT = outputs.get(2).expect(Float.class)) {
          // All these tensors have:
          // - 1 as the first dimension
          // - maxObjects as the second dimension
          // While boxesT will have 4 as the third dimension (2 sets of (x, y) coordinates).
          // This can be verified by looking at scoresT.shape() etc.
          int maxObjects = (int) scoresT.shape()[1];
          float[] scores = scoresT.copyTo(new float[1][maxObjects])[0];
          float[] classes = classesT.copyTo(new float[1][maxObjects])[0];
          float[][] boxes = boxesT.copyTo(new float[1][maxObjects][4])[0];
          // Print all objects whose score is at least 0.5.
          System.out.printf("* %s\n", filename);
          boolean foundSomething = false;
          for (int i = 0; i < scores.length; ++i) {
            if (scores[i] < 0.5) {
              continue;
            }
            foundSomething = true;
            System.out.printf("\tFound %-20s (score: %.4f)\n", labels[(int) classes[i]], scores[i]);
          }
          if (!foundSomething) {
            System.out.println("No objects detected with a high enough score.");
          }
        }
      }
    }
  }