Archive

2009年11月 的Archive

InterGesture 可輕易的用 XML 來開發手勢應用

2009年11月30日 尚無評論

下下篇的多點 vs 手勢(五) 將會討論以下精彩內容, 敬請期待囉

視覺化手勢開發工具, 包含以下工具
1. 多點手勢轉譯引擎 (洽談合作, 歡迎各大觸控硬件廠商洽詢)
2. 手勢控制管理平台 (月底推出)
3. 視覺化手勢編輯器 (年底推出)

強大的引擎功能, 讓您輕易創建出需要的手勢
不用額外的程式開發, 輕鬆定義鍵盤滑鼠映射方式
可針對不同應用軟件觸發不同事件訊息
可同時對應於不同軟件有不同的手勢操作
讓您的舊有軟件輕鬆移植到Windows觸控環境

http://www.xi-ji.com/pub/blog/Google Earth Gesture.flv
Categories: 軟體技術 Tags:

多點 vs 手勢 (四)

2009年11月30日 尚無評論

之前我們提到過, 多鼠標, 多焦點,  手勢歷史, 接下來談談多點手勢.

我們先來看看單點手勢, 有什麼特徵點呢. 就拿筆記本的觸摸版來說明,
1. 移動
2. 點擊
3. 雙擊(雙擊後離開)
4. 拖曳(雙擊後移動)
5. 卷軸/快捷鍵(區塊)
6. 卷軸速度(壓力/接觸面積/電感容量)
7. 連續卷軸(甩動)
有些特殊的觸摸版還支援以下手勢
8. 卷軸(區塊+軌跡)

這些動作可以有哪些特徵給分離出來呢?
1. 移動 – 手指下去後超過一定時間點未來開,  或是超過一定移動量後離開
2. 點擊 – 手指下去後在一定時間點內離開且不能超過一定移動量
3. 雙擊 – 手指下去後在一定時間點內離開並且在一定時間點內再進入後
            並在一定時間內再度離開, 且位置差不超過一定移動量

4. 拖曳 – ……….(以下邏輯請讀者自行思考, 因為留些篇幅講多點)

這些邏輯被整理後就可以找出一些關鍵性因素,
進入的時間/離開的時間 => 簡化成狀態改變的時間
進去後的位置, 再度進去的位置 => 簡化成不同狀態的移動量
進去後的位置, 持續改變的位置 => 移動量
………所以總結來說, 就找到幾個關鍵因素,
狀態, 時間, 移動量, 移動軌跡(向量), 區塊, 這些條件的組合還可以形成
如 速度 = 移動量/時間 , 軌跡特徵 = 向量的變化量集成

這些要件就構成了手勢判定的主要因素要件. 這些條件的組合,
就區別了不同的手勢, 如果到這裡各位覺得枯燥乏味的話, 那多點會更枯燥的
但如果各位發現到這邊非常有趣的話, 接下來就開始繼續談兩點手勢,
還有其他各種不同硬體可以提供的判斷資訊, 這些資訊在 windows 7 的
標準多點觸控板 HID 上面都有支援, 雖然標準多點觸控板 HID 對點的數量無限制
但 Windows 7 目前僅支援兩點的手勢, 或許在不久的將來會有新的”標準”
(呵呵, 微軟定的就叫做標準了)

兩點手勢, 可以找出多少特徵點呢, 硬體或標準多點HID或Win7定義哪些資訊呢?
這些如果能有些基礎的了解, 相信會對以下要講的內容, 會更有幫助的.

 

繼續討論的就是有關多點手勢的部分, 比照前述方法
我們把 Windows 7 定義的幾個”標準”手勢拿來分析,

1. Tap/Double Tap         (單指單擊/雙擊)
2. Panning with Inertia    (兩指平移)
3. Selection/Drag           (單指選取拖曳)
4. Press and Tap            (兩指單指點擊)
5. Zoom                        (兩指放大縮小)
6. Rotate                       (兩指旋轉)
7. Two finger Tap           (兩指單擊)
8. Press and Hold           (單指久壓)
9. Flicks                         (單指揮甩)

這邊筆者針對幾種手勢作條件分析, 由於條件分析的目的
是要讓手勢能夠被分隔開來, 不會同時滿足兩種手勢的條件,
又要能夠不使兩種手勢都很滿足, 就好像在切割一樣,
充分利用條件空間, 才不會導致設定的條件讓手勢分不開,
又或著讓手勢條件不會滿足, 這樣手勢操作便會很不靈敏,
這些就是經驗, 跟對使用者習慣的了解, 才有可能去做好.

