更新记录
0.0.1(2020-06-03)
1.vue项目接入face-api 2.含有张张嘴,摇摇头,眨眼等功能 3.思路些许欠缺,可自行更改 4.存在bug,看看有问题能解决的可反馈过来一起学习 5.face-api模型文件 可参考face-api.js:https://github.com/justadudewhohacks/face-api.js
平台兼容性
Vue2 | Vue3 |
---|---|
√ | × |
App | 快应用 | 微信小程序 | 支付宝小程序 | 百度小程序 | 字节小程序 | QQ小程序 |
---|---|---|---|---|---|---|
× | × | × | × | × | × | × |
钉钉小程序 | 快手小程序 | 飞书小程序 | 京东小程序 |
---|---|---|---|
× | × | × | × |
H5-Safari | Android Browser | 微信浏览器(Android) | QQ浏览器(Android) | Chrome | IE | Edge | Firefox | PC-Safari |
---|---|---|---|---|---|---|---|---|
× | × | × | × | × | × | × | × | × |
活体动作
- 1,点点头
- 2,摇摇头
- 3,眨眨眼
- 4,张张嘴
可以得到的坐标数据
眼睛,眉毛,鼻子,嘴巴在正面容易捕捉到的感官坐标
实现原理
不同的活体动作,对应感官部位的坐标会发生改变,我们可以得到一组动作返回的坐标数据,通过分析这一组数据判断有没有做出对应的动作,所以坐标点就是最重要的数据。
坐标点受影响因素
1, 用户做完一组数据的快慢 2,用户设备性能影响抓取坐标点的速率 3,用户设备分辨率大小和用户距离摄像头设备的远近和角度
数据点采集分析
上述受影响的因素,导致我们无法得知用户做完一组动作需要的时间,用户做完一组动作能采集到多少坐标点。而且每次采集到的绝对坐标肯定会变化,我们虽然能采集数据,但是无法预知怎样才能采集到合适的数据,然后触发活体动作分析程序,触发分析程序前采集的数据如果不够合理,即使用户做出正确的动作,也无法进行判断。 以下是我能想出的常见两种采集方式。
采集方式:
1,按照时间段采集,根据我们预估用户完成某组动作需要对应的时间,在这个时间段内去采集一组数据,不管采集数据的个数,只要到了时间,就停止采集,将采集的数据交给分析程序进行分析。
2,按照数据点的个数采集,如果坐标数太少,是无法进行分析的,预估分析一组动作最多需要多少个坐标数据和最少需要多少个数据去预估一个值。程序必须采集的点一旦达到这个数量,就停止采集,然后将采集到的数据集合交给分析程序分析。
3,上述两种方法进行折中处理,更苦一些阈值,比如虽然到了指定时间,但是采集的点实在太少了,可以延长时间等,这个需要进行多次实验,分析实验数据才好定义。
我的想法:
首先肯定是要分析相对坐标,我将分析活体动作的特征锁定在"方向"这两个字上
1,运动方向
根据两个相邻的两个坐标,我们可以计运动方向
- x2>x1:往右运动
- x2<x1:往左运动
- X2=x1:水平静止
- y2>y1:往下运动
- y2<y1:往上运动
- y2=y1:垂直静止
2,转折点(运动方向变化点)
根据运动方向的变化,我们能计算出水平转折点,和垂直转折点。
3,差值(运动幅度)
到达转折点时,可以计算出水平坐标差值,和垂直坐标差值。 第一个坐标,到转折点的一个坐标相减之后的绝对值。这个差值可能不准。第一个转折点到第二个转折点坐标相减的绝对值就很准了,就是水平方向和垂直方向运动的最大幅度
有了上述三个特征我们就比较好定义一个活体动作了。
- 摇摇头:鼻子坐标,水平转折点>=2,差值>=最小转动的阈值
- 点点头:鼻子坐标,垂直转折点>=2,差值>=阈值
- …