Tensorflow Js - 使用因子调整图像大小

TensorflowJs - Rescale image with factor

是否可以使用 TensorflowJs 在 Javascript 中实现相同的 Python 操作?

from tensorflow.keras.preprocessing.image import ImageDataGenerator

test_datagen = ImageDataGenerator(rescale=1./255) # NOTE: Re-scaling operation as part of the pre-processing step

我正在尝试 运行 浏览器中的自定义模型,但在我可以将其提供给 tensorflowjs 之前需要这个预处理步骤。它要求我将图像重新缩放 1/255 倍。

知道如何实现吗?

我找不到 tersorflowjs 的任何内容,所以决定尝试 opencvjs,但我不太确定这是否具有相同的效果:

function rescaleImg(img, canvasId) {
      const src = cv.imread(img);

      let dst = new cv.Mat();

      let dsize = new cv.Size(
        parseFloat((src.rows * (1 / 255)) / 100),
        parseFloat((src.cols * (1 / 255)) / 100)
      );

      cv.resize(src, dst, dsize, 1 / 255, 1 / 255, cv.INTER_AREA);

      cv.imshow(canvasId, dst);
      src.delete();
      dst.delete();
    }

然后我将图像传递给 tensorflowjs,例如:

const shapeX = 150;
const shapeY = 150;
rescaleImg(image, id);
const canvas = document.getElementById(id);

tensor = tf.browser
 .fromPixels(canvas)
 .resizeNearestNeighbor([shapeX, shapeY])
 .expandDims(0)
 .toFloat();
}

const prediction = await model.predict(tensor).data();

到目前为止,我已经使用 opencvJs 解决了以下问题:

function rescaleImg(img, canvasId) {
      try {
        const src = cv.imread(img);

        let dst = new cv.Mat();

        let dsize = new cv.Size(src.rows, src.cols);

        cv.resize(src, dst, dsize, 1 / 255, 1 / 255, cv.INTER_AREA);

        cv.imshow(canvasId, dst);
        src.delete();
        dst.delete();
      } catch (e) {
        console.log("Error running resize ", e);
        throw e;
      }
    }

“rescale”和“resize”是两种不同的操作。 “rescale”修改像素值,而“resize”修改图像大小(是的,因为插值也是像素值,但这只是副作用)。

要在 OpenCV 中“重新缩放”图像,您可以使用 convertTo 和可选的缩放因子。

此外,当您重新缩放时,您需要确保使用正确的基础数据类型来保存新值。

像这样的东西应该可以工作:

const src = cv.imread(img);
let dst = new cv.Mat();

// rescale by 1/255, and hold values in a matrix with float32 data type
src.convertTo(dst, cv.CV_32F, 1./255.); 

cv.imshow(canvasId, dst);