対象読者: 本記事は、B1、B2、F8、K7、KF1、L5、P2、Q6、Q8、T2、Y6各モデルの読み取りペンに搭載されるジェスチャー認識アルゴリズムを理解する必要がある、ファームウェアエンジニア、UXデザイナー、OEMプロダクトマネージャーを対象としています。カスタムメニューUIを設計している、あるいは既存の辞書アプリへジェスチャー機能を追加しようとしている方を想定しており、認識率、レイテンシ、CPU負荷の目安を把握することを目的としています。
読み取りペンのジェスチャーとは、30 ms〜500 msの間に取得される一連のタッチサンプルを指します。ファームウェアはこれらのサンプルを離散的なジェスチャーコード(TAP、SWIPE_LEFT、SWIPE_RIGHT、SWIPE_UP、SWIPE_DOWN、LONG_PRESS、DOUBLE_TAP、CIRCLE)に変換し、アプリケーション層がそれをUIアクションにマッピングします。この変換は11モデルいずれでも実行可能な規模ですが、センサーの解像度、サンプルレート、ホストCPUの余裕はモデルごとに異なるため、それぞれ個別にチューニングされています。本記事ではアルゴリズム本体、チューニング値、およびバイヤーが想定すべき障害モードについて解説します。
1. ジェスチャー語彙
当社が出荷する11モデル全体で、ジェスチャー語彙は共通です:
| ジェスチャー | サンプルウィンドウ | 対応モデル |
|---|---|---|
| タップ | 30 ms〜250 ms のタッチ+リリース | 全11モデル(ゾーン式モデルではボタン代替経由) |
| LONG_PRESS | 600 ms〜2000 ms の連続タッチ | K7、KF1、L5、Q8、T2 |
| DOUBLE_TAP | 300 ms 以内の2回タップ | L5、Q8、T2 |
| スワイプ左/右 | 50 ms〜250 ms の連続ドラッグ、≥ 8 mm | K7、KF1、L5、Q8、T2 |
| スワイプ上/下 | 同上、縦方向 | L5、Q8、T2 のみ |
| CIRCLE | 閉ループ経路、円周 ≥ 12 mm | Q8、T2(プレミアム機能) |
シンプルゾーン型モデル(B1、B2、F8、P2、Q6、Y6)は2Dタッチセンサーを搭載しないため、ジェスチャー機能を一切実行しません。代わりに4〜8個のディスクリートボタンゾーンを採用しています。本記事はマトリックス型モデルに焦点を絞ります。
2. アルゴリズムパイプライン
ジェスチャー認識アルゴリズムは4段階で実行されます。各段階に厳格なCPUバジェットが設定されており、いずれかの段階がバジェットを超えた場合、誤認識を防ぐためジェスチャーは破棄され(コマンド発行なし)ます。
ステージ1:サンプル取得。タッチコントローラーは80 Hz〜120 Hzで座標を出力します。ホストMCUは、K7/KF1/L5ではI2C(100 kHz〜400 kHz)、Q8/T2ではSPI(10 MHz)でこれらを読み取ります。各サンプルは (x, y, t) のタプルです。
ステージ2:デバウンスと外れ値除去。4 mm以内かつ20 ms以内に存在する2つのサンプルは1つに統合されます。移動重心から12 mm以上乖離したサンプルは外れ値として破棄されます。本ステージはL5上でサンプルあたり 0.4 ms を要します。
ステージ3:特徴抽出。クリーン化されたサンプルストリームから7つの特徴量を算出します:総変位量、総経路長、平均速度、最大速度、主方向角度、曲率、および持続時間。これらが分類器への入力となります。
ステージ4:分類。6方向のスワイプにはテンプレートマッチングスコアラーを使用し、タイミング依存のジェスチャー(TAP、LONG_PRESS、DOUBLE_TAP)には状態遷移マシンを用います。状態マシンとテンプレートマッチャーを合わせて、L5上でジェスチャーあたり 1.6 ms を消費します。
L5における1ジェスチャーあたりの合計バジェット:0.4 + 1.6 + ステージ4分類器 = 2.4 ms であり、これに割り込み処理オーバーヘッドを加えても、8.3 msのフレーム間バジェット超過まで 6 ms の余裕があります。
3. スワイプ用テンプレートマッチャー
6方向のスワイプそれぞれ(左、右、上、下、およびT2では2方向の斜め)にテンプレートが用意されています。テンプレートは12 mm長に正規化され、原点中心に配置された、想定サンプル軌跡を表す16点のポリラインです。認識時には、入力サンプルストリームを同様に正規化し(重心を原点に移動、12 mmにスケール、16点に再サンプリング)、各点における入力とテンプレートの平均ユークリッド距離を算出します。
マッチスコアは 1 - (平均距離 / 12) です。スコア 1.0 が完全一致、0.0 が直交を意味します。分類器は最もスコアの高いテンプレートを返しますが、そのスコアが 0.78 を超える場合に限ります。0.78 未満は「不明」として分類され、無視されます。
閾値 0.78 は、当社の2施設で30名の4〜9歳児から収集した1,200ジェスチャーデータセットでチューニングされました。この閾値でL5における真陽性率 96.4%、偽陽性率 0.6% を達成しています。0.82 に厳格化すると偽陽性率は 0.2% に低下しますが真陽性率も 91.7% に下がります。0.72 に緩和すると偽陽性率は 2.4%、真陽性率は 98.6% に上昇します。
4. 時間依存ジェスチャー用の状態マシン
TAP、LONG_PRESS、DOUBLE_TAP はタイミングに依存するため、サンプル形状のみでは分類できません。5状態を持つ有限状態マシンを使用します:
- IDLE:タッチなし。
- TOUCH_DOWN:最初のサンプル受信、PRESS へ遷移。
- PRESS:タッチ保持中、ロングプレスタイマーを開始。
- RELEASE:タッチ離去、TAP/LONG_PRESS/DOUBLE_TAP を判定。
- WAIT_DOUBLE:離去後、2回目のタップを最大 300 ms 待機。
遷移は4つの閾値で制御されます:
- LONG_PRESS_TIME:600 ms(400〜2000 ms で設定可能)。
- DOUBLE_TAP_GAP:300 ms。
- TAP_MAX_DURATION:250 ms。
- TAP_MAX_DISPLACEMENT:4 mm。
状態マシンはタッチISR内の switch 文として実装されており、L5上で遷移あたり 0.06 ms を要します。TAP の合計認識レイテンシはタップ持続時間に等しいもの+1サンプル間隔であり、最悪ケースで 280 ms〜320 ms、典型的には 130 ms〜180 ms です。
5. CPU およびメモリコスト
L5 におけるジェスチャー全体パイプライン(テンプレートマッチャー+状態マシン+特徴抽出)は、3ジェスチャー/秒のレートで 1.9 MIPS の CPU を消費します。L5 のホスト SoC はオーディオおよびOCR処理後に 240 MIPS の余裕があるため、ジェスチャーエンジンは事実上無償です。
メモリコストは、コード 4.2 KB(フラッシュ領域)および作業 RAM 1.1 KB(16点テンプレートとサンプルバッファ用)です。K7 および KF1 ではテンプレートがより低い最適化でコンパイルされるため、同じパイプラインでコード 5.1 KB、RAM 1.4 KB を要します。
Q8 および T2 は24点の Hough 変換風ループを用いた CIRCLE ジェスチャー分類器を追加します。これによりコード 3.4 KB と RAM 0.8 KB が加算され、分類時に 4.1 MIPS で動作します。CIRCLE はプレミアム機能であり、Q8 ではデフォルトで無効、T2 でのみ有効ですが、OEM顧客が要望すれば Q8 でも有効化できます。
6. レイテンシ:タップからアクション、スワイプからアクション
物理的なジェスチャー完了からホスト側アクション発行までのエンドツーエンドレイテンシ:
| ジェスチャー | L5 / Q8 / T2 | K7 / KF1 |
|---|---|---|
| タップ | 130 ms〜180 ms | 180 ms〜240 ms |
| LONG_PRESS | 620 ms〜720 ms | 700 ms〜820 ms |
| DOUBLE_TAP | 320 ms〜420 ms | 400 ms〜520 ms |
| スワイプ(任意方向) | 55 ms〜65 ms | 75 ms〜95 ms |
| サークル | 80 ms ~ 110 ms(T2 のみ) | 該当なし |
これらの数値には、タッチコントローラーのレポートレート、I2C/SPI 転送時間、アルゴリズムの実行時間、ホストアプリケーションの応答時間が含まれます。
7. さまざまなユーザー層に向けたチューニング
デフォルトの閾値は 4 歳から 9 歳の子供向けに調整されています。成人ユーザー(教師、保護者)の場合、ジェスチャーは大きく速くなるため、同じ閾値でも真陽性率は 98.5% まで向上します。4 歳未満の子供向けには、OEM ご購入者はファームウェア設定により緩めのジェスチャープロファイルをリクエストできます。
- LONG_PRESS_TIME を 600 ms から 900 ms に引き上げる。
- TAP_MAX_DISPLACEMENT を 4 mm から 6 mm に引き上げる。
- SWIPE_MIN_DISPLACEMENT を 8 mm から 5 mm に引き下げる。
このプロファイルは KIDS_PROFILE_V1 と呼ばれ、全 11 モデルでファームウェアのビルドフラグにより対応可能です。2 歳から 4 歳向けの OEM プログラムでは、このプロファイルをリクエストしてください。
8. OEM ご購入者向けの受入テスト
ジェスチャー認識について、以下の 5 項目の受入テストスイートを推奨します。
- SWIPE_LEFT の認識率:3 名の異なるテスターによる 100 回の試行で 96% 以上。
- SWIPE_RIGHT の認識率:100 回の試行で 96% 以上。
- TAP の誤検出率:非タッチ 1,000 秒間で 1% 以下。
- LONG_PRESS の認識レイテンシ:600 ms ~ 800 ms。
- DOUBLE_TAP の認識率:100 回の試行で 92% 以上。
テスターは対象年齢層から選ぶ必要があります。成人エンジニアのみでテストした場合、成人のジェスチャーは一貫性が高いため、精度が高く出てしまいます。当社内部のバリデーションでは、4 歳から 9 歳の子供 30 名と成人 10 名を使用しており、公表している 96.4% の真陽性率は子供のみの結果です。
9. よくある失敗事例
OEM プログラムにおいて、以下のようなジェスチャー統合の失敗事例が確認されています。
- ホストアプリケーションが割り込みを使用せず 50 ms ループでジェスチャーをポーリングしているため、50 ms のレイテンシが追加されている。必ずポーリングではなくジェスチャー割り込みを使用してください。
- アプリケーションが DOUBLE_TAP を有効にしているが DOUBLE_TAP_GAP を 300 ms に設定するのを忘れているため、すべてのタップがダブルタップとして分類されている。
- アプリケーションが CIRCLE を「次のページ」にマッピングしているが、子供のスワイプが小さすぎる(12 mm ではなく 5 mm)ため、アルゴリズムがノイズとして分類する。より若いユーザーを対象とする場合は、CIRCLE_MIN_CIRCUMFERENCE を 12 mm から 8 mm に引き下げてください。
- アプリケーションが LONG_PRESS を無効にしているにもかかわらずタイマーを動作させ続けているため、常時 0.04 MIPS の CPU を浪費している。LONG_PRESS_ENABLE = 0 を設定してタイマーをスキップしてください。
ジェスチャーエンジンにデータを送るタッチセンサーについて詳しくは、読書ペンのタッチ精度とジッター試験。参照辞書アプリでのジェスチャーと UI アクションのマッピング方法は、読書ペン辞書ファイルのフォーマットと版を参照。ホスト SoC が OCR やオーディオに対してジェスチャータスクをどのようにスケジュールするかは、ホスト SoC がジェスチャータスクを OCR やオーディオに対してどのようにスケジュールするかについては、. OEM仕様の記載言語と受入基準については、読書ペン OEM/ODM 仕様テンプレートを参照。サンプルロットから 5 名テスターによるヒストグラム付きのジェスチャー試験報告書を請求する場合は、/request-a-quote.
10. OEM 契約に明記すべき仕様文言
実用的で正当なOEM向けジェスチャー認識仕様には、以下の項目が含まれます。
- モデルごとの対応状況を明記したジェスチャー語彙一覧。
- OEM 契約書に盛り込むべきジェスチャー認識の仕様文言
- 防御可能な OEM 仕様のジェスチャー認識には以下を含めます。
- モデルごとの対応状況を記したジェスチャー語彙リスト。
- テンプレートマッチャーの閾値(デフォルト 0.78、設定範囲 0.70 ~ 0.85)。
- LONG_PRESS_TIME(デフォルト 600 ms)。
- DOUBLE_TAP_GAP(デフォルト 300 ms)。
これらの数値を保証できないサプライヤーは、まだ量産品質でアルゴリズムを運用できていません。当社は各生産ロットごとに機種別ジェスチャー試験報告書を追加費用なしで公開しています。
1,000 秒の非タッチテストで FALSE_POSITIVE_RATE ≤ 1%。
- ジェスチャークラスごとのジェスチャーからアクションへのレイテンシ表。
- 読書ペン向けタッチスクリーンコントローラーとジェスチャー
- これらの数値を保証できないサプライヤーは、まだアルゴリズムを量産品質で運用できていません。当社では各生産バッチごとにモデル別のジェスチャーテストレポートを追加費用なしで公開しています。
- 読みペン辞書ファイル形式とエディション
- 読書ペンの品質管理と AQL 基準
- 読書ペン表示器の輝度均一性
補足資料:ジェスチャーコンボと複数指のシーケンス
セクション1で示したシングルジェスチャーの語彙以外に、L5、Q8、T2のファームウェアはパワーユーザー向けに2本指のジェスチャーコンボを少数サポートしています。
- TWO_FINGER_TAP:辞書アプリの戻るボタンと同等の動作です。
- TWO_FINGER_SWIPE_LEFT:長文リーダーでのページ戻りコマンドと同等の動作です。
- PINCH:ピンチサイクルごとに25%ずつ辞書テキストを拡大・縮小します。
これらのコンボはデフォルトの語彙には含まれず、初期状態では無効になっています。OEMバイヤーはファームウェアのビルドフラグで有効化でき、追加でコード0.8KB、RAM0.3KBを消費します。
ジェスチャーエンジンはL5、Q8、T2で低電力の「タップでウェイクアップ」モードもサポートします。このモードではタッチコントローラーのポーリングが120Hzではなく8Hzとなり、消費電力はわずか0.2mWです。タップを検出すると、コントローラーは12ms以内に120Hzへ切り替わります。このモードはバッテリーが大きいためQ8とT2ではデフォルトで有効、L5はバッテリーが小さいため、辞書検索ごとのウェイクアップ遅延ペナルティを吸収できないことから無効となっています。
2023年以降に出荷された47,000台以上において、ジェスチャー関連のフィールド故障は全RMAの1.1%を占めています。主な原因は液体浸入によるタッチゾーンの固着(38%)、次にセンサー端でのオーバーレイ剥離(24%)、ファームウェアロックアップ(18%)と続きます。1.1%という率は、ジェスチャーがより優れたシーリングと厳格なAQLが適用されるプレミアムモデルでのみ使用されるため、タッチ故障率4.2%を大きく下回っています。