tensorflowjs 中的 decodePng 抛出形状错误

decodePng in tensorflowjs throws shape error

我正在尝试学习教程,只想在 TensorFlowJS 中加载图像。

import * as tf from '@tensorflow/tfjs-node';
import fs from 'fs';

(async () => {
  const desk = fs.readFileSync(__dirname + '/' + 'desk.png');
  const buf = Buffer.from(desk);
  const imageArray = new Uint8Array(buf);
  const pngDecodedTensor = tf.node.decodePng(imageArray);
})();

当我运行上面的代码时,我看到这个错误:

The shape of dict['image_tensor'] provided in model.execute(dict) must be [-1,-1,-1,3], but was [1,4032,3024,4]

图像为 3024x4032 和 10.4MB

感谢您的帮助

您可能想尝试这样的 fromPixels 函数:

const { Image } = require('canvas')

// From a buffer:
fs.readFile('images/squid.png', (err, squid) => {
  if (err) throw err
  const img = new Image()
  img.onload = () => ctx.drawImage(img, 0, 0)
  img.onerror = err => { throw err }
  img.src = squid
})

// From a local file path:
const img = new Image()
img.onload = () => ctx.drawImage(img, 0, 0)
img.onerror = err => { throw err }
img.src = 'images/squid.png'

// From a remote URL:
img.src = 'http://picsum.photos/200/300'
// ... as above

var imgAsTensor = tf.fromPixels(img);
// ... now use it as you wish.

您可以在此处了解有关此功能的更多信息:

问题与进行预测时的张量形状有关。 该模型需要一个具有 3 个通道的张量,而作为参数传递的时态具有 4 个通道。

张量可以被切片以仅使用其 4 个通道中的 3 个。

pngDecodedTensor = tf.node.decodePng(imageArray).slice([0], [-1, -1, 3])