首页 > 解决方案 > BodyPix - 在 node.js 中运行 toMask() 和 toColoredPartMask() 会引发错误:未定义 ImageData

问题描述

我正在尝试在 TensorFlowJS bodypix 模型中获得分段的人部分彩色蒙版。下面的代码在 toColoredPartMask 或 toMask 之前可以正常工作,这会引发错误“ImageData is not defined”。

const tfjsnode = require('@tensorflow/tfjs-node')
const bodyPix = require('@tensorflow-models/body-pix');
const fs = require('fs');

setTimeout(async () => {
    maskImageWithBodyPix().then(response => {
        console.log(response)
    }).catch(e => {
        console.log("Error => " + e)
    })
}, 1000)

async function maskImageWithBodyPix(image = readImage("./person.jpeg")) {
    
    console.log("loadModel ...");
    if (image == null)
        return Promise.resolve("Image Not Found...")
    const resNet = {
        architecture: 'ResNet50',
        outputStride: 16,
        quantBytes: 4
    };
    let bodyModel = await bodyPix.load(resNet)

    console.log("segmentPersonParts ...");
    let segmentedPersonParts = await bodyModel.segmentPersonParts(image, {
        flipHorizontal: false,
        internalResolution: 'full',
        segmentationThreshold: 0.5,
    })
    console.log(`ImageHeight: ${segmentedPersonParts.height} | ImageWidth: ${segmentedPersonParts.width}`)
    console.log("toMaskImageData ...")
    const maskedImageData = bodyPix.toColoredPartMask(segmentedPersonParts, false);

    console.log(`maskedImageData = ${maskedImageData}`)
    
    return Promise.resolve(true)
}

const readImage = path => {
    console.log(`readImage ...`)
    if (!fs.existsSync(path))
        return null
    const imageBuffer = fs.readFileSync(path);
    const tfimage = tfjsnode.node.decodeImage(imageBuffer);
    return tfimage;
}

标签: node.jstensorflow.jsmasking

解决方案


推荐阅读