NodeJS 使用Face-api.js检测表面时出错,媒体类型应为HTMLImageElement| HTML视频元素|HTML画布元素

qoefvg9y  于 2023-01-01  发布在  Node.js
关注(0)|答案(1)|浏览(302)

我不明白应该如何将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) );
}
pxq42qpu

pxq42qpu1#

我也遇到了同样的问题,我发现我没有向detectSingleFace()函数发送正确的参数,我不知道代码中的 * image * 值里面有什么(在加载图像之后),但要确保发送的是HTML元素(Video、Canvas或Image)。
例如:

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

请注意,图像应该是base64。
如果问题仍然存在,您可以尝试运行repo项目,看看数据是如何处理的,至少这对我来说是有效的examples-browser文件夹。
希望这对你有帮助,

相关问题