我們就拿 1./3./4. 跟 8. 的手勢條件以及其衝突性做說明
我們先驅分 1.單指單擊跟 3.單指拖曳的區隔性,
假設我們把手指進入時的那個各種條件參數
(時間.位置.手指數量) 記錄下來當作狀態 FingerIn
此時手指訊息會持續送來, 但手指的數量沒變化(包括離開. 手指數為0)
此時的狀態我們叫做 FingerMove , 直到手指離開我們稱 FingerOut
單指單擊跟單指拖曳. 最大的差異就是
1. FingerIn 後是否有移動
2. FingerIn 後是否有超過一段時間
也就是在 FingerIn 之後的 FingerMove 狀態, 滿足上述一條時,
便開始執行拖曳的工作, 但都沒有滿足就變成 FingerOut 時. 就變成單擊
但實際上在滑鼠的操作上面並不是這樣定義, 因為滑鼠有按鍵.
所以只要一有 FingerIn 就直接做 MouseDown 接著就是 MouseMove,
直到 FingerOut 狀態就產生 MouseUp. 而不用去定義太多的條件
是因為滑鼠並不像是手勢一樣, 會有衝突性產生的問題

前面的判斷要繼續延伸
1. FingerIn 後移動 -> 單點拖曳
2. FingerIn 後超過一定時間 -> 單點久壓
3. FingerIn 後一定時間內第二隻手指進入 -> 進入多指狀態 (MultiFingerIn)
接下來要判斷的動作就更複雜了. 正如同前面所述, 每個觸控可以有很多量值
時間. 位置. 手指數量. 在 HID 多點設計中甚至包含了, 寬度高度.離觸控平面多遠,
是否在觸控感應範圍內. 當然還有壓力感應等等. 這麼多種的量值可以做為手勢
判斷的依據. 當進入兩指狀態以後. 就是把這些量值彼此搭配組合. 就可見其複雜性

4. MultiFingerIn 確認是否在一定時間內又有一手指離開 (MultiFingerOut)
    同時原來的點跟新進來的點都維持在一定的位置偏移量(因為手不可能這麼穩定)
    如果符合, 就是產生 Press and Tap
當然接著下去還要去判斷其他手勢的條件, 下面就不在進行說明(師父領進門, 呵呵)
回過頭來說, 上面的判斷用到了兩個重要的條件, 位置變化跟時間變化, 這就是手勢參數
透過這些參數的修正就能去適應大部分的使用者習慣, 不過就像是語音輸入一樣,
每個人都會有操作習慣上的差異, 自然每個人操作順暢度不同, 不過因為動作容易修正人
讓人來配合機器, 但這不是終極目標, 終極目標一定是讓機器來配合人, 那就是要能做到
機器會透過統計學習的方式來自動修正這些參數, 下一篇, 我們就會簡單介紹如何用XML
把這些條件的邏輯給表現出來, 再給予一定的參數, 這樣便可以不用開發程式而達到無限制
的手勢應用.

敬請繼續期待下篇 XML 開發手勢

Categories: 軟體技術 Tags:

多點 vs 手勢 (三)

2009年11月16日 尚無評論

前篇文章中, 從多點慢慢解釋到手勢, 相信各位漸漸對手勢有了初步的了解

接下來我們先暫時不把多點跟手勢混雜在一起來說, 先從手勢的歷史來說名

 

追朔到N年以前, 有個著名的遊戲軟體Black and White, 是第一個將手勢

結合在電腦遊戲當中, 玩家利用鼠標畫出簡單的一些圖形便可以呼叫出預使用

的魔法, 然後結合鍵盤操作便可將魔法使用於遊戲當中. 這是筆者第一次接觸

手勢, 不過是在遊戲中使用

 

隨之而來顯示卡硬體不斷的進步, nVidia 公司推出了可以支持多個虛擬桌面

的顯示卡, 當時其隨卡的驅動軟件就已經包裝的相當完整, 有各種不同的功能

其中, 虛擬桌面的切換, 便是利用滑鼠順時針畫圈跟逆時針畫圈而達成.這是

筆者對於手勢的第二類接觸, 真正應用於作業系統環境中.

 

接著在幾年前, 筆著對於此感到興趣, 變開始積極尋找相關資料(註:筆者早期

從事手寫數位板相關產業, 當時開發的驅動軟件便是用筆畫圈可叫出快捷選單)

