我正在尝试使用 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]
我无法找到解决此问题的方法,因此非常感谢任何帮助或指导。谢谢你。