スタイラス入力のジェスチャ認識

// この投稿は XAML Advent Calendar 2014 の 13 日目の記事です。

タッチにはタッチのジェスチャが、空間には空間のジェスチャがありますが、
スタイラス (ペン) にもスタイラスに特化したジェスチャがあり、
その種類は、WPF では ApplicationGesture 列挙体で定義されています。
タップやフリックのほか、円や三角形などの図形もあります。

WPF の InkCanvas はペン入力のできるコントロールですが、
実はこれらのジェスチャを認識する機能を備えており、簡単な設定だけでその機能を有効にできます。

その実装方法は次の通りです。
XAML ファイルおよびコードビハインド ファイルを続けて示します。
(全体のソースコードは GitHub の InkSample にあります。)

 

InkCanvas を配置し、EditingMode プロパティを GestureOnly または InkAndGesture に設定するだけで、
すべてのジェスチャが有効になります。
有効にするジェスチャを明示的に指定するには、SetEnabledGestures メソッドを利用します。

GestureCanvas.SetEnabledGestures(new[] { ApplicationGesture.Circle, ApplicationGesture.Check });

ジェスチャが認識されると Gesture イベントが発生します。
認識されるジェスチャはつねに 1 つとは限らず、その可能性のあるものが複数報告されます。
そして認識結果にはそれぞれの信頼度が含まれているのですが、
数値ではなく RecognitionConfidence 列挙体の値 (高・中・低の 3 段階) で表されます。

さて、このような実装をしてデジタイザーペンで入力してみた様子は、次の動画の前半をご覧ください。
また、動画の後半は、このジェスチャ認識機能をテストの採点に適用した例です。

ペン入力でジェスチャ認識 (Gestures of stylus pen)

 

他にも、V 字形 (Chevron) とか。

ChevronUp ジェスチャ

動画の後半の、テストの採点への適用例。
点数の入力や合計点の計算は自動で処理されます。

InkScoring

 

使ってみた感想としては、円 (○) を書いたつもりが三角形 (△) に誤認識されることが多いです。
信頼度 (RecognitionConfidence) は無視したほうがよいのかもしれません。
あと、どう書けば認識されるのかわからないジェスチャもあるのですが、調べきれていません。

作成したサンプル
動画の前半: InkGestureWpf (GitHub)
動画の後半: InkScoreWpf (GitHub)

素材
答案: 爆笑! 学校のテストの珍回答、おもしろい問題まとめ
答案: 子供達のテストのおもしろ珍回答(珍解答)・落書き画像で笑うと負け
効果音: Music is VFR

参照
InkCanvas クラス
ApplicationGesture 列挙体

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。