【问题标题】:Android: how to detect gesture of no screen touching?Android:如何检测无屏幕触摸手势?
【发布时间】:2014-02-26 14:13:07
【问题描述】:

我想检测用户在没有触摸屏的情况下所做的手势,即用户只需将手在 Android 设备的屏幕上从扬声器滑到麦克风(例如,距离屏幕 3 厘米)。我尝试了传感器类型 TYPE_PROXIMITY,通过它设备似乎知道用户只需将手放在设备附近然后离开它。但我想知道手势的方向,即用户是从扬声器向麦克风滑动手掌,还是相反。我应该尝试其他传感器类型吗?还是需要我结合多种Sensor来实现?

简单地说,我想知道: 1.如何检测用户在屏幕上滑动? 2.如何检测滑动的方向?

PS:这不是屏幕触摸的手势检测,我可以通过实现 GestureDetector 来处理。

最诚挚的问候,Nessus。

【问题讨论】:

    标签: android gesture detect direction


    【解决方案1】:

    与将手指放在屏幕上相比,将鼠标悬停在屏幕上方 1 厘米的位置非常不方便。具有小光圈的前置摄像头看到的滑动将被运动模糊污染,以获得合理的滑动速度。

    几年前,我通过考虑滑动的运动模糊最终会如何遮挡背景上的图像来解决这个问题。特别是,如果背景有一些渐变,它会被移动手的运动模糊擦除。因此,如果您绘制垂直梯度直方图,您会在滑动时看到一个穿过直方图的孔,并且该孔的运动方向就是您的滑动方向。

    另外两个提示:如果背景上没有太多渐变,可以简单地降低图像分辨率并使用在较低分辨率下受运动模糊影响较小的手的渐变图像。当相机本身移动时,边缘直方图将全局平移,而不是通过直方图移动孔。最后,可以通过嵌入式陀螺仪检测极端的手机旋转以避免误报。

    【讨论】:

      【解决方案2】:

      您无法使用接近传感器检测运动矢量。但通常有一个更智能的传感器可以实现更高的精度:前置摄像头。用相机读取手势更复杂,但你绝对可以用 OpenCV 来做到这一点。

      【讨论】:

      • 谢谢。是否可以将接近传感器与其他传感器结合使用?三星在其广告中展示了可能性;由于手很脏,厨房里的某个人只是在桌子上刷手机。如果最有可能只能通过相机实现,您能否分享更多有关它的信息,例如sn-p或链接?
      • 据我所知,有更新的显示类型可以在不接触表面的情况下检测合理高度的手势。我已经可以在我的 HTC One S 上看到这种行为,它检测到屏幕上方 1 厘米范围内的手势。 OpenCV 项目提供了一组令人印象深刻的功能,但它不是最简单的主题,但绝对值得深入研究。这是一个很好的起点:docs.opencv.org/doc/tutorials/introduction/…
      • 如果 OpenCV 只在屏幕上方 1cm 范围内工作,它可能不是一个用户友好的交互选项。 最多 10 厘米的范围 我认为 90% 是可以接受的。
      • 你误会了,我认为:OpenCV 是一个用于图像处理、运动检测和跟踪以及其他一些方便的功能的框架,可用于处理实时视频流(来自相机,例如)。因此,它仅受相机质量的限制,但这肯定超出了您所说的 10 厘米。检测手势的另一种方法是屏幕本身,在我的情况下限制为 1 厘米(显然更多的是新的三星显示器)。在这种情况下,您不需要 OpenCV。
      • 知道了,伙计。我将在这个阶段实现屏幕触摸,然后尝试 OpenCV。感谢您为未来指明方向:)
      猜你喜欢
      • 2018-05-06
      • 1970-01-01
      • 1970-01-01
      • 2022-08-08
      • 1970-01-01
      • 2016-01-15
      • 1970-01-01
      • 2013-03-22
      • 1970-01-01
      相关资源
      最近更新 更多