, 隨後在國外 sourceforge 上找到一套免費軟件 storkIt, 專門將鼠標動作轉

換為各種視窗及輸入訊息, 並且支持手勢學習, 這是筆者第三次遇見手勢, 且

完完全全獨立成為一套輔助軟件.

 

再來就是 FireFox 等著名瀏覽器開始推出各種手勢的插件, 最後直接整合至

瀏覽器當中, 直到現在, 連 Alps 的觸控板, 也開始支持單點的手勢, 可以做出

六種以上的組合動作, 單點.  就可以設計出六種動作, 那更何況是多點呢?

 

其實單點的手勢, 在觸摸板上面, 早已沿用多時, 從雙擊這個延續鼠標的手勢,

到後來新思推出觸摸版可以支持點擊拖拉, 邊條滾動, 還有慣性動作等等,

都是利用驅動軟件的提升, 來強化這些觸摸版的功能, 以提供更便利的操作性

 

更便利的操作性, 這是一個重點, 也是Apple的產品往往給人一個更貼近的感覺

除了她的炫麗(除外觀之外還有其輸出裝置之UI, 如OS X 操作介面)以外, 還不

斷強化它的操控性(再輸入裝置上面Apple有許多創新, 如多點觸摸版, 最新的

觸摸滑鼠以外, 筆者甚至以為, 將來的車用系統操作, 甚至在方向盤上, 用握住

方向盤的手勢, 就可以完成, 雖然是一個概念, 但依據人類對操控的需求, 一定

會有發生的一天), 所以操作性便是輸入裝置發展的一個重點, 就像車子要好開

一樣. 才能方便讓人駕奴, 使人機合為一體.

 

手勢, 便是這樣的一個東西, 再輸入介面上, 人來最自然的不外乎是聲音動作,

當然還有眼神, 腦波等等這些也都是未來研究輸入裝置的目標, 然而, 目前科技

對於聲音的處理, 仍處在無法穩定使用的狀態下, 那更不用說腦波眼神等這些

最新發展的科技, 所以回頭看看當然會使用的輸入裝置, 最直接的還是動作.

鍵盤滑鼠, 讓人類去學習適應電腦的動作, 接下來的觸摸, 是慢慢趨向人自然的

動作, 然後人不可能只有一指再觸摸, 有可能會有兩指三指甚至拳頭手掌等等,

因為這些才是人類動作的自然表現,  所以說多點手勢, 自然就成為一種自然的

便利操作行為, 不需要經過太多的學習, 與教育訓練, 是一種直覺的操作法

 

下篇我們便將針對多點手勢進行概述, 在下篇則將會提及手勢的開發技巧, 待續

Categories: 軟體技術 Tags:

多點 vs 手勢 (二)

2009年11月16日 尚無評論

上一篇中, 我們聊到了多指標(Multi-pointer)跟多焦點(Multi-focus).
現在回過來, 我們來談談多點, 目前來說, 多點並不是多指標跟多焦點.
都是針對現有的視窗焦點, 跟單一的指標裝置來操作. 那麼, 多點觸摸,
要用來做什麼呢? 畫圖, 玩遊戲, 那對於我們的一般操作能有什麼幫助呢?

這就延生出了手勢的應用, 這點我們將會再下一篇探討手勢的時候,
再作說明, 而現在, 我們討論一下手勢的趨勢兩大因素之一. 真假多點?

要討論真假多點之前, 我們要實際討論一些比較硬件方面的技術問題,
首先, 在一般觀念當中, 多點觸控, 自然應該是有很多個點的座標,
讓我們可以依據這些座標來針對軟體有不同的反應行為, 達到互動.
然而實際上卻不然, 目前的硬件因為技術性上的限制, 主要區分為兩種,
一種是無論幾各點, 都可以讀取實際的座標, 這樣的技術包含在使用
影像 (Microsoft Surface, GestureTek, etc.),
投射電容 (n-Trig,Apple,Cypress, etc), 矩陣電阻等等技術
另一種則無法實際輸出正確的位置, 因為硬件的掃描技術不一樣, 僅能
讀取”可能”的多點座標, 也就是說必須利用演算法排除”鬼點”的問題.
這些技術通常發生在雙光學CCD/CMOS, 紅外線, 投射電容等等.
所以當點數越多的時候, 演算法越複雜, 要能取得真實座標的難度越高,
但是由於可以取得一些”相對”數值的變化. 所以, 這時候依然可以呈現
手勢的需求, 因此, 各家廠商紛紛開發自行的手勢演算法, 直到 Windows 7
定義出兩指的幾種基本手勢, 現在也是各家觸控廠商積極符合的目標.

