如何写一个简单的手写识别算法?
gesture recognizer 是比较好的解法。
洒家也有一个类似的算法,借鉴了原始手写ocr的思路来实现的。其实是写在 $1 gesture recognizer 之前的,但没有 $1 gesture recognizer 归纳得好,作者jacob还是我偶像。
Realtime Gesture recognition
把所有的笔画定义了个8个方向,然后将B的笔画可以分解成一个字符串。然后当人在触摸屏上画出一个符号时,也将它分解成8个方向的字符串,最后比较两个字符串的距离就能判断出和不同符号的近似度。
实现起来也很简单,第一步去噪,因为不同触摸屏的采样频率不同。
第二步把去噪后的数据转换成方向序列,把之前得到的点换成方向序列,并把方向序列归纳到之前定义的8个方向中去。
第三步把连续一致的方向合并。
第四步把小片段的移动略去,最后就能得出其实是画了一个凹的形状。
这个算法的厉害之处是可以实时识别,画到一半也能判断出来。
Realtime Gesture recognition 源代码和demo都在上面了。
===============
吐槽时间。。。。
刚写完论文累死了,来吐槽。。。。
原来大家都觉得第一名不靠谱,怎么木有人把我顶上去!我眼红着那300多票呢!
我来告诉你为什么第一名不靠谱,
首先ocr拿来做gesture recognition是不对滴!
ocr是一个比gesture recognition更难的问题,因为ocr得到的是一张图片,所有点并没有时间戳,而手势识别时,每一下移动是有时间戳的,所以是知道“怎么画出来”这个额外信息的。
其次ocr不是这么解释的。
ocr问题的重点是怎么选择特征,比如知名的uci 数据集就有以下这些特征量:
1. lettr capital letter (26 values from A to Z)
2. x-box horizontal position of box (integer)
3. y-box vertical position of box (integer)
4. width width of box (integer)
5. high height of box (integer)
6. onpix total # on pixels (integer)
7. x-bar mean x of on pixels in box (integer)
8. y-bar mean y of on pixels in box (integer)
9. x2bar mean x variance (integer)
10. y2bar mean y variance (integer)
11. xybar mean x y correlation (integer)
12. x2ybr mean of x * x * y (integer)
13. xy2br mean of x * y * y (integer)
14. x-ege mean edge count left to right (integer)
15. xegvy correlation of x-ege with y (integer)
16. y-ege mean edge count bottom to top (integer)
17. yegvx correlation of y-ege with x (integer)
我不懂deep learning,别和我讲什么ocropus....
********************************************************************************************
移动设备多用手势进行输入,用户通过手指在屏幕上画出一个特定符号,计算机识别出来后给予响应的反应,要比让用户点击繁琐的按钮为直接和有趣,而如果为每种手势编写一段识别代码的话是件得不偿失的事情。如何设计一种通用的手势识别算法来完成上面的事情呢?
我们可以模仿笔记识别方法,实现一个简单的笔画识别模块,流程如下:
第一步:手势归一化
1. 手指按下时开始记录轨迹点,每划过一个新的点就记录到手势描述数组guesture中,直到手指离开屏幕。
2. 将gesture数组里每个点的x,y坐标最大值与最小值求出中上下左右的边缘,求出该手势路径点的覆盖面积。
3. 手势坐标归一化:以手势中心点为原点,将gesture里顶点归一化到-1<=x<=1, -1<=y<=1空间中。
4. 数组长度归一化:将手势路径按照长度均匀划分成32段,用共32个新顶点替换guestue里的老顶点。
第二步:手势相似度
1. 手势点乘:g1 * g2 = g1.x1*g2.x1 + g1.y1*g2.y1 + … + g1.x32*g2.x32 + g1.y32*g2.y32
2. 手势相似:相似度(g1, g2)=g1*g2/sqrt(g1*g1 + g2*g2)
由此我们可以根据两个手势的相似度算成一个分数score。用户输入了一个手势g,我们回合手势样本中的所有样本g1-gn打一次相似度分数,然后求出相似度最大的那个样本gm并且该分数大于某个特定阀值(比如0.8),即可以判断用户输入g相似于手势样本 gm !
--------------------------------------------------------------------------------------------------------------------------------------------
可以玩我5年前写的手势识别 Flash 游戏:
***************************************************************************************************************************************************
$1 Unistroke Recognizer,不用谢~代码非常简单,各种编程语言都有开源的库
我擦,排名第一的在说什么,我完全看不懂……
Search · dollar gesture recognizer · GitHub
******************************************************************************************************************************
ioccc 2013 年的一段代码可以一战。
Best of show
Adrian Cable - OCR in quick brown fox ASCII art
US
这段鬼畜的代码 (cable2.c) 可以做到识别手写的 ascii 字符,
识别不同的颜色,
兼容不同的尺寸,
识别一段代码,
排版字体,
以及一个笑脸 :)
执行效果:
references:
http://www.zhihu.com/question/29238666
相关文章
- 华为云文字识别深层算法突破 助力复产复工
- 使用modelarts部署bert命名实体识别模型
- OpenCV每日函数 Object Detection目标检测模块 (4) 基于 DNN 的人脸检测和识别
- Atitit 图像清晰度 模糊度 检测 识别 评价算法 原理
- Atitit.论图片类型 垃圾文件的识别与清理 流程与设计原则 与api概要设计 v2 pbj
- CV之IC之AlexNet:基于tensorflow框架采用CNN卷积神经网络算法(改进的AlexNet,训练/评估/推理)实现猫狗分类识别案例应用
- ML之K-means:基于(完整的)手写数字图片识别数据集利用K-means算法实现图片聚类
- NLP之ASR:基于python和机器学习算法带你玩转的语音实时识别技术
- 基于 LMS 和 CLMS 进行线性系统识别比较(Matlab代码实现)
- 华为云&华中大联合实验室,夺得2019ICDAR发票识别竞赛世界第一
- 华为云文字识别深层算法突破 助力复产复工
- CTPN+CRNN算法端到端实现文字识别的实战开发
- m基于MATLAB的发票数字信息识别算法仿真,通过形态学处理进行字符分割,通过模板匹配实现数字字母识别
- 基于形态学处理的车牌提取,字符分割和车牌识别算法matlab仿真
- m十字路口多功能控制交通系统,包括基于遗传算法优化的红绿灯时长模糊控制器和基于BP神经网络的车牌识别算法
- m基于小波神经网络和HOG特征提取的手写汉字识别算法matlab仿真
- 基于EM算法的参数辨识和分类识别算法matlab仿真
- 人生苦短之我用python之pytesseract文字识别
- Pyqt+QRcode 生成 识别 二维码
- 在OpenCV里用kNN实现手写字母识别
- 从声学模型算法总结 2016 年语音识别的重大进步丨硬创公开课
- 在Azure Sentinel中识别与用户和实体行为分析(UEBA)的高级威胁——看不出技术细节
- 如何利用AI识别未知——加入未知类(不太靠谱),检测待识别数据和已知样本数据的匹配程度(例如使用CNN降维,再用knn类似距离来实现),将问题转化为特征搜索问题而非决策问题,使用HTM算法(记忆+模式匹配预测就是智能),GAN异常检测,RBF
- PE格式:实现PE文件特征码识别
- 【语音识别】基于K近邻分类算法的语音情感识别(Matlab代码实现)