手势识别 翻转算法

Posted Andy__Wu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手势识别 翻转算法相关的知识,希望对你有一定的参考价值。

引子

印度客户的一个需求,希望实现来电时翻转静音的功能。具体如下: 
1.电话铃声到来时; 
2.采取下面动作: 
a.手机正面翻到背面<顺时针或者逆时针旋转180度> 
b.手机背面翻到正面<顺时针或者逆时针旋转180度> 
3.来电静音,或者你喜欢的话,可以换成翻转闹铃静音;

技术点

1.数据来源:ACC传感器(即重力加速度传感器) 
2.翻转算法:根据翻转动作的三轴原始数据变化观察,找出规律完成算法;

本算法的价值

翻转的识别度 > 95%,欢迎直接复制使用,大家快乐分享代码呗。 
废话不多说了,直接上android代码.

翻转算法实现步骤:

1.注册ACC传感器的使用权利,在程序的onResume()或者onCreate()找个地方,实现具体如下代码:
    SensorManager mSensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);
    mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
 
  • 1
  • 2
2. 接下来完成一个好习惯,在程序的onPause()或者onDestory()进行注销ACC传感器的使用,因为如果忘了会导致用户无意和无形中过多损失的电量。步骤如下:
    if (mSensorManager != null) 
        mSensorManager.unregisterListener(mSensorListener);
 
  • 1
  • 2
3.在接下来实现SensorEventListener 接口,类似下面的:
 public class xxx implement SensorEventListener   
4.上面步骤完成了,需要重新SensorEventListener 对应onSensorChanged的方法,下面直接贴代码了(本文的核心)
    private float curZ;
    private float preZ;
    private int count;
    private SensorManager mSensorManager;
    private static final int FLIP_MAX = 10; 

   @Override
   public void onSensorChanged(SensorEvent event) 
        if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER)      
            return;
                                                  
        curZ = event.values[SensorManager.DATA_Z];
        if (count++ % FLIP_MAX == 0) 
            Log.v(this, "Flip->current=" + curZ + " ,preZ = " + preZ);
            if ((curZ * preZ) < 0 
                  && (Math.abs(curZ - preZ) > FLIP_MAX))     
                  // 判定翻转动作生效
                 Log.v(this, "suhuazhi Flip->" + curZ + ",preZ" + preZ); 
                 silent();   
             
          
        preZ = curZ;
        count = 1;
      
    
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
5.铃声静音的功能代码块
    private void silent()
        TelecomManager tm;
        tm = (TelecomManager).getSystemService.
            (Context.TELECOM_SERVICE);
        if (tm != null && tm.isRinging()) 
            tm .silenceRinger();
        
    
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

结束语

希望上面的手势体感的翻转算法能给你的开发带来帮助! 
感恩开源,支持开源,以前经常索取,现在我也要分享自己的代码。

以上是关于手势识别 翻转算法的主要内容,如果未能解决你的问题,请参考以下文章

手势识别基于matlab GUI SIFT+SVM算法手势识别含Matlab源码 1789期

在 Swift 中无法识别点击手势(手势开始)

手势识别基于matlab GUI肤色手势识别含Matlab源码 716期

毕设题目:Matlab手势识别

毕业设计 - 题目:基于机器视觉opencv的手势检测 手势识别 算法 - 深度学习 卷积神经网络 opencv python

基于FPGA的手势识别算法的实现