基于轨迹识别的安卓屏保程序设计.docx
- 文档编号:4045667
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:25
- 大小:383.64KB
基于轨迹识别的安卓屏保程序设计.docx
《基于轨迹识别的安卓屏保程序设计.docx》由会员分享,可在线阅读,更多相关《基于轨迹识别的安卓屏保程序设计.docx(25页珍藏版)》请在冰豆网上搜索。
基于轨迹识别的安卓屏保程序设计
武汉理工大学毕业设计(论文)
基于轨迹识别的安卓屏保程序设计
学院(系):
信息工程学院
专业班级:
信息工程1001班
学生姓名:
邓托
指导教师:
汪阳
学位论文原创性声明
本人郑重声明:
所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包括任何其他个人或集体已经发表或撰写的成果作品。
本人完全意识到本声明的法律后果由本人承担。
作者签名:
年月日
学位论文版权使用授权书
本学位论文作者完全了解学校有关保障、使用学位论文的规定,同意学校保留并向有关学位论文管理部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权省级优秀学士论文评选机构将本学位论文的全部或部分内容编入有关数据进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
本学位论文属于1、保密囗,在年解密后适用本授权书
2、不保密囗。
(请在以上相应方框内打“√”)
作者签名:
年月日
导师签名:
年月日
摘要
随着计算机的广泛运用,手机市场的迅速发展,各种隐私保护方式也在网上广为流传,已经渐渐成为人们生活中必不可少的一部分。
各种解锁软件也紧跟着发展起来。
开发一种占用手机资源少,界面简单,人性化操作,保密功能强的解锁软件具有重要的现实意义。
基于轨迹识别的九宫格安卓屏幕保护软件是在eclipse开发平台的基础上,运用java语言进行设计的。
首先在屏幕保护界面上创建分布匀称的九个点,每个点包含若干像素。
用若干个顺序连接的点来记录用户设置的手势轨迹密码,只有当用户手势轨迹所经过的若干个点的图像和走势与设置的密码完全一致时才能解锁,用户才能获得进一步操作的权限;否则,用户只能停留在解锁界面,无法进行其他操作。
通过多次在不同安卓手机上进行程序测试,九宫格解锁屏保软件具有良好的用户体验度。
不仅操作简便,而且密码设计的多样性为用户提供了强大的密保功能。
关键词:
轨迹识别;屏幕保护;九宫格解锁
Abstract
Withthewidespreaduseofcomputersandtherapiddevelopmentofmobilephonemarkets,avarietyofprivacyprotectionmethodsarewidelycirculatedonline,graduallybecominganindispensablepartofusuallife.Variousunlockingsoftwarearealsodevelopedfollowingthetendency.Sodevelopingakindofunlockingsoftwarethatoccupieslessphoneresourceshasasimpleinterface,user-friendlyoperationandpowerfulsecurityfunctionispracticallysignificant.
Basedontrajectoryrecognition,androidsquaredscreensaversoftwareisdevelopedbyjavalanguageontheplatformofeclipse.Firstly,creatingninepointssymmetricallydistributedonthescreensaverinterface,whichpointcontainsseveralpixels.Theuser’sgesturepasswordissetbyseveralsequentiallyconnectedpointstorecordthetrack.Onlywhenthepictureandtrendofgesturetrajectorywhichthroughanumberofidenticalpointsiscompletelysimilarwiththesetpassword,theusercanobtainthepermissionforfurtheroperation;otherwisetheuserjuststayattheunlockscreenandcannotperformotheroperations.
Testedondifferentandroidphones,squaredunlockscreensaversoftwareprovidesgooduserexperience.Besidessimpleoperation,italsoprovidesuserswithapowerfulsecurityprotectionfunctionthroughthediversityofcipherdesign.
Keywords:
trajectoryrecognition;screensaver;squaredunlock
目录
第1章绪论1
1.1研究目的及意义1
1.2国内外研究现状1
第2章基于轨迹识别的屏保程序设计4
2.1浅论九宫格轨迹识别算法4
2.2用户功能需求分析5
2.3系统总体设计7
2.4输入模块详细设计9
2.5密码存储模块详细设计12
2.6轨迹密码比对模块详细设计13
2.7轨迹显示模块详细设计14
第3章基于轨迹识别的安卓屏保程序实现16
3.1Android应用的构成和工作机制介绍16
3.2.九宫格视图模块实现17
3.3输入模块实现18
3.4显示模块实现18
3.5密码存储模块实现19
3.6密码比对模块实现20
3.7程序界面设计20
3.8配置AndroidManifest.Xml22
第4章总结和展望23
参考文献24
致谢25
第1章绪论
1.1研究目的及意义
安卓系统是谷歌于2007年公布的开放式源代码手机系统,它的开放性优于其它封闭式的手机系统,是真正意义上的开放性移动设备平台,任何人都可以根据自己的喜好将手机系统中的所有功能重新编写。
安卓系统由于其开放性,也会随之产生一系列安全和隐私问题。
于是各种解锁软件也紧跟着发展起来,但是很多屏幕保护软件盲目追求界面美观、功能庞大,对用户的手机造成了很多资源浪费,如内存占用率过高、解锁手续复杂等,给用户带来了许多不便。
对于大多数普通用户,许多额外功能形同虚设,在日常操作中几乎不会用到。
想要综合解决这个问题,可在手机上安装安全软件或仅仅具有识别作用的屏幕保护程序。
现在的屏幕保护程序多种多样,大部分只是单纯地为了防止误操作。
而基于轨迹识别的屏保程序则增添了一项新的隐私保护功能。
通过采集手指在屏幕上的轨迹,可自行设计独特的图案,在其他人不知其图案的前提下,可防止他人解锁手机,保护用户个人隐私。
九宫格图案解锁程序是基于轨迹识别的屏保程序中占用手机资源少、界面最简洁的密保软件。
研究目的在于通过设计基于轨迹识别的九宫格解锁程序,并将其应用在开放式的安卓系统中,通过简洁方便、占用手机资源少、人性化的解锁操作,达到保护用户个人隐私的目的。
轨迹识别是将在手写设备上书写时产生的有序轨迹信息化转化为字符串密码的过程,实际上是手写轨迹的坐标序列到字符串密码的一个映射过程,是人机交互最自然、最方便的手段之一。
基于轨迹识别的屏保程序,利用了轨迹识别解锁的原理,给手机隐私安装上了一扇防盗门,只有轨迹匹配时,用户才能通过该保护程序的验证,获得继续操作手机的权限。
九宫格解锁软件在程序界面上创建了能记录用户轨迹的九个点分布匀称。
用户使用手机时,打开程序的第一界面就是一个大大的九宫格。
只有用户输入与原先设置的初始轨迹一样的手势轨迹才能离开此界面,做进一步操作。
1.2国内外研究现状
1.2.1国外研究现状
手势识别技术在国外很早开始研究,最早的相关技术是基于数据手套的,它是由Grimes于1983年在贝尔实验室完成的,6年后,数据手套技术更进一步,Sturam能通过手指各种特征的检测实现对虚拟物体的控制。
20世纪90年代,随着计算机技术的快速发展,手势识别技术也突飞猛进,90年代初,富士通在实验室中己经可以识别46种手部的形态,接着M.Shah等人通过数据手套输入7种不同手势,能够让系统做出7种不同的控制动作。
随后两年,Starne:
应用该技术准确的识别了美国式手语中由40个单词任意匹配形成的短句;同样Mohammed等人也使用该技术能比较准确的识别由95个单词任意匹配的句子队而台大的Liang运用此技术比较准确的识别了台湾地区Gestureboob中250个基础单词;同时,Xu等人成功将手势识别技术应用于机器人中实现了智能控制;1997年,K.Grobel等人将图像处理技术应用到手势识别中,把视频图像作为输入而非数据手套,能够比较准确的识别视频图像中的262个单词,为手势识别技术的实现方法上提供了新的参考;1999年,Vogler等人结合上述两种手势识别技术,比较准确的识别了美国式手语中的53个单词。
进入21世纪,手势识别技术的研究已经有了很多突破,而且已经广泛应用在各个行业,并有一些基于手势识别的产品出现。
国际上已经成功研究了多种模式的人机交互系统。
如索尼公司在2003夏天推出了一个叫做EyeToy的游戏外设,它能用摄像头捕捉用户影像信息,并对用户动作进行手势识别,从而达到游戏的互动控制。
几个月后,一家在美国Michigan州的科技公司推出一个能用于天气预报的手势软件,天气播报员在播报天气时如果想要呈现出生动的天气效果,可通过改变手指动作向该系统传达特定指令。
2005年,三星公司发布了一款名为ESGH-E758且包含手势识别技术的手机,它内置动作感应器,如果想要打电话、玩游戏、拍照,可以晃动手势就能完成而无需按键。
类似这款手机,NOKIA也推出了具有相似功能的E77,用户只需定义相关手势动作,就可以通过手势完成特定的功能。
2009年MIT研发出一款新型液晶传感器可控制电视实现基本操作,它无需遥控器,也无需触摸屏幕,只需要通过手势来遥控电视机进行改变音量与换台。
1.2.2国内研究现状
我国手势识别技术起步稍晚,也是从数据手套技术开始的,1995年高文教授提出计算机智能接口的框架;4年后,吴江琴等人将人工神经网络与隐马尔科夫模型相结合的方法用于数据手套技术中,能够比较准确的识别中文手语中单词和句子.一年后,马继涌等人也在数据手套技术的基础上,结合动态高斯混合模型,能够准确识别中文手语中的274个单词。
2000年,任海滨提出了基于DTW的手势识别算法,该方法能准确的识别12种手势,2年后,他运用图像处理技术通过对运动模型的分析,提出一种动态图像分割的手势识别方法。
最近中科院计研所利用数据手套技术并针对手语动作建立运动模型,在经过多年的努力后,获得了比较不错的手语数据库。
2011年4月,腾讯公司将手势识别技术应用于幻灯片的放映,推出了QQ手势达人forPPT的应用插件(仅支持Office2007),如图1-4,该软件是一款通过普通摄像头来进行手势控制的体感软件,它抛弃键盘和鼠标,完全由手势控制PPT的演示,且简单易学,三步操作手势(手掌、变拳、移动),就可以提供PPT启动播放,上翻页、下翻页、结束播放等四个常用手势命令。
吴江琴、高文在仔细研究ANN-HMM混合方法后,成功的开发出了具有18个传感器的Cyber-Glover型号数据手套的中国手语识别系统。
而在计算机单目视觉下的动态手势识别方面,2000年,清华大学的祝远新、徐光裕等对有关连续动态手势的识别进行了研究,他们通过融合手势的皮肤颜色信息和运动信息,成功对复杂背景下的动态手势进行了分割。
2008年9月,中国科学院计算技术研究所手语识别与合成课题组历时8年,开发出了先进的手语识别与合成技术,该技术基于运动跟踪原理,使用2只数据手套以及3个六自由度位置的跟踪器,通过记录下每个手语词在真实人体演示时的运动数据,从而建立手语词初始的运动数据库。
在成功建立手语词运动数据库之后,再对数据库里的手语词的运动数据进行编辑和微调,最后就得到了高质量的手语词的运动数据库。
第2章基于轨迹识别的屏保程序设计
2.1浅论九宫格轨迹识别算法
2.1.1算法原理
在屏幕固定位置设置九个大小一致的圆圈。
用户的手势轨迹每经过一个圆圈,就将该圆圈的圆心位置记录下来,不经过圆圈则不记录,若经过的圆圈是上一个已经记录了圆心位置的的圆圈也不记录。
手势轨迹一般是连续的经过一个圆圈的,不连续记录相同的圆心是为了去重。
将记录的所有圆心位置保存为一个字符串。
该字符串就是轨迹识别码。
九宫格轨迹识别通过比较轨迹识别码是否一样来判断两条轨迹是否相同。
2.1.2算法精度分析
通过该算法得到的一个轨迹识别码可以表示无数种可能性的轨迹。
但是一条轨迹只有一个轨迹识别码。
这里将轨迹近似化,标准化了。
如图2.1所示,三个不同的手势轨迹对应同一个轨迹码(0,3,6,7)。
图2.1轨迹图
很显然,九宫格轨迹识别算法轨迹识别算法误差非常之大。
该算法将一个平面圆近似化成了一个点。
提高九宫格轨迹识别算法准确率的方法有两种。
第一种方法:
增加屏幕上固定圆圈的数量。
用极值法思想考虑,当屏幕上的固定圆圈数量与屏幕像素一样多的时候(此时圆圈半径为0),该算法误差就为0了。
第二种方法:
尽量把九个圆圈均匀的固定在屏幕上。
这种方法的理论基础来源于人的书写习惯,人们总是倾向于将文字书写得匀称,这样书写会更美观。
人们在使用手机时,也会有这种习惯。
所以均匀分布九个圆圈能记录更多的圆心位置。
2.1.3选取算法参数设计九宫格自定义视图
用提高九宫格轨迹识别算法准确率的用提高九宫格轨迹识别算法准确率的第一种算法看似能完美实现轨迹0误差识别。
但是实际中是不可能的。
当屏幕中的圆圈数量太多的时候,安卓手机系统无法承载如此多的存储与计算负荷。
而且记录的轨迹识别码是用户需要记住的,轨迹识别码太长,一旦用户无法记住,用户会面临自己都无法解锁的尴尬局面。
该屏保程序设计中,我们使用第二种方法来提高轨迹识别的正确率。
事实经验得出结论,九个圆圈的基于轨迹识别的屏幕保护程序是最受人们欢迎的。
如图2.2所示,设计一个宽度占满整个屏幕区域的正方形九宫格。
图2.2九宫格视图
下面通过计算来得到视图定义的相关参数:
(1)取得屏幕的宽w,高h;r
(2)得到圆圈r=w/3/2;得到中心圆圈的圆心位置o4(w/2,h/2);
(3)设置x=w/2;y=h/2;
(4)得到到所有圆圈圆心数据o0(x-r,y-r),o1(x,y-r),o2(x+r,y-r),o3(x-r,y),o5(x+r,y),o6(x-r,y+r),o7(x,y+r),o8(x+r,y+r)。
2.2用户功能需求分析
一般基于轨迹识别的安卓屏幕保护程序设计的目的就是一个,那就是为了让用户的手机不能被其他人使用。
而用户自身有一个设置密码的方式,用户自身设置的密码要能被系统永久保存,以便用户验证密码是比对两次设置的密码是否相同。
所以安卓屏幕保护程序设计的基本功能有三个,即设置轨迹密码功能,解锁功能,修改轨迹密码功能。
本次基于轨迹识别的安卓屏幕保护程序设计的开发工作是一项研究性的工作,所以设计本程序也只需要实现用户的设置轨迹密码功能,解锁功能和修改轨迹密码功能。
总用例图如图2.3所示。
图2.3总用例图
解锁的时候,有输入密码功能,有可能轨迹密码输入错误,于是得有重新输入密码功能。
解锁用例图如图2.4所示。
图2.4用户解锁用例图
在设置轨迹密码时候,有输入轨迹密码功能,有可能用户对已绘制的密码不满意,于是有重新输入轨迹密码功能,设置的密码必须保存起来,所有有保存轨迹密码功能。
设置轨迹密码用例图2.5所示。
图2.5绘制轨迹密码用例图
在修改轨迹密码的时候,有输入轨迹密码功能,当旧轨迹密码验证不正确,必须重新输入旧轨迹密码,所以有重新输入轨迹密码功能。
对设置的新轨迹密码不满意时,也得重新输入新轨迹密码。
修改后的新轨迹密码得保存起来,所以有轨迹密码存储功能。
修改轨迹密码用例图如图2.6所示。
图2.6修改密用例图
2.3系统总体设计
通过软件功能分析可知本软件需要实现用户的三个功能。
分别为手势密码设置功能,手势密码验证功能,以及修改密码功能。
为了完成手势密码设置功能,手势密码验证功能,以及修改密码功能,需要设计三个界面,方便用户操作。
它们分别为密码设置界面,登陆验证界面以及主界面。
三个界面之间能互相跳转。
图2.7展示了该屏幕保护设计的系统流程图。
图2.7系统流程图
在系统的密码设置界面创建一个按钮“重新绘制”,点击该按钮,用户就可以从该界面的九宫格视图中重新绘制轨迹图。
轨迹图设置好后,点击保存按钮,该轨迹会保存为一个轨迹识别码,该轨迹识别码被存放在静态文件中,用不丢失。
系统主界面设置一个按钮“重置密码”。
点击此按钮直接跳转到密码验证界面,轨迹密码验证成功后,程序跳转到密码设置界面。
从系统流程图中可以得到各界面之间的跳转关系如图2.8所示。
图2.8界面跳转关系图
系统总体设计中的各个模块可以分为轨迹输入模块,轨迹存储模块,以及轨迹对比验证模块。
考虑到用户体验效果,本设计添加一个轨迹显示模块,将用户所经过的大致轨迹显示出来。
轨迹输入由用户从九宫格视图中输入,用户绘制轨迹时系统将输入的轨迹记录下来。
此处记录的是轨迹顺序经过的九宫格圆圈的圆心。
再将所有圆心的索引号转化为一个字符串。
密码存储模块让系统记住用户先前所设置的九宫格密码,改密码必须被保永久存储起来,方便系统的调用。
首先程序捕获到的手势轨迹所经过的点集的索引转化为字符串。
然后将该字符串保存到静态文件中。
轨迹显示模块显示手势轨迹所经过的点和线。
将即时捕捉到的用户轨迹索引序号保存为动态字符串。
将该动态字符串数与用户存储的密码字符串进行比对,若两者一致,则程序解锁。
2.4输入模块详细设计
图2.9展示的是输入模块的工作流程图。
在密码验证界面,用户手指接触屏幕,移动,或提起通过event.getAction()函数能得到。
该输入模块将用户手势轨迹所经的九宫格圆圈的圆心点用spoints数组临时保存起来。
图2.9输入模块流程图
event.getAction()函数能够返回用户接触屏幕时的状态。
我们需要用到用户手势的三个状态。
其中包括点下,移动和提起。
为了实现输入密码的功能。
得创建一个点类,这个点类有以下属性point(x,y,p,index).其中x,y是这个点在屏幕上的位置,创建点时获得;p为这个点的状态0/1,默认为0;index是这个点的标签,默认为0。
创建spoints数组来存储被选择的point点类。
创建mpoints[3][3]数组来依次存储九宫格视图中九个圆圈的中心位置。
创建check()函数来判断点是否在九宫格圆圈图片上,check函数的判断过程如流程图2.10所示。
图2.10判断流程
判断该点是否是上一记录点的方法如流程图2.11所示。
调用ArrayList.size方法能或得spoints数组的大小。
调用ArrayList.get方法能得到spoints数组中特定位置的点。
所以得到spoints数组最后的点的索引值方法为sPoints.get(sPoints.size()-1)。
图2.11是否同一点判断流程
调用ArrayList的add()法可以直接在sPoints数组后面添加点元素。
2.5密码存储模块详细设计
按下密码设置界面的“保存”按钮,系统将sPoints数组中所有点的index转化为字符串。
再通过 SharedPreferences函数将数据存储到静态xml文件中。
密码存储的简要流程图如图2.12所示。
图2.12存储模块设计
流程中的第二步在输入模块里已经完成。
系统捕获到的所有点被存在sPoints数组中。
该模块中得创建一个StringBuffer()类型的中间变量sf,该变量可以存储和操作字符串。
定义一个StringBuffer()类型来完成密码的字符串转化。
遍历spoints点集,将依次将spoints中的点的索引存储到字符串sf中。
接下来的工作就是将该字符串保存到静态文件中了。
将spoints中的所有点的索引保存为sf字符串的流程图2.13所示。
图2.13转化为字符串流程图
Sf调用StringBuffer()的append方法能添加数据到sf字符串的结尾变成一个新的字符串。
使用SharedPreferences保存数据,能将数据存入到xml文件中。
此处用调用Context对象的getSharedPreferences()方法。
使创建一个SharedPreferences.Editor对象,调用SharedPreferences.Editor对象的putstring函数来实现存储字符串到“password”中。
这样索引字符串就以以间值对的形式存储到静态xml中。
2.6轨迹密码比对模块详细设计
当用户输入完轨迹密码,即用户手指提起,离开屏幕,系统的输入模块将用户轨迹所经过的九宫格圆圈图片的圆心点用spoints数组记录起来。
调用密码存储模块的字符串转化模块将spoints数组记录的所有点的索引转化为字符串。
将该字符串与用户存储的密码字符串进行比对,若两者一致,则程序解锁,程序可进一步操作。
若不一致,则解锁失败,用户继续解锁。
图2.14展示了轨迹密码模块工作的流程。
图2.14密码比对模块流程
流程中的第二步由输入模块完成,第三步可以通过调用密码存储模块的字符串转化模块实现,所以这里无需再进行设计。
由于密码存储的时候是通过SharedPreferences完成的,所以获取用户已设置的密码字符串可以通过get()方法完成。
两者的对比由字符串的比较方法equals完成。
当equals返回值为true时,密码解锁成功,反之,解锁失败。
2.7轨迹显示模块详细设计
当用户绘制轨迹时,系统将用户绘制的大致轨迹显示出来。
轨迹的显示可以分为两部分,圆圈图片的显示和线的显示。
显示圆圈图片时,需要用到圆心点的state参数。
点的state参数设置的默认值为0,当该点被轨迹经过,即spoints数组记录了该点,该点的state参数就被设置为1。
这样的话,程序只需判断圆圈圆心点的state就能判断该圆圈该画成什么状态。
圆圈图片显示判断的流程图如图2.15所示。
九个圆圈图片都得依图2.15来判断。
图片的显示可以调用drawBitmap方法来完成。
连线的显示包含两个方面,分别为圆圈图片中心点到圆圈图片中心点的显示和圆圈图片圆心点到普通像素点的显示圆圈图片中心点到圆圈图片中心点的显示用递归法来完成。
即第一个被选中的圆圈图片中心点与第二个被选择的圆圈图片中心点相连,第二个被选择圆圈图片中心点与第三个被选择圆圈图片中心点相连,直到连到最后一个被选择九宫格点。
圆圈图片中心点到圆圈图片中心点的显示与圆圈图片中心点连接普通像素点都是直接调用drawLine函数完成。
图2.15判
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 轨迹 识别 屏保 程序设计
![提示](https://static.bdocx.com/images/bang_tan.gif)