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;
}