private static Tensor doImageTransforms()

in react-native-pytorch-core/android/src/main/java/org/pytorch/rn/core/ml/processing/BaseIValuePacker.java [601:659]


  private static Tensor doImageTransforms(final JSONArray jarray, final IImage image)
      throws JSONException {
    final int n = jarray.length();

    final ArrayList<ImageTransformObject> imageTransforms = new ArrayList<>();
    for (int i = 0; i < n; ++i) {
      final JSONObject jobject = jarray.getJSONObject(i);
      imageTransforms.add(
          new ImageTransformObject(
              jobject.getString(JSON_TYPE), jobject.getString(JSON_NAME), jobject));
    }

    final Image cameraImage = image.getImage();
    final int cameraImageRotationDegrees = image.getImageRotationDegrees();

    if (cameraImage != null && cameraImage.getFormat() == ImageFormat.YUV_420_888) {
      final @Nullable Tensor tensor =
          doCameraImageTransforms(imageTransforms, cameraImage, cameraImageRotationDegrees);
      if (tensor != null) {
        return tensor;
      }
    }

    Object x = image.getBitmap();
    for (int i = 0; i < n; ++i) {
      final ImageTransformObject ito = imageTransforms.get(i);

      if (IMAGE_TRANSFORM_TYPE_IMAGE.equals(ito.type)) {
        IImageTransform transform = null;
        switch (ito.name) {
          case IMAGE_TRANSFORM_IMAGE_CENTER_CROP:
            transform = CenterCropTransform.parse(ito.jobject);
            break;
          case IMAGE_TRANSFORM_IMAGE_SCALE:
            transform = ScaleTransform.parse(ito.jobject);
            break;
        }
        if (transform == null) {
          throw new IllegalArgumentException("Unknown image_to_image transform");
        }
        x = transform.transform((Bitmap) x);
      } else if (IMAGE_TRANSFORM_TYPE_TENSOR.equals(ito.type)) {
        IImageToTensorTransform transform = null;
        switch (ito.name) {
          case IMAGE_TRANSFORM_TENSOR_RGB_NORM:
            transform = RgbNormTransform.parse(ito.jobject);
            break;
          case IMAGE_TRANSFORM_TENSOR_GREYSCALE_NORM:
            transform = GreyScaleNormTransform.parse(ito.jobject);
            break;
        }
        if (transform == null) {
          throw new IllegalArgumentException("Unknown image_to_tensor transform");
        }
        x = transform.transform((Bitmap) x);
      }
    }
    return (Tensor) x;
  }