妖ing识别–一场悄悄的识别

1引言

1.1编写目的

题目“猜猜我是谁”要求设计一个移动APP,模拟实现无密码登录的功能。而当前人脸识别、指纹识别及声纹识别等身份识别技术对智能手机处理器性能要求较高,且这些身份识别技术也日趋成熟。鉴于此,我们提出了另外一种身份识别方式,即通过提取、分析用户的行为特征来判断当前用户是本人还是陌生人。目的是使用户在浏览有内容的App时(论坛App,购物App,新闻App)能够不知不觉完成登录而无需记住和输入复杂的密码,高效准确的完成登录。

1.2可行性研究

图1特征分布图

图1是距离,水平速度,垂直速度,水平距离,垂直距离的分布图,这些都是人浏览新闻时所产生的行为特征,纵坐标是密度,横坐标是值,从图中可以看出,不同人的距离,水平速度等特征量分布完全不同,且满足正太分布,特征的组合完全可以作为识别的依据。

2总体架构

如图2所示,用户在注册时,将会被要求浏览10分钟的新闻,App会在这10分钟内收集用户的行为特征数据,并在一系列的数据清洗和特征处理后存入数据库。用户在登陆时,将会被要求浏览1分钟的新闻,系统会在浏览时保存用户数据,但不存入数据库。1分钟结束时,系统会根据注册时的数据训练模型,用以对登陆时产生的未标注数据进行分类,分类结果产生后,由一系列算法进行判别处理,最后返回判断结果。

C:\Users\loseryao\Desktop\用户识别概要图.png

图2整体概要图

3.详细设计

本系统大概包括以下几个模块,新闻模块(基于开源新闻App),滑动行为特征收集模块,滑动行为特征值处理模块,分类模型的构建以及分类决策。

3.1滑动事件定义

为了有效的描述滑动事件,我们把一次滑动事件定义为4元组的形式,即

Gesture= (1)

其中type为滑动的类型,有上滑、下滑、左滑、右滑、四种情况,time为持续的时间,为滑动开始时手在屏幕的位置, 为滑动结束时手在屏幕的位置。

3.2滑动行为特征值及其计算方法

对于滑动的行为特征值,我们可以将它分为两大类,一种是可以原始数据,不需要做过多处理,比如滑动时间,滑动水平距离,滑动间隔时间等等,我们把这些特征叫做初级特征,一种是需要二种甚至多种原始数据的运算而成,我们把这些数据叫做高级特征,比如滑动速度,滑动角速度等等。

(A)初级特征

  1. 滑动水平距离:

(2)

其中 是滑动结束时手在屏幕的水平位置,是开始结束时手在屏幕的水这位置。

  1. 滑动垂直距离:

(3)

其中 是滑动结束时手在屏幕的垂直位置,是开始结束时手在屏字的垂直位置.

  1. 滑动持续时间:time
  2. 滑动间隔时间:

(4)

其中是后一次手势发生的时间,是前一次手势发生的时间

(B)高级特征

  1. 滑动水平速度:

(5)

滑动水平速度用滑动水平距离除以持续时间得到。

  1. 滑动垂直速度:

(6)

滑动垂直速度用滑动垂直距离除以持续时间得到。

  1. 整体速度:

(7)

整体速度由垂直速度和水平速度的平方和开根号得到。

  1. 整体距离:

(8)

整体距离由水平距离和垂直距离的平方和开根号得到

  1. .加速度:

(9)

加速度由速度除以时间得到。

  1. 加加速度:

(10)

加加速度由加速度除以时间得到

  1. 角度:

(11)

角度由对垂直距离和水平距离的商取反三角函数除以乘以180得到。

  1. 角速度:

(12)

角速度由移动角度除以时间得到。

  1. 角加速度:

(13)

角加速度由角速度除以时间得到。

  1. 角加加速度:

(14)

角加加速度由角加速度除以时间得到。

3.3滑动行为特征汇总

滑动特征有四个种类,分别是上滑,下滑,左滑,和右滑,每一种都有上述13个特征,现在将所有特征汇总如下

表1特征汇总图

方向 滑屏过程中收集的特征
上滑 时间 距离 速度 水平距离 垂直距离 水平速度 垂直速度 加速度 加加速度 角度 角速度 角加速度 角加加速度
下滑 时间 距离 速度 水平距离 垂直距离 水平速度 垂直速度 加速度 加加速度 角度 角速度 角加速度 角加加速度
左滑 时间 距离 速度 水平距离 垂直距离 水平速度 垂直速度 加速度 加加速度 角度 角速度 角加速度 角加加速度
右滑 时间 距离 速度 水平距离 垂直距离 水平速度 垂直速度 加速度 加加速度 角度 角速度 角加速度 角加加速度

3.4滑动特征收集模块

3.4.1注册时数据收集

图3注册数据收集

由图3所示用户数据首先存储在临时的List里,然后存入安卓系统保存应用数据的App类内,最后由处理Activity从App内取出特征处理完毕后存入Sqlite数据库中。

3.4.2登陆时数据收集

图4登陆数据收集

由图4所示用户数据首先存储在临时的List里,然后存入安卓系统保存应用数据的App类内,最后由处理Activity从App内取出特征处理。

3.5滑动特征处理模块

首先对数据进行预处理,因为用户在浏览的过程中并不是所有时间都在全身灌注浏览新闻,有时会出现滑动行为间隔时间过长的问题。也有时候,由于屏幕有水或者其他情况,造成对滑动距离的测量不准确,这就需要对于数据选取一个合适的区间用来训练数据。我们在利用java-ml的filter对数据进行筛选。

