【发布时间】:2021-05-03 12:59:46
【问题描述】:
我使用 @tensorflow/tfjs-node 包作为 face-api.js 包来加快速度(正如他们所说) 那是我的代码:
// import nodejs bindings to native tensorflow,
// not required, but will speed up things drastically (python required)
require('@tensorflow/tfjs-node');
// implements nodejs wrappers for HTMLCanvasElement, HTMLImageElement, ImageData
const { loadImage,Canvas, Image, ImageData } = require('canvas')
const faceapi = require('face-api.js');
// patch nodejs environment, we need to provide an implementation of
// HTMLCanvasElement and HTMLImageElement
faceapi.env.monkeyPatch({ Canvas, Image, ImageData })
// patch nodejs environment, we need to provide an implementation of
// HTMLCanvasElement and HTMLImageElement
faceapi.env.monkeyPatch({ Canvas, Image, ImageData })
Promise.all([
faceapi.nets.ssdMobilenetv1.loadFromDisk('./models'),
faceapi.nets.faceRecognitionNet.loadFromDisk('./models'),
faceapi.nets.faceLandmark68Net.loadFromDisk('./models')
])
.then(async () => {
const image1= await loadImage("https://enigmatic-waters-76106.herokuapp.com/1.jpeg")
const image2= await loadImage("https://enigmatic-waters-76106.herokuapp.com/8.jpeg")
const result = await faceapi.detectSingleFace(image1).withFaceLandmarks()
.withFaceDescriptor()
const singleResult = await faceapi
.detectSingleFace(image2)
.withFaceLandmarks()
.withFaceDescriptor()
const labeledDescriptors = [
new faceapi.LabeledFaceDescriptors(
'saied',
[result.descriptor]
)
]
const faceMatcher = new faceapi.FaceMatcher(labeledDescriptors)
const bestMatch = faceMatcher.findBestMatch(singleResult.descriptor)
console.log(labeledDescriptors[0].descriptors)
})
当我运行代码时出现此错误
TypeError: forwardFunc_1 不是函数
在 G:\test\node_modules@tensorflow\tfjs-core\dist\tf-core.node.js:3166:55
在 G:\test\node_modules@tensorflow\tfjs-core\dist\tf-core.node.js:2989:22
在 Engine.scopedRun (G:\test\node_modules@tensorflow\tfjs-core\dist\tf-core.node.js:2999:23)
在 Engine.tidy (G:\test\node_modules@tensorflow\tfjs-core\dist\tf-core.node.js:2988:21)
在 kernelFunc (G:\test\node_modules@tensorflow\tfjs-core\dist\tf-core.node.js:3166:29)
在 G:\test\node_modules@tensorflow\tfjs-core\dist\tf-core.node.js:3187:27
在 Engine.scopedRun (G:\test\node_modules@tensorflow\tfjs-core\dist\tf-core.node.js:2999:23)
在 Engine.runKernelFunc (G:\test\node_modules@tensorflow\tfjs-core\dist\tf-core.node.js:3183:14)
在 mul_ (G:\test\node_modules\face-api.js\node_modules@tensorflow\tfjs-core\dist\ops\binary_ops.js:327:28)
在 Object.mul (G:\test\node_modules\face-api.js\node_modules@tensorflow\tfjs-core\dist\ops\operation.js:46:
29)
(使用node --trace-warnings ... 显示警告的创建位置)
(节点:3496)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于 throw
在没有 catch 块的异步函数内部,或者通过拒绝未使用 .cat 处理的承诺
通道()。要在未处理的 Promise 拒绝时终止节点进程,请使用 CLI 标志 --unhandled-rejections=strict(请参阅 https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。 (拒绝编号:1)
(节点:3496)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将终止 Node.js 进程并使用非零退出代码
当我删除“require('@tensorflow/tfjs-node');”时,代码运行良好,但我需要导入@tensorflow/tfjs-node 以加快进程
节点: v14.15.4
npm: 6.14.10
@tensorflow/tfjs-node: v3.0.0 Python 2.7.15(@tensorflow/tfjs-node 需要)
face-api.js: v0.22.2
提前感谢:)
【问题讨论】:
-
所以错误不是来自您的代码?
-
正如我所说,如果删除这个 (require('@tensorflow/tfjs-node');) 代码将起作用,但给我一个提示,我应该在我的加快进程的代码
-
我隐含的意思是:“我们怎样才能调试一个简单的'import'?”,如果你只导入
@tensorflow/tfjs-node,会出现同样的错误吗? -
@SimonDehaut 这让我很困惑,简单的一行 require('@tensorflow/tfjs-node') 是什么导致了错误
-
对不起我的英语不好:)
标签: javascript node.js tensorflow face-recognition face-api