我不明白如何将HTMLImageElement发送到face-api.js的检测例程。
我正在为此实现使用node-red

我有这个错误:


  UnhandledPromiseRejectionWarning: Error: toNetInput - expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id at /root/.node-red/node_modules/tfjs-image-recognition-base/build/commonjs/dom/toNetInput.js


这是我正在使用的代码:

var fa = global.get('faceapi');
var ca = global.get('canvas');

const {Image, loadImage, ImageData,createCanvas,HTMLCanvasElement,HTMLImageElement } = ca;

fa.env.monkeyPatch({
   Image: HTMLImageElement
})

//Load all the models ...
Promise.all([
fa.nets.ssdMobilenetv1.loadFromDisk('/home/models'),
fa.nets.faceRecognitionNet.loadFromDisk('/home/models'),
fa.nets.faceLandmark68Net.loadFromDisk('/home/models'),
]).then(Detector).catch((error) =>  node.warn(error));


function Detector(){
   ca.loadImage('URL OF MY PICTURE').then((image) =>
   {
           let detection = fa.detectSingleFace(image).withFaceLandmarks().withFaceDescriptor().then((detect) => {
               if(detect){
                       node.warn('DETECTED..!');
               }
           });
   }).catch((error) =>  node.warn(error) );
}

最佳答案

我遇到了同样的问题,发现我没有将正确的参数发送到detectSingleFace()函数。我不知道代码中的图像值里面是什么(加载图像后),但是请确保您正在发送HTML元素(视频,画布或图像)。

例如:

<img id="image" src="data:image/png;base64,iVB...." alt="image">


注意该映像应位于base64中。

如果问题仍然存在,则可以尝试运行repo项目并查看数据的处理方式,至少对于examples-browser文件夹而言,这对我有用。

希望这对您有帮助,

10-05 20:29