Android平台上手势控制照相系统的实现

来源 :科技创新导报 | 被引量 : 0次 | 上传用户:hou189
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
   摘要:本文研究了Android平台上的照相机制,通过采用了基于Hu矩和支持向量机的静态手势识别技术,可实现在复杂背景下对手势进行实时辨别,最后将研究设计的手势识别算法成功地应用到了Android平台上的手势控制照相系统中。
  关键词:Android 手势 照相系统 模式识别
  中图分类号:TP2 文献标识码:A 文章编号:1674-098X(2012)02(c)-0000-00
  1 绪论
   随着计算机技术的迅速发展,通过鼠标、键盘等方式的人机交互方式已经显得过时,新的人机交互方式不断涌现,并受到了人们的欢迎。手势识别控制技术,作为新型人机交互方式的典型代表,凭借其简单、可靠的特点,受到了人们的广泛关注。
   Android是谷歌公司在2008年推出的新一代操作系统。该操作系统可运行在手机、平板电脑等可移动设备上,凭借其开源的特点,Android迅速掀起了一阵风暴,越来越多的移动设备厂商投入了Android的阵营。Android必将给人们的生活带来显著的影响。
   鉴于上述形势,本文提出了一种可运行在Android平台上的手势控制照相系统。利用该系统,用户可完全不需要按下快门,而只要对着摄像头摆出特定的手势,照相系统将自动根据当时的距离、光线、环境等,调整相关参数,最终完成拍照动作。这种新型的拍照系统将带给用户前所未有的拍照体验。
  
  2 Camera基本功能的实现
  2.1软件框架的搭建
   在布局文件中,我们定义了一个SurfaceView控件、一个TextView控件以及六个Button控件。SurfaceView控件用于显示camera获取的图像,同时实现OnClickListener接口。TextView控件是用来实时显示camera在预览情况下每一帧图像的一些特征值,用于检测。六个Button控件用于用户操作,其功能是开启、关闭camera,开启手势识别、设置自定义手势,以及退出程序。
  
  2.2授权
   在权限文件中写入部分权限:
  2.3 java文件
   定义一个camera类继承Activity并实现OnClickListener接口,同时定义6个Button对应6个Button控件,再对他们建立监听事件。通过OnClickListener接口,我们获得了onClick(View arg0)函数,它可以对Activity中的View进行监听,当某个View被按下抬起时就会执行相应代码。
   当监听器监听到Button1被按下抬起时调用inCamera()函数,用于初始化Camera参数的自定义函数,用Camera.open()开启Camera,也可以用Camera.getParameters()获取Camera的参数进行修改。
   当监听器监听到Button2被按下抬起时执行Camera.stopPreview()、Camera.release()、Camera=null,用于关闭Camera;
   当监听器监听到Button3被按下抬起时执行takePicture,触发myjpegCallback的回调函数,该函数下的onPictureTaken带有當前摄像头捕获图像的JPEG数据,若要保存图片可通过
   Bitmap bm =BitmapFactory.decodeByteArray(data, 0,data.length);
   BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
   bm.compress(Bitmap.CompressFormat.JPEG, 100, bos);
   bos.flush();
   bos.close();
   以上代码把图像保存在file目录下,其中data为图像数据,file为路径。
   当监听器监听到Button4被按下抬起时执行System.exit(0),用于退出程序。
   当监听器监听到Button5被按下抬起时开启setPreviewCallback(mPreviewCallback),利用次回调函数可以获取摄像头在预览时的每一帧数据,本文研究的关键也在于此。
   当监听器监听到Button6被按下抬起时,为用户自定义设置特征手势的值,即把当前预览帧的特征值记下,在接下来的识别当中进行匹配。
  3 图像处理
  3.1 YUV420SP转换为YCbCr
   onPictureTaken方法中第一个参数为预览帧的数据,其格式为YUV420SP格式。该格式直接处理比较麻烦,于是我们需要对其格式进行转换,我们用到了自定义的方法decodeYUV420SP把格式转换为最熟悉的RGB格式,它的值的范围为-128—127(byte型变量)。
   YUV420SP与RGB的转换关系:
   y1192 = 1192 * y;
   r = (y1192 + 1634 * v);
   g = (y1192 - 833 * v - 400 * u);
   b = (y1192 + 2066 * u);
   存在负值的原因在于Android中byte的范围是-128-127,当要存大于127的输时他用补码表示。为了把值是范围变成0—255,我们用0XFF“&”上原来数据存在新定义的int[]型变量中。
   图像处理的首要目的是为了在整个画面中找到手势,YCbCr对于肤色的识别效果较佳,它的Cb、Cr通道分别指蓝色色度分量与红色色度分量。因此只要给定实验获得的手的肤色的Cb、Cr通道的范围就可以确定手势的位置,同时获得它的二值化图像。
   RGB与YCbCr的转换关系:
   Y=0.299 *R + 0.587* G + 0.114* B;
   Cb = 128+0.886*(B-Y));
   Cr = 128+0.701*(R-Y));
  3.2 用Hu矩的特性获取手势的特征值
   在连续情况下,图像函数为,那么图像的p+q阶几何矩(标准矩)定义为:
   p,q=0,1,2…
   p+q阶中心距定义为:
   p,q=0,1,2…
   其中 和 代表图像的重心,
   对于离散的数字图像,采用求和号代替积分:
   p,q=0,1,2…
   p,q=0,1,2…
   W和L分别是图像的高度和宽度;
   归一化的中心距定义为:
  
   利用二阶和三阶归一化中心矩构造了7个不变矩 :
  
   这7个不变矩构成一组特征量,Hu在1962年证明了他们具有旋转,缩放和平移不变性。在实验中我们发现只有第一个特征值识别的误差较小,若全部计算7个特征值,由于我们要对每一帧图像进行处理,这样计算了太大了,所以我们只用了第一个特征值。通过实验我们既可以获得不同手势的值,通过与每一帧计算出来的值比较既可以让Camere做出不同的反应。
  4 结语
   本文详细分析了如何在Android平台上实现Camera的功能,包括软件框架的搭建,Java文件的编写等。对于Camera获取到的帧数据,本文提出了将其YUV420SP转换为YcbCr的方法,通过利用Hu矩的特性获取手势的特征值,最终根据该特征值与数据库中预设的特征值进行比较,符合后触发拍照动作。
  
  参考文献
  【1】甘志杰,基于Hu矩和支持向量机的静态手势识别及应用,2008。
  
  本文受浙江省大学生科技创新活动计划(新苗人才计划)科研资金支持, 项目编号: 2010R424040
