我想在服务器端使用人脸检测。因此,我为此任务找到了face-api.js。
我发现每次faceapi.detectAllFaces()
的通话持续约10秒。
但是,当我启动browser-example时,只有第一个函数持续10秒,所有下一个函数持续不到一秒。
我的服务器端代码(您可以在ageAndGenderRecognition.ts中看到类似的代码):
import * as faceapi from 'face-api.js';
import { canvas, faceDetectionNet, faceDetectionOptions, saveFile } from './commons';
await faceDetectionNet.loadFromDisk('../../weights')
await faceapi.nets.faceLandmark68Net.loadFromDisk('../../weights')
await faceapi.nets.ageGenderNet.loadFromDisk('../../weights')
const img = await canvas.loadImage('../images/bbt1.jpg')
console.time();
const results = await faceapi.detectAllFaces(img, faceDetectionOptions);
// ~10 seconds.
console.timeEnd();
console.time();
const results2 = await faceapi.detectAllFaces(img, faceDetectionOptions);
// ~10 seconds again.
console.timeEnd();
为什么browser-example中的
faceapi.detectAllFaces()
(首次 call 除外)比ageAndGenderRecognition.ts更快?我可以对faceapi.detectAllFaces()
-function做哪些类似的事情,并且速度相同? 最佳答案
您的nodejs示例代码运行10 s可能有某些原因:
浏览器中的第一次调用之所以花费如此长的时间,并不是由于实际的预测时间。这是因为使用tfjs的WebGL后端,在第一次运行(预热运行)时,所有着色器程序都会被编译,这会花费很长时间。之后,将它们缓存。浏览器中的预测仅需几毫秒,因为WebGL后端是GPU加速的。浏览器中的10s预热时间与您在nodejs中看到的预测时间完全无关。