javascript - face-api.js - 为什么浏览器的 faceapi.detectAllFaces() 比服务器的快?
问题描述
我想在我的服务器端使用人脸检测。因此,我为这个任务找到了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();
为什么faceapi.detectAllFaces()
(第一次调用除外)在浏览器示例中比在ageAndGenderRecognition.ts中更快?我可以对我的faceapi.detectAllFaces()
-function 做哪些类似的事情具有相同的速度?
解决方案
您的 nodejs 示例代码运行 10 秒可能有一些原因:
您根本没有导入@tensorflow/tfjs-node,在这种情况下,tfjs 不使用本机 Tensorflow CPU 后端,CPU 上的操作将花费更长的时间。
您正在导入 @tensorflow/tfjs-node 但 face-api.js 的 tfjs-core 版本与您通过 npm 安装的 @tensorflow/tfjs-node 版本之间存在版本不匹配。在这种情况下,tfjs 将显示一条警告消息。
一切都设置正确,但你的 CPU 非常慢。在这种情况下,您可以尝试使用@tensorflow/tfjs-node-gpu(如果您有兼容 CUDA 的 nvidia GPU),也可以将 faceDetectionOptions 更改为新的 faceapi.TinyFaceDetectorOptions(),这将运行 TinyFaceDetector 而不是默认值SSD Mobilenet v1 模型,速度更快。
浏览器中的第一次调用需要这么长时间的原因并不是因为实际的预测时间。这是因为使用 tfjs 的 WebGL 后端,在第一次运行(预热运行)时,所有的着色器程序都被编译,这需要很长时间。之后这些被缓存。浏览器中的预测只需要几毫秒,因为 WebGL 后端是 GPU 加速的。浏览器中的 10 秒预热时间和您在 nodejs 中看到的预测时间完全不相关。
推荐阅读
- azure - Azure PostgreSQL 是否支持自定义证书而不是用户名和密码?
- arrays - Typescript:字符串联合和具有相同项目类型的完整数组的DRY定义
- sql-server - 如何找到分布在 SQL Server 中多行的数据的第一个和最后一个数据点
- javascript - bootstrap 4的轮播的实现不起作用
- reactjs - 来自 StyleSheet 的 React Font Awesome 样式不起作用
- sql - 创建所需的脚本
- reactjs - 带有反应模板的 Asp.net 核心 Web 应用程序:在开发中,服务器首先检查 mvc 路由,但在生产中服务器仅返回 index.html
- ios - 从 tableviewcel 触发 performSegue 在 iOS14 中不再工作
- sql - Oracle PL/SQL SUM OVER( ) 从某行开始
- php - Magento 2. 文件未上传。(DomainException(code: 0) - Mageplaza 客户属性 - 单个文件附件