【问题标题】:How to pass image (from image URL) to tensorflow tf.fromPixels method如何将图像(来自图像 URL)传递给 tensorflow tf.fromPixels 方法
【发布时间】:2021-09-05 11:53:02
【问题描述】:

尝试按照我下面的代码将图像(来自 url)传递到 tf.fromPixels 方法,但收到此错误:

Error: pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32 Array, width: number, height: number}, but was Image

代码:

const tf = require("@tensorflow/tfjs");
require("@tensorflow/tfjs-node")
const { Image } = require("canvas");


async function load() {
  const img = new Image();
  img.src = 'https://www.google.com/favicon.ico';
  img.onload = () => {
    const output = tf.browser.fromPixels(img);
  }
}

load();

如何将图像 URL 转换为一种可接受的格式(例如 HTMLImageElement),以便 tensorflow 可以读取它?请指教。

【问题讨论】:

    标签: javascript node.js tensorflow tensorflow.js


    【解决方案1】:

    我假设这是一个NodeJS 项目?

    在这种情况下,不要同时导入tfjstfjs-node,只导入tfjs-node

    并且tf.browser.* 方法在 NodeJS 中不可用 - 就像命名空间所表明的那样,它们仅适用于浏览器,因为它们依赖于浏览器本身来解码图像数据和读取像素

    但是NodeJStf.node.* 命名空间下还有其他可用的方法

    例如,即使没有 Canvas,您也可以使用它从 URL 加载图像,只需要 fetch(例如 node-fetch 或类似的东西)

    const res = await fetch(url);
    const buffer = res && res.ok ? await res.buffer() : null;
    const tensor = tf.tidy(() => {
      const decode = tf.node.decodeImage(buffer, 3);
      const expand = tf.expandDims(decode, 0);
      return expand;
    });
    

    【讨论】:

      猜你喜欢
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      • 1970-01-01
      相关资源
      最近更新 更多