我现在正在玩一点,所以,据我所知,最基本的技术是:
- 您请求使用用户的网络摄像头拍摄视频。
- 获得许可后,创建一个用于放置视频的画布。
- 您在视频上使用过滤器(黑白)。
- 您在画布框架中放置了一些控制点(其中注册了所有像素颜色的小区域)
- 你开始为每一帧附加一个函数(为了解释的目的,我只演示左右手势)
在每一帧:
- 如果帧是第一个 (F0) 继续
- 如果不是:我们从前一帧中减去当前帧的像素(Fn)
- 如果 Fn 和 F(n-1) 之间没有移动,则所有像素都是黑色的
- 如果有,您将看到差异 Delta = Fn - F(n-1) 为白色像素
- 然后你可以测试你的控制点哪些区域被点亮并存储它们(**)x = DeltaN
重复相同的操作,直到您有两个或多个 Deltas 变量,然后从控制点 Delta(n-1) 中减去控制点 DeltaN,您将得到一个向量
- ( **)x = DeltaN
- ( ** )x = Delta(N-1)
- ( +2 )x = DeltaN - Delta(N-1)
您现在可以测试向量是正还是负,或者测试这些值是否优于您选择的某个值
if positive on x and value > 5
并触发一个事件,然后监听它:
$(document).trigger('MyPlugin/MoveLeft', values)
$(document).on('MyPlugin/MoveLeft', doSomething)
您可以通过缓存向量或添加它们来大大提高精度,并且仅在向量值变为合理值时触发事件。
您也可以在第一次减法时预期一个形状,并尝试映射“手”或“盒子”并聆听形状坐标的变化,但请记住手势是 3D 的,分析是 2D 的,所以相同的形状可以移动时改变。
这里有一个更准确的解释。希望我的解释有所帮助。