0

我正在尝试使用 node.js 在服务器端(本地)加载图像,以便我可以在它们上运行分割功能。

在 BodyPix README 中,它声明 segmentPerson 函数接受 ImageData 对象图像:“segmentPerson() 图像中的参数 - ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement 要通过网络馈送的输入图像。” https://github.com/tensorflow/tfjs-models/tree/master/body-pix

这是我的代码:

var bodyPix = require("@tensorflow-models/body-pix");
var tfjs = require("@tensorflow/tfjs")
var inkjet = require('inkjet');
var createCanvas = require('canvas');
var fs = require('fs');

async function loadAndPredict(data) {
        const net = await bodyPix.load({
            architecture: 'MobileNetV1',
            outputStride: 16,
            multiplier: 0.75,
            quantBytes: 2
    });

    imgD = createCanvas.createImageData(new Uint8ClampedArray(data.data), data.width, data.height);
    const segmentation = await net.segmentPerson(imgD, {
    flipHorizontal: false,
    internalResolution: 'medium',
    segmentationThreshold: 0.7
    });
    const maskImage = bodyPix.toMask(segmentation, false);
}

inkjet.decode(fs.readFileSync('./person.jpg'), function(err, data) {
    if (err) throw err;
    console.log('OK: Image');
    loadAndPredict(data)
  });

它从我的当前目录加载图像,然后将其转换为指定的 ImageData 格式,然后将其提供给 segmentPerson 函数。与图像的加载和格式化无关的一半代码已从 GitHub README 中删除,并且在使用 HTML Image 元素时对我有用。

但是,它在调用“net.segmentPerson(imgD,...”) 时返回未知输入类型:[object ImageData]

我无法找到解决此问题的方法,因此非常感谢任何帮助或指导。谢谢你。

4

1 回答 1

0

检查这个回购:https ://github.com/ajaichemmanam/Posenet-NodeServer

Posenet(Bodypix 使用它)用于 nodejs 服务器脚本。您可以在此处查看图像是如何加载并用于posenet估计的

于 2020-03-05T17:41:31.800 回答