是否可以使用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();发布于 2021-06-10 16:05:08
"rescale“和"resize”是两种不同的操作。"rescale“修改像素值,而”调整大小“修改图像大小(是的,也是因为插值而产生的像素值,但这只是一个副作用)。
要“刷新”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);发布于 2021-06-10 14:09:22
到目前为止,我已经习惯于使用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;
}
}https://stackoverflow.com/questions/67921779
复制相似问题