【问题标题】:decodePng in tensorflowjs throws shape errortensorflowjs中的decodePng抛出形状错误
【发布时间】:2020-02-09 00:35:04
【问题描述】:

我正在尝试学习教程,只想在 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

感谢您的帮助

【问题讨论】:

    标签: node.js typescript tensorflow.js


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      您可能想尝试这样的 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.
      

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

      【讨论】:

        猜你喜欢
        • 2020-04-29
        • 1970-01-01
        • 2020-01-24
        • 2017-08-31
        • 1970-01-01
        • 1970-01-01
        • 2017-03-01
        • 2019-08-29
        • 1970-01-01
        相关资源
        最近更新 更多