About me

我的相片
I'm a web and software developer from Kaohsiung, Taiwan.
I design and implement user interfaces, also contribute to open source projects.
http://penkia.net/portfolio

2012年2月7日 星期二

以自由軟體實作的 Linux 中文手寫輸入法

移動裝置與觸控螢幕盛行多年, Linux 上的觸控鍵盤 (以前叫螢幕小鍵盤, on-screen keyboard 或稱 virtual keyboard) 千百種, 我自己也用 QML 寫了一個 qVKB, 可以在 Ubuntu 和 MeeGo 上使用. 但是講到 Linux 上面的 "中文手寫" 輸入法就不太常見, 大概跟開放原始碼的引擎商業化程度/辨識度不高有關係.

這兩天花了點時間蒐集資料, Nokia N9/N950 (MeeGo Harmattan 系統) 預載的中文手寫辨識引擎沒記錯的話來自於漢王, 搜尋了一下發現 OXPad 有很像 Tegaki 的展示影片, 沒看到原始碼 (大概辨識引擎也是商業授權?). 基於輸入法的實作還有 ibus-handwrite, 以及一系列用 Tegaki 改的輸入法面板 (panel), 包括 ibus-tekagi, scim-tekagi, oxim-tekagi..等等, 不過那是用 Python-Gtk 兜出來的, 兩欄式的介面也不好用.

研究了一下, 要達成初步功能似乎不會很難, 乾脆自己刻一個: qml-handwriting

  • 手寫區 (writing area) - 介面使用 QML 和 Canvas 完成 (Qt 4.7 以前要從 Qt Labs 安裝, 但 QtQuick 2.0 以後就內建了)
  • 筆劃偵測 (strokes detection) - 採用 Joshua Koo 以 JavaScript 實作的 ShortStraw 演算法
  • 辨識引擎 (handwriting recognition) - 使用 Tekagi 的 model 及 Zinnia 的 engine, 支援繁體中文、簡體中文及日文

速度及辨識度還可接受, 下一步大概會試著整合近輸入法面板, 在 xPad 裡預設安裝. 技術上可能可以把 Zinnia 的部份抽出來包成 QML plugin; 或進一步使用 WebKit Canvas, 配上 @timdream 超強的 ime.js. 總之原始碼以 LGPL 授權, 歡迎修改使用, 敬請不吝指教.

Update #1: 小帥提表示 ime.js 不再維護, 日後會整併到 B2G 專案的 Gaia 界面中.

Update #2: 來自 Nokia 的 @yinyunqiao 很迅速地將 qml-handwriting 移植到 Qt5 了, 有需要的話可以參考.