我在尝试检测图像中是否有人脸,因此使用了tensorflow JS和blazeface模型。但是在获取代码后,出现了以下错误:
Error: No backend found in registry. at Engine.getSortedBackends (/home/saren/project/spark/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:2928:19) at Engine.initializeBackendsAndReturnBest (/home/saren/project/spark/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:2937:35) at Engine.get [as backend] (/home/saren/project/spark/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:2743:31) at Engine.makeTensor (/home/saren/project/spark/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:3268:35) at makeTensor (/home/saren/project/spark/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:4087:19) at tensor (/home/saren/project/spark/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:4136:12) at Object.decodeWeights (/home/saren/project/spark/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:4400:27) at GraphModel.loadSync (/home/saren/project/spark/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:7410:34) at GraphModel.<anonymous> (/home/saren/project/spark/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:7385:52) at step (/home/saren/project/spark/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:77:23)
这是我的代码(我从文档中复制粘贴的):
module.exports = { blazeface: require('@tensorflow-models/blazeface'), async detectFace(imageLink) { const model = await this.blazeface.load(); const returnTensors = false; const predictions = await model.estimateFaces(imageLink, returnTensors); if (predictions.length > 0) { for (let i = 0; i < predictions.length; i++) { const start = predictions[i].topLeft; const end = predictions[i].bottomRight; const size = [end[0] - start[0], end[1] - start[1]]; // 在每个检测到的人脸上面渲染一个矩形。 ctx.fillRect(start[0], start[1], size[0], size[1]); } } }}
请记住,错误来自于以下这行代码 const model = await this.blazeface.load();
很多人提到版本问题,所以这是我的package.json的一个例子
"dependencies": { "@tensorflow-models/blazeface": "0.0.6", "@tensorflow/tfjs": "^3.0.0", "@tensorflow/tfjs-backend-cpu": "^3.0.0", "@tensorflow/tfjs-backend-webgl": "^3.0.0", "@tensorflow/tfjs-converter": "^3.0.0", "@tensorflow/tfjs-core": "^3.0.0" }
我使用的是Node版本14.8.0和npm版本6.14.7。这段代码应该在服务器上运行,因此我不希望它在前端工作。
回答:
看起来你可以做两件事。
安装@tensorflow/tfjs-node并使用 tf: require("@tensorflow/tfjs-node"),
或者你可以使用 this.tf.getBackend();
(即使是使用这个 tf: require("@tensorflow/tfjs")
)