上面應該大家都聽的很模糊, 什麼是鬼點, 什麼是真假多點, 為何要演算.
舉各最簡單的例子, 紅外線觸摸屏中, 是利用紅外光的遮段來演算座標,
所以我們假設在 X 軸上我們讀取到的燈資料是 1111011111101111
在 Y 軸上我們讀取到的燈資料是 1101111111011111, (0代表被遮斷)
那經過換算的座標, 到底會有幾各呢? 2個? 3個? 4個?, 答案是不知道,
假設我們明明只放了兩個手指, 所以 X軸上Y軸上各有兩個燈被遮罩,
那為何會出現那麼多組合呢? (4,2) (4,A) (B,2) (B,A), 這就是鬼點,
因為同時間的掃描中我們只有 X軸跟Y軸資料, 所以無法知道是哪兩個點,
也有可能是三個點, 因為當手指成為 L 型的排列時, 其中有一個手指被遮蔽的
所以完全無法知道是有這手指還是沒有這手指. 這導致硬件廠商根本無法解決

因此, 透過了一些演算法, 最簡單的就是分時法, 在硬件高速掃描的情況下,
兩隻手指要同時進入的機率變小, 所以只要有第一隻手指進入的座標, 那便可
很快的知道第二點, 例如, 第一點進入的是 (4,2) 那第二點勢必是 (B,A)
但這仍無法解決第三點進入, 如果是在 (B,2) 的位置上, 因為被 (4,2)跟(B,A)
給遮蓋掉了, 所以無法知道是否有第三點進入. 要得知第三點勢必再有一個軸向
的掃描, 才能”看”的到第三點, 那怎麼辦呢? 除了更改硬件設計, 有什麼演算法,
可以求出第三點座標嗎? 顯然在演算的多點中, 是無法完全解決這樣的問題.

但是, 這並不會影響手勢操作所需要判斷的條件, 因為手勢操作中, 很多只需要
相對動作的判斷, 而不需要知道實際的座標位置, 比如說兩指的遠近, 這完全不
需要座標, 只要知道四點形成矩型的對角線長, 因為不論是哪個點, 對角線長都
是一樣的. 透過這個原理, 我們可以找出許多手勢是不需要實際座標的.

Windows 7 不愧是比爾團隊的傑作, 在這裡便已經考慮到, 多點不能光提供座標
還要能提供手勢的訊息, 才能讓硬件快速發展, 軟件發展快速(呵呵)
所以Windows7以前針對輸入裝置的訊息, 除了Mouse/Keyboard/Pen/Digitalizer
現在更增加了 TouchInfo 跟 GestureInfo 兩種訊息, 其中 GestureInfo 跟 Pen
中的手寫辨識訊息很像, 是一個不完全由硬件驅動所產生的訊息, 在 Windows 7
的 Touch SDK 中就有提到三種模式, 應用軟件可以直接讀取 TouchInfo 進行判斷
當然應用軟件也可以讀取 TouchInfo 轉換為 GestureInfo 後再給應用軟件處理,
或是直接開發中間軟件, 將 TouchInfo 的訊息轉換為 GestureInfo. 所以 Win7
在 GestureInfo 裡面作了幾個最基本的手勢. 這是不需要額外開發, Win7直接支持的
不過目前微軟僅定義了兩點的手勢而已(雙指放大縮小/雙直平移/雙指旋轉/雙指雙擊等)

但是隨著多點的發展, 絕對不只是有兩點, 甚至可以有三點四點五點, 那這些手勢呢?
全都仰賴應用軟件自行開發嗎? 或是硬件廠商都會轉換為手勢嗎? 請大家想想,
越來越多的點, 操作起來會更順暢嗎? 手勢發展是不是一個必然的趨勢呢?

今天我們稍微談了一下演算多點跟真實多點的差異, 就在於鬼點(也就是無法得知真實座標)
也導致, 如果要解決鬼點的問題, 透過手勢的包裝, 是一個不錯的方式
(當然, 某些應用軟件可以依據應用需求不同來包裝, 例如很有名的等化器觸控輸入裝置)