其次,因为获得的数据都是连续值,必须对数值进行离散值处理,方便模型更快的对数据进行训练。我们用java-ml的RecursiveMinimalEntropyPartitioning方法对特征进行离散化处理。

最后,还要对特征进行归一化,加快模型分类的速度。我们用java-ml的NormalizeMean方法进行归一化。

具体情况如图5所示

图5数据预处理

3.6基于随机森林的分类器模块构造

本节利用基于随机森林的方法来构建分类器,进而达到对训练阶段收集到的用户滑动行为进行分类判断的目的。在本方案中,每一种滑动行为对应一个随机森林分类器,每一种类型的滑动行为数据通过矩阵的形式表现出来,矩阵的每列对应于这个鼠标行为的一个特征类型,矩阵的每一行对应一个用户该类型行为的实例即特征值向量,每一行数据通过用户ID进行标识。部分矩阵如下图所示

图6分类矩阵

如上图所示,userId为用户的编号,Inte为间隔时间等,每一行代表用户的每一次滑动。行数n代表滑动的总次数,列数m代表特征的个数,这些一起构成了一个n*m的特征矩阵。对于四种滑动,每一种都对应着一个随机森林分类器,获得的结果作为最后算法判别模块的输入。

3.7算法判别模块

由于java-ml的随机森林算法每一次分类返回的是用户名,所以为了方便论述,我们把随机森林返回的用户名次数和占总次数的比叫做分类比.比如数据库里已经注册的人数为2,用户ID是cao和zhang,返回cao20次,返回zhang10次,则cao的分类比就是 0.66。由于在实验中,当注册人数超过三人时,分类比很难稳定在一个数值附近,这样不太好做登陆判别,而注册人数为2人时,分类比为0.8时,识别结果很准确。这样当注册人数超过三人时,我们就采用两两组合的方法,当有一个分类器有大于0.8的分类比产生时,我们就把该用户存入list,如果没有,则记为错误,记录错误次数。最后如果分类器错误次数大于等于总次数的50%,则判定为未注册,如果返回的用户次数少于该用户比较次数减一次,则返回该用户,否则判定为未注册,具体算法为算法1所示。

算法1:用户判别算法
输入:用户登陆数据testUpInfo,testDowninfo,testLeftInfo, testRightInfo,用户数目n,

输出:判别结果

1: while( )

2: trainUp = idm.queryTwoGestrue(“UpInfo”,);

3: trainDown = idm.queryTwoGestrue(“DownInfo”, );

4: trainLeft = idm.queryTwoGestrue(“LeftInfo”, );

5: trainRight = idm.queryTwoGestrue(“RightInfo”, );

6: resultUp = Classer(trainUp, testUp);

7: resultDown= Classer(trainDown, testDown);

8: resultLeft = Classer(trainLeft, testLeft);

9: resultRight = Classer(trainRight, testRight);

10: resultTotal = merge(resultUp, resultDown, resultleft,resultright);

11: String results=idc.identification(resultTotal);

12: List userhit;

13:if(results.equals(“none”))errornum++;

14:else userhit.add(results);

15:endwhile

16:if(errornum/totalcount>=0.5)return “请注册”;

17:else return findmaxtime(userhit);

其中queryTwoGestrue方法是从数据取出两个用户的滑动数据,identification方法用来判别哪位用户(返回分类比为0.8以上的用户,否则返回none),findmaxtime返回出现最多且出现次数多余该用户比较次数减1次的用户ID,否则返回请注册。

实验

手机选用红米3s进行测试,实验对象为10人其中5人已注册,5人未注册,实验结果如下表所示

表2实验结果

用户ID 是否注册 成功次数 失败次数 成功率
Cao 5 0 100%
Yao 4 1 80%
Ya 5 0 100%
Chen 4 1 80%
Zhang 3 2 60%
4 1 80%
5 0 100%
5 0 100%
4 1 80%
4 1 80%

其中注册平均识别率达到84%,未注册识别达到达到88%,取得了不错的效果。

软件界面

本用户识别APP使用Android平台上一个开源的新闻快讯客户端,并在其中添加注册和登录模块,而注册和登录模块分别添加了我们所使用的相应算法。在Android手机上打开该APP,会进入如图6所示的界面。

QQ图片20160615095304

图6 APP首界面

下面对注册模块和登录模块分别做详细阐述。

    1. 注册模块

当用户A点击注册按钮后,APP会进入新闻快讯的首页,如图7所示。

QQ图片20160615095258

图7 新闻快讯首页

(2)登录模块

登录的过程也即识别的过程,登录模块分两种情况。

情况一:已注册的用户yao把该APP交给陌生用户I,以判断用户I是陌生人。当用户I点击登录按钮后,APP同样会进入新闻快讯的首页。用户I根据自己的兴趣爱好浏览新闻,同样,APP在此过程中会收集用户I的行为特征,然后根据登录模块中相应的算法,对用户I进行识别,由于用户I是陌生人,故识别结果是“请注册”,如图8所示。

QQ图片20160615095313

图8 陌生人识别结果

情况二:已注册的用户yao用该APP进行登录,以验证用户yao是本人。用户yao点击登录按钮并进入新闻快讯的首页后,其可以根据注册时的兴趣爱好对新闻进行浏览,同样,APP在此过程中会收集用户yao的行为特征,然后根据登录模块中相应的算法,对用户yao进行识别,由于用户yao是本人,故识别结果是“亲爱的yao,欢迎登陆”,如图9所示。

QQ图片20160615095247

图9本人识别结果