我使用 @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: 东部时间 ode_modules@tensorflow fjs-core\dist f-core.node.js:3166:55 在 G: 东部时间 ode_modules@tensorflow fjs-core\dist f-core.node.js:2989:22 在 Engine.scopedRun (G: est ode_modules@tensorflow fjs-core\dist f-core.node.js:2999:23) 在 Engine.tidy (G: est ode_modules@tensorflow fjs-core\dist f-core.node.js:2988:21) 在 kernelFunc (G: est ode_modules@tensorflow fjs-core\dist f-core.node.js:3166:29) 在 G: 东部时间 ode_modules@tensorflow fjs-core\dist f-core.node.js:3187:27 在 Engine.scopedRun (G: est ode_modules@tensorflow fjs-core\dist f-core.node.js:2999:23) 在 Engine.runKernelFunc (G: est ode_modules@tensorflow fjs-core\dist f-core.node.js:3183:14) at mul_ (G: est ode_modules ace-api.js ode_modules@tensorflow fjs-core\dist\ops inary_ops.js:327:28) 在 Object.mul (G: est ode_modules ace-api.js ode_modules@tensorflow fjs-core\dist\ops\operation.js:46: 29) (使用
node --trace-warnings ...
显示警告的创建位置)
(节点:3496)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这个错误是由 throw 引起的
在没有 catch 块的异步函数内部,或者拒绝未使用 .cat 处理的 Promise
ch()。要在未处理的 Promise 拒绝时终止节点进程,请使用 CLI 标志 --unhandled-rejections=strict
(请参阅 https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。 (拒绝 ID:1)
(节点:3496)[DEP0018] DeprecationWarning:未处理的承诺拒绝已被弃用。将来,未处理的 Promise 拒绝将会以非零退出代码终止 Node.js 进程
当我删除“ require('@tensorflow/tfjs-node'); ”时,代码可以完美运行,但我需要导入 @tensorflow/tfjs-node 以使过程更快
节点: v14.15.4
npm: 10.6.14
@tensorflow/tfjs-node: v3.0.0 Python 2.7.15(@tensorflow/tfjs-node 所需)
face-api.js: v0.22.2
提前感谢:)
您使用的face-api.js版本与tfjs 2.0+或3.0+不兼容,仅兼容过时的1.x。 为什么在添加 tfjs-node 之前它就有效?因为face-api.js实际上包含tfjs-core 1.x的捆绑版本。添加 tfjs-node 后,它会覆盖全局 tf 命名空间,但它是一个更新的版本并且不兼容。
您必须安装过时的 tfjs-node 1.x 或按照他们给出的指示使用支持 TF 2.0 的较新的face-api.js 端口。
如果你有这个版本 "face-api.js": "0.22.2", 它的要求 face-api.js 版本 0.22.2 需要 TensorFlow.js 版本 1.x,但最近更新的 TensorFlow.js(版本 3.x 或更高版本)与face-api.js 不兼容。 你必须使用 npm install @tensorflow/[电子邮件受保护]
对我来说效果很好