那當然 , 手勢這麼重要, 我們下一章節, 自然來談談手勢囉.
(補充說明: 由於下一章節, 有些內容會涉及翔基商業機密, 故若是不能說明很清楚, 還請見諒)

Categories: 軟體技術 Tags:

多點 vs 手勢 (一)

2009年11月16日 尚無評論

首先, 我們把多點跟手勢分別來探討, 才能知道多點手勢, 如何成為未來發展趨勢

談到多點, 這裡要導入一個新觀念, 多指標跟多焦距.


什麼是多指標呢? 也就是在同一個操作系統上面, 可以有兩個以上的指標裝置
目前 Windows 7 雖然導入多指標裝置 (註: 鼠標訊息多帶了一個ID可以辨認),
但尚未有作業系統可以完全支援 (註: Windows 7的小畫家雖可在多點設備上使用
兩支畫筆來做畫, 但作業系統尚未全然支持多指標裝置), 原因就在於多焦距的解決,
若真正要參考多指標的作業系統, 可以測試 Linux 版的 MPX 桌面系統, 當兩隻滑鼠
同時接上時, 可以看到兩個鼠標裝置, 可以用兩隻鼠標來針對視窗做放大縮小,
也可以用兩隻鼠標在同一個小畫家內用兩支畫筆做畫, 更可以在兩個小畫家內, “分別”
用兩支滑鼠去做畫, 這裡, 就牽涉到多焦距的作業系統, 兩個不同的輸入裝置, 如何
去定義在兩個不同的視窗內, 同時間作輸入呢?

 

相信很多人都知道遊戲機有兩人以上對打模式, 舉個簡單的例子, Nitendo 的 Wii,
在主畫面中, 就會出現兩個以上的手指, 分別代表兩個以上的操作器(也就是輸入裝置)
所指向的位置, 如果各位有玩過, 必然知道, 在很多遊戲選單裡面, 僅支持1號操作器
做選擇, 進入遊戲後, 才會分別支持各個操作器的動作. 為何僅有1號操作器能夠操作?
想想, 如果同時間兩個人分別去選擇兩個不同的選項, 那該如何判定呢?

這就是多指標的困擾, Wii 還僅僅只是單一視窗, 也僅僅只能跑單一遊戲, 所以輸入裝置
對硬的只有一個遊戲, 在遊戲中, 怎麼去處理兩個不同的動作, 讓遊戲自行決定. 但是,
如果像是 Windows 這樣的多工, 多人, 多視窗的作業系統, 該如何去對應兩個不同的
輸入裝置呢? 簡單來說, 如果我們有兩個桌面, 兩個鼠標, 兩個鍵盤, 兩個顯視器, 一台
電腦, 一套作業系統, 那我們非常容易做簡單的定義, 1 號鍵盤滑鼠只操作1號桌面內的
, 而1號桌面僅顯示在1號顯示器上面, 那自然 2 號就完全對硬到 2 號了, 但是, 如果
我們把桌面變成延伸桌面, 也就是 1號鍵盤鼠標, 跟 2號鍵盤鼠標, 都對硬到1號桌面,
那鼠標有可能同時存在1個顯示器上, 也可能分別存在不同顯示器上, 那不全亂套了嘛?

這也就是說, 當 Windows 邁入真正多人, 多工, 多視窗的時候, 有一大難題, 到底哪個
視窗是所謂的焦點視窗, 這就很難決定了, 所以 MPX 系統用了一個手動的方式去鎖定
讓使用者自行決定哪個視窗對應哪個輸入裝置, 但是 Windows 7 目前來說, 尚未看到
支援這樣的應用, 就是說, 兩個指標裝置, 分別操作兩個不同的視窗.

 

聊了那麼多, 多焦點跟多指標, 似乎是沒有提到多點, 是因為, 多點的有些操作行為,
跟多指標非常類似, 但卻不能夠做到多焦點, 所以這裡一定要分清楚, 多點輸入, 並非
會出現兩個鼠標裝置 (註:雖然Windows7支援, 但需要特殊軟件來模擬呈現), 也不會
讓兩支手指頭分別去操作不同視窗內的東西 (註: 翔基計畫開發Windows7中介軟件,
將多點輸入裝置, 模擬成不同的輸入裝置ID來達到此目的)

 

好了,  澄清完了多點, 多指標, 多焦點的差異之後, 下一篇, 將繼續探討, 多點與硬件
較為密切的真實多點與演算多點, 這裡, 會成為手勢發展的兩大主因之一. 敬請期待

Categories: 軟體技術 Tags: