最近业余时间在学习android的系统,想尝试将中文手写输入支持加到android上去,将最近的学习结果记录下来。

先上个截图:


你可以在线测试: http://quake.3322.org/

我最先google到一个开源的手写输入引擎是Tomoe: http://tomoe.sourceforge.jp,它包括识别引擎,整套的用户界面(GTK)以及SCIM的输入法模块,最初是只支持识别日文,在0.6.0版本red hat的工程师贡献了简体中文字典。因为在android系统上已经有很好的用户界面支持(触摸屏api),其实只需要一个识别引擎就可以了,Tomoe的代码太多,学习起来比较耗费时间。后来在Tomoe的邮件列表上发现了Zinnia: http://zinnia.sourceforge.net/,这个东西很小巧,也很有特色:
1. 基于SVM,识别率高
2. 基于C++标准库,容易移植
3. 提供线程安全库,C/C++/Perl/Ruby/Python容易调用
4. 训练速度和识别速度都很快,识别据说可以达到50~100字/秒

安装zinnia很简单,下载源代码以后解压缩编译安装即可:
./configuremakesudo make install

因为我对ruby比较熟悉,顺便测试了一下它的ruby库调用,在zinnia源代码目录下面有个ruby目录,运行
ruby extconf.rbmakesudo make install

就可以安装好它的ruby扩展库,如何调用代码可以看一下ruby目录下面的test.rb
Zinnia通过解析用户输入的笔画顺序以及坐标,列出前N个最合适的文字,输入字符串包括画布宽度/高度以及坐标值,格式如下:
(character (width canvas width) (height canvas height) (strokes   ((0-th-stroke 0-th-strokey) ... (0-th-stroke 0-th-strokey))   ((1-th-stroke 0-th-strokey) ... (1-th-stroke 1-th-strokey))   ((2-th-stroke 2-th-strokey) ... (2-th-stroke 2-th-strokey))   ...))


前面的demo是抄袭一个基于ajax的日文手写输入Demo: http://www.chasen.org/~taku/software/ajax/hwr/,后台是通过ruby调用zinnia,你可以从附件下载到源代码。
测试下来有少量的字识别率不高,比如"子","人"等,猜测可能和模型数据和算法都有关系。

因为zinnia是基于C++的,下一步要学习一下如何在android上交叉编译,过一段时间再写第2篇博客介绍。

更多相关文章

  1. Android实现类似excel表格的方法整理
  2. 如何解决android NDK r8c 老是重新编译源代码的问题
  3. android apk反编译(zz)
  4. Android8.0 图形引擎的心跳 - Vsync信号
  5. Android关于socket编程,实现与服务器端通信
  6. jni cocos2d-x游戏引擎移植到android:helloworld
  7. Android下编译库文件jar包并在应用中调用
  8. 那两年炼就的Android内功修养
  9. android lint 是什么

随机推荐

  1. Android相机开发那些坑
  2. Android(安卓)stuido常用快捷方式整理
  3. Android深入浅出之Audio第三部分Audio Po
  4. Android和设计模式:模板模式
  5. Style在Android中的继承关系
  6. Android(安卓)正移植到C#
  7. Android安全性真相:危险被杀毒软件商夸大
  8. Android中LCD背光驱动
  9. Android新手入门 FAQ
  10. Android(安卓)绑定Service 实现android控