使用face-api.js包(node.js)时导入@tensorflow/tfjs-node时出现问题

问题描述 投票:0回答:2

我使用 @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

提前感谢:)

javascript node.js tensorflow face-recognition face-api
2个回答
2
投票

正如 在这个 github 问题中所解释的那样

您使用的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 端口


0
投票

如果你有这个版本 "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/[电子邮件受保护]

对我来说效果很好

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.