其他文献
设计了一种跟踪精度高、性能稳定的太阳能自跟踪发电系统,采用该系统研制了一台多功能信息采集小车。该小车有自动避障和遥控两种运行方式,并可对多种环境数据进行实时采集。
【摘 要】数学教育一直是我国教育体系中较为难以实现理想成绩的学科。主要原因在于数学的知识相对抽象,并随着教育程度的提升,会逐渐与现实生活产生较大的差距。同时,数学知识的教育主要在于启发,意味着学生难以通过自学而掌握相关知识,由此也对课堂教学提出了更高的要求。即,必须在教师的有限帮助下,促进学生获得更理想的学习成果。而本文便是以初中数学教学的管理为突破口,在深刻探讨有效性的基础上,希望能够为教育实践
【摘 要】随着我国经济的发展和国际化水平的不断提升,英语教学的重要作用日益凸显。在中职英语的教学过程中,英语教学更应以学生的职业规划为目的,从而为培养学生英语实际应用能力奠定基础。因此本文以传统中职英语教学中存在的问题为切入点,进而探讨翻转课堂在教学中的重要作用及实际应用策略。  【关键词】翻转课堂;中职英语;优化策略  【中图分类号】G712 【文献标识码】A  【文章编号】2095-3089(
【中图分类号】 G715 【文献标识码】A 【文章编号】2095-3089(2018)35-0192-01  政治经济学中讲过这样一个关系:生产力决定生产关系,生产关系对生产力有反作用。生产力的发展是生产关系变化的原因和新旧生产关系更替的依据;是否能够推动生产力发展,是评判生产关系先进或落后的根本标准。生产关系一定要适合生产力发展的状况,是人类社会发展的普遍规律。  如果把这一社会生产的规律运用到