1

我目前正在研究基于前端实时摄像头的面部检测解决方案。到目前为止,我已经找到了 3 个适合我需要的库

1. https://github.com/auduno/clmtrackr

2. https://www.beyond-reality-face.com/overview

3. https://trackingjs.com/

所有 3 看起来都是可能的解决方案,但 tracking.js 和 clmtrackr 似乎在较大的播放器尺寸下显着减慢(我希望尽可能接近全屏应用程序,即使这意味着我需要在屏幕尺寸上硬编码) . 超越现实的面子很棒,但不幸的是,相关的价格标签有点超出我的资源。有没有人有过在 JS 中进行全屏人脸跟踪的经验?我很好奇我正在寻找的东西是否无法使用那里的开源解决方案(不一定是特征检测)。

谢谢!

4

2 回答 2

1

我正在做类似的事情。我的第一次尝试是使用 tracking.js,但正如你所说,大尺寸的性能下降(很多!)......只是在 Chrome 中,但我需要它在 Chrome 中正常工作,因为我的目标是让它成为一个应用程序NW.js。

这种缺乏性能是每帧跟踪的结果(我认为),所以我尝试修改 tracking.js 代码,改变跟踪频率(requestAnimationFrame_里面的函数trackVideo_就像它在这个网站中显示的那样:http ://creativejs.com /resources/requestanimationframe/),但我对结果不是很满意。

最后我使用了一个相当古老的库,在这里解释:http: //liuliu.me/eyes/javascript-face-detection-explained(webRTC 在他们的示例中使用:https ://webrtc.github.io/samples/ src/content/getusermedia/face)它满足了我的需求,使用 setTimeout 跟踪面部。

我仍在测试,但结果很有希望!

于 2016-05-12T15:26:29.740 回答
0

这是几年前的一个问题,但由于我在我的一个客户项目中使用了trackingjs,所以我想插话。

我有一个 2017 MBP,trackingjs 没有太多问题,尽管我对视频的每一帧都做了一些自定义计算。

在内部 trackingjs 创建一个画布并通过将视频的每一帧渲染到画布来完成所有识别。我办公室里有些人的笔记本电脑比我的大 3 年以上,我们注意到他们笔记本电脑的性能大幅下降。这导致我在试图提高性能方面搞得一团糟,结果比你想象的要容易得多。

在 trackingjs 的源代码中,找到这个函数tracking.trackVideo_。这通过requestAnimationFrame我提到的那个循环来实现。

在该函数中,您会立即注意到以下代码块:

var resizeCanvas_ = function() {
  width = element.offsetWidth;
  height = element.offsetHeight;
  canvas.width = width;
  canvas.height = height;
};

如果您将画布高度和宽度设置为小于视频播放器大小,性能将大大提高。对我来说,我设置了canvas.width = width/2;canvas.height = height/2;然后就成功了!

于 2018-04-26T18:37:43.870 回答