最近需要一个字母手势识别功能,字母 C 的识别,因为 C 简单又饱满。可是在网上也没找到什么特别好的库,倒是看了不少关于GestureDetector的介绍,单击双击滑动滚动,上上下下、左左右右、BABA的。
不过还是不知道怎么识别字母手势哈,可能最近脑子不灵光了。脑子不灵光,挖坟还是挺在行的 -- 给我挖到一个「2008」年歪果仁写的不是那么精准的方案,整理并分享之。
远古的气息~
咱们继续。
总结了下这个「糙」方案的整体思想,很简单:先存储后识别。这个思路留意下,后面文章会再提到。
存储- 预先准备工作:
1、预先将用户手势分为4个方向,上(U)下(D)左(L)右(R),并实现上下左右监听的功能。
2、“一次按下 + 中间滑动 + 一次抬起“ = 一次手势 = 一次识别。抬起时会有「手势结束」事件,并返回此次形成的手势字符串。
3、收集数据:基于1,2,一笔划写出一个字母,然后记录其手势字符串,比如"C"就是“LDR”。并以HashMap键值对的方式存储使用:mLetters.put("LDR", "C")。
识别- 正式使用:你想要C,那就将返回的手势字符串和事先存储在 HashMap中的键值对作遍历对比。
经过试验,C的识别率挺高的。这也满足了我的需求。同时,I、J、L、N
M、W、O等正常顺序一笔完成的也很高。
至于其他字母,由于有的大写字母实在一笔划都无法完成,比如A,B等,原贴作者MrSnowflake对此类用了小写的方式识别。但这也失去了「字母手势识别」的意义。故此不推荐。
但是,这份代码里,可以学习的有两点:
1、方便的上下左右手势判断,已经集成到一个手势类 SnowGesture 中。简单集成即可实现上下左右的手势监听。
2、简单识别思路:事先存储然后对比识别。即使目前 4 个方向、一个笔画的实现很糙,那如果是 8 个方向并且可以多笔画呢?这个方向是正确的,之后更精准的方案,本质也是这个思路。另一个我能想到的完全不同的思路是:OCR识别。
领取专属 10元无门槛券
私享最新 技术干货