本發(fā)明涉及用戶接口,并且更具體地涉及用于檢測姿勢輸入的方法。
背景技術(shù):姿勢識別,特別是手勢識別使得人類能夠與機器交互并且不利用任何機械裝置自然地交互。姿勢識別可以利用來自計算機視覺和圖像處理的技術(shù)進行。使用姿勢識別的概念,能夠?qū)⑹种钢赶蛴嬎銠C屏幕,從而光標將相應(yīng)地移動。姿勢包括靜態(tài)姿勢、例如勝利標志(食指和中指伸展并分開而拇指和剩余手指攥緊的手勢),和動態(tài)姿勢,即,在單個有效姿勢輸入的時段內(nèi),改變用戶手部形狀(例如,伸展一些手指或攥緊一些手指)和或用戶手部位置以形成有效姿勢輸入。并且有時,連續(xù)手部形狀改變和/或手部移動可以解譯為對裝置的兩個或多個指令。姿勢輸入已被應(yīng)用于很多領(lǐng)域。手勢輸入的一個應(yīng)用是書本閱讀應(yīng)用。例如,一旦在相機前用戶手部的水平滑動(手部移動的軌跡基本水平且移動距離超出特定值,例如15厘米),裝置就解譯此姿勢輸入為翻動書本頁面的指令。書本的向后或向前翻動取決于移動方向。圖1是圖示根據(jù)現(xiàn)有技術(shù)的信令(signaling)書本的向后翻動的向右姿勢的示圖。如從圖1可見,為了做出向右姿勢,用戶必須首先將他的右手放在相機前方,隨后向右移動特定距離。當姿勢完成時(即,手部到達如圖1示出的停止位置),用戶需要在相機前快速縮回他的手部。考慮用戶想要翻動若干頁面的情形,假定每次5頁,他需要進行抬起他手部、移動、停止和縮回5次。這對于用戶來說真的不方便,因而降低了用戶體驗。期待連續(xù)姿勢輸入的新方式。
技術(shù)實現(xiàn)要素:根據(jù)本發(fā)明的一個方面,提供用于響應(yīng)于連續(xù)往復移動而檢測姿勢輸入的方法,其中,連續(xù)往復移動包括至少一個第一類姿勢和至少一個第二類姿勢,每一類姿勢都能夠被檢測裝置識別以輸出不同控制信號,所述方法包括步驟:接收隨著兩類中的第一類姿勢開始的連續(xù)往復移動,其中,所述第一類姿勢和第二類姿勢交替出現(xiàn);和以與在連續(xù)往復移動內(nèi)獲得的第一類姿勢的數(shù)量相等的次數(shù)輸出與所述第一類姿勢對應(yīng)的控制信號。根據(jù)本發(fā)明的另一方面,提供用于響應(yīng)于連續(xù)往復移動而檢測姿勢輸入的裝置,其中,所述連續(xù)往復移動包括至少一個第一類姿勢和至少一個第二類姿勢,每一類姿勢都能夠被識別以輸出不同控制信號,所述裝置包括:捕獲模塊,用于捕獲隨著兩類中的第一類姿勢開始的連續(xù)往復移動,其中,所述第一類姿勢和第二類姿勢交替出現(xiàn);和處理模塊,基于所捕獲的連續(xù)往復移動以與在連續(xù)往復移動內(nèi)獲得的第一類姿勢的數(shù)量相等的次數(shù)輸出與所述第一類姿勢對應(yīng)的控制信號。應(yīng)當明白,將在本發(fā)明的以下詳細描述中找到本發(fā)明的更多方面和優(yōu)勢。附圖說明將它們包括以提供本發(fā)明的進一步理解的附圖與描述一起圖示了本發(fā)明的實施例,所述描述用來說明本發(fā)明的原理。因而,本發(fā)明不限于實施例。在附圖中:圖1是示出根據(jù)現(xiàn)有技術(shù)的在相機前的手部移動的示圖;圖2A、2B是示出根據(jù)本發(fā)明的實施例的單一手部揮動的軌跡的示圖;圖3是示出根據(jù)本發(fā)明實施例的、對應(yīng)于兩個相鄰圖像幀的兩點的示圖;圖4是示出根據(jù)本發(fā)明實施例的、從開始起的手部軌跡的示圖;圖5是示出根據(jù)本發(fā)明實施例的、從開始起的另一手部軌跡的示圖;圖6是示出根據(jù)本發(fā)明實施例的、用于根據(jù)連續(xù)往復移動檢測姿勢輸入的方法的流程圖;圖7是示出根據(jù)本發(fā)明實施例的、用于根據(jù)連續(xù)往復移動檢測姿勢輸入的裝置的方框圖。具體實施方式現(xiàn)在將結(jié)合附圖詳細描述本發(fā)明的實施例。在以下描述中,可以出于清晰和簡明目的而省略已知功能和配置的一些詳細描述。本發(fā)明的目的在于提供一種簡單的方式來給出連續(xù)往復手部移動的重復指令??梢酝ㄟ^裝置來識別連續(xù)往復移動為一組連續(xù)子移動,并且任何相鄰兩個子移動具有相反的朝向方向。從連續(xù)往復移動得出的指令的類型由該組連續(xù)子移動內(nèi)的第一個決定,并且得出的指令的數(shù)量與具有與該組內(nèi)第一個移動(包括第一個移動)的朝向方向相同的朝向方向的子移動的數(shù)量相同。依據(jù)本發(fā)明的實施例的詳細示例在以下描述。系統(tǒng)包括用來捕獲姿勢輸入的連續(xù)圖像的相機和連接到相機的處理裝置。處理裝置使用連續(xù)圖像來生成對應(yīng)指令。在實施例中,用于姿勢識別的基礎(chǔ)姿勢的軌跡基本上等同直線(實際姿勢移動不可能與線條一樣直)。在此示例中,將水平手部揮動姿勢用來圖示本發(fā)明的原理。然而,應(yīng)當注意到本發(fā)明的原理還可以應(yīng)用于其他連續(xù)往復移動,例如,在深度可檢測相機之前的垂直手部揮動、傾斜手部揮動以及甚至伸展和縮回手部的移動。姿勢識別技術(shù)涉及圖像處理,并且因而,可以基于實時圖像幀以實時的方式進行姿勢識別,或者不以實時方式(即,使用捕獲一組圖像幀的相機)進行,并且隨后分析該組圖像幀。實際上,全部靜態(tài)姿勢識別(姿態(tài)識別)可以基于實時圖像幀以實時方式進行。例如,當檢測勝利標志姿態(tài)時,裝置僅需要基于手部形狀的凸起輪廓的分析來判斷姿態(tài)是否是勝利標志。對于動態(tài)姿勢識別,裝置需要捕獲一組圖像幀,找到每一幀中的手部的面心(centroid),并且在此系列的手部面心形成的曲線的分析之后判斷它是哪種姿勢。圖2是根據(jù)本發(fā)明的實施例的、示出單一手部揮動的軌跡的示圖,其中,圖2A示出向右手部移動而圖2B示出向左手部移動。在此示例中,我們假定相機是左上坐標系統(tǒng)。應(yīng)當注意,在姿勢識別中,實線(或者我們稱之為基本直線)不存在。對于每一幀中的質(zhì)心等同于曲線上的點。因而,當對于任一方向移動的全部圖像幀例如向左手部移動時,我們將記錄一系列連續(xù)點,為了便于描述,我們使用線條連起全部這些點。離散點的數(shù)量取決于幀捕獲速率。圖3是示出根據(jù)本發(fā)明的實施例的、與兩個相鄰圖像幀對應(yīng)的兩點的示圖。點A對應(yīng)于兩個圖像幀的前一個,而點B對應(yīng)于兩個圖像幀的后一個。這里,我們稱點A為之前一位置點而點B為當前位置點。在此示例中,使用四個運動方向,包括上下左右。如圖3示出,點B放置在點A的右側(cè)。因為兩個點都具有相同坐標系中的坐標值,所以裝置可以輕易地確定。在本實施例中,使用兩個數(shù)據(jù)陣列來存儲手部軌跡用于用戶姿勢的分析。如果運動趨勢未反向,例如如圖2A示出的,則我們在第一陣列中存儲手部軌跡數(shù)據(jù)。在檢測到運動趨勢被反向之后,我們在第二陣列中存儲從運動趨勢的反向起的手部軌跡數(shù)據(jù),并且隨后我們使用第一陣列中的數(shù)據(jù)來確定發(fā)生了什么姿勢并且輸出對應(yīng)的指令。另外,反向閾值和四個方向計數(shù)器被用來確定反向運動的發(fā)生。因為用戶的連續(xù)姿勢(諸如水平手部波動之類)具有特定的規(guī)律,例如當人們在做揮動動作時,如果向左揮動,則必須首先向左移動一段距離然后向右移動一段距離,并且重復若干次;如果是向右波動,則必須首先向右移動一段距離然后向左移動一段距離,并且也重復若干次,所以我們可以基于之前的子姿勢來選擇方向計數(shù)器。此外,在此實施例中,我們總是使用數(shù)據(jù)的第一陣列作為判斷姿勢的基礎(chǔ)。以下根據(jù)本發(fā)明的實施例描述對多個位置點中的一個位置點進行的處理步驟,所述多個位置點從手部移動中產(chǎn)生。步驟1,在連續(xù)姿勢輸入期間的時間點,裝置確定手部的前一位置點和當前位置點的坐標值。偽代碼如下所示:前一位置x坐標(old_x)=(手部追蹤趨勢反向發(fā)生)?獲得在第二陣列中之前存儲的數(shù)據(jù)(pPointBuf1.x):獲得在第一陣列中之前存儲的數(shù)據(jù)(pPointBuf0.x);前一位置y坐標(old_y)=(手部追蹤趨勢反向發(fā)生)?獲得在第二陣列中之前存儲的數(shù)據(jù)(pPointBuf1.y):獲得在第一陣列中之前存儲的數(shù)據(jù)(pPointBuf0.y);當前位置x坐標(cur_x)=獲得當前幀中手部x坐標;當前位置y坐標(cur_y)=獲得當前幀中手部y坐標;可以從以上偽代碼中看到,與時間點對應(yīng)的當前幀被用來確定當前位置點的坐標值。至于與該時間點緊鄰的前一圖像幀對應(yīng)的前一位置點,裝置需要首先確定運動趨勢的反向是否已經(jīng)發(fā)生。如果發(fā)生,則第二陣列中的數(shù)據(jù)將被用來確定該前一位置點的坐標值,或者相反,第一陣列中的數(shù)據(jù)將被用來確定該前一位置點的坐標值。步驟2,基于當前位置點和前一位置點的位置關(guān)系來更新用于確定手部移動的運動趨勢的四個朝向計數(shù)器。在此實施例中,我們使用四個朝向計數(shù)器來分別記錄向上方向、向下方向、向左方向和向右方向。但是根據(jù)變型,如果在裝置中不存在規(guī)定的垂直姿勢,則向上和向下朝向計數(shù)器是冗余的。與相反方向?qū)?yīng)的兩個朝向計數(shù)器在一組內(nèi)工作。例如,如果與前一位置點相關(guān)的當前位置點的位置是在左側(cè)方向上,則向左朝向計數(shù)器將加一,并且同時,如果向右朝向計數(shù)器不是零,則此計數(shù)器將減一。并且同樣的原理應(yīng)用于向上和向下朝向計數(shù)器。在下面示出用于基于X軸值確定向左和向右計數(shù)器(orientation_l和orientation_r)的相關(guān)偽代碼。類似原理可以應(yīng)用于基于Y軸值確定向上和向下計數(shù)器。圖4是示出根據(jù)本實施例的、從開始起的手部軌跡的示圖。如從圖4可見,在反向點(將在下面描述確定反向點的方法)之前存在14個點。反向點可被視為反向姿勢的開始點。因而,根據(jù)用于Orientation_l和Orientation_r的以上操縱方法(在此示例中,我們省略了對向上和向下朝向計數(shù)器的操縱),在反向點之前的點處(即,最右點),Orientation_l是0而Orientation_r是13。當移動到cur_X<old_X的反向點時,Orientation_l加一并且變?yōu)?,而Orientation_r減一并且變?yōu)?2。步驟3,每次裝置在姿勢輸入期間捕獲到圖像幀,裝置就確定運動趨勢是否反向。在姿勢輸入期間,裝置以特定捕獲速率捕獲姿勢作為一組圖像幀。對于每一個圖像幀,裝置首先確定用戶的手部在圖像幀中的位置點,并且使用該位置點及其之前的位置點來更新相關(guān)朝向計數(shù)器。在更新朝向計數(shù)器之后,裝置使用朝向計數(shù)器和朝向閾值來確定運動趨勢的反向是否發(fā)生。朝向閾值是預(yù)定值,在此示例中,我們設(shè)置它為6。下面示出用于確定運動趨勢是否反向的偽代碼。這里,將一組子姿勢朝向指示器(即,gesture_l,gesture_r,gesture_u和gesture_d)用來記錄連續(xù)姿勢輸入或連續(xù)往復手部移動中前一姿勢的姿勢朝向。在用戶輸入連續(xù)姿勢之前,這些參數(shù)被設(shè)置為假。并且在裝置在連續(xù)姿勢輸入中檢測到第一子姿勢之后,對應(yīng)參數(shù)將被設(shè)置為真。在檢測到第一子姿勢之前,四個計數(shù)器中的最大計數(shù)器被選擇以與朝向閾值比較。如果最大計數(shù)器大于該閾值并且具有與最大計數(shù)器相反朝向的朝向計數(shù)器等于1,則確定反向發(fā)生,并且設(shè)置與第一子姿勢的相反朝向?qū)?yīng)的子姿勢朝向指示器為真。根據(jù)變型,具有4值選擇的單一指示器可以用來取代四真假指示器。這里,我們?nèi)允褂脠D4用于說明。在最右點處,Orientation_l是0而Orientation_r是13。盡管作為最大計數(shù)器的Orientation_r大于朝向閾值6,但是相反朝向計數(shù)器(即,Orientation_l)是0。因此,確定反向未發(fā)生。但是在反向點,兩個條件都達到。因此,裝置可以確定反向發(fā)生。至于在第一子姿勢朝向指示器之后的反向的確定,裝置確定以下兩個條件是否都達到:1)具有與前一子姿勢朝向指示器相同朝向的朝向計數(shù)器超出閾值;并且2)具有與前一子姿勢朝向指示器相反朝向的朝向計數(shù)器等于1。如果它們都達到,則確定反向發(fā)生。這將減少計算的復雜度。用于在獲得gesture_l之后的反向的確定的偽代碼如下所示。用于其他朝向指示器的偽代碼是類似的。在找到反向之前,數(shù)據(jù)被存儲在第一陣列pPointBuf0中。一旦第一反向發(fā)生,則pPointBuf0中的數(shù)據(jù)被用來解譯姿勢以輸出指示姿勢的含義的信號。此時,我們不能僅使用相鄰兩個點或者只是基于對于pPointBuf0中全部點的朝向計數(shù)器的數(shù)量來確定這是什么姿勢。否則,可能引起錯誤。圖5示出此情形。如果用戶正在做向右移動子姿勢,則可能還伴隨著向下移動,盡管在反向點,向下朝向計數(shù)器大于向右朝向計數(shù)器,但是我們不能確定此子姿勢為向下姿勢。如果我們整體地看這個姿勢,則顯然向右移動距離遠大于向下移動的距離,并且此子姿勢應(yīng)當判為向右姿勢。在第一反向發(fā)生之后,將在第二陣列pPointBuf1中存儲數(shù)據(jù)。并且我們將使用相關(guān)朝向計數(shù)器來確定第二反向的發(fā)生。請注意,我們在此示例中不使用pPointBuf1數(shù)據(jù)來確定姿勢。pPointBuf1中的數(shù)據(jù)僅用來確定第二反向、第四反向、第六反向等的發(fā)生??梢暂p易地得出,第一陣列被用來存儲具有和第一子姿勢移動相同朝向的子姿勢移動的數(shù)據(jù),并且第二陣列被用來存儲具有和第一子姿勢移動相反朝向的子姿勢移動的數(shù)據(jù),因為姿勢移動在往復。第三反向、第五反向、第七反向等的確定類似于第一反向的確定。并且第四反向、第六反向、第八反向等的確定類似于第二反向的確定。我們使用開始點和終止點的x軸和y軸坐標的差來判斷發(fā)生了什么姿勢(使用姿勢軌跡的x軸和y軸振幅比來確定何種姿勢是另一方法)。以下偽代碼示出如何確定發(fā)生了什么姿勢??梢詮囊陨峡吹?,將nDiffx和nDiffy的絕對值進行比較以確定在水平移動和垂直移動之間出現(xiàn)了什么主要移動。這是因為用戶手部的移動不可能是精確的水平移動或垂直移動。盡管當試圖做出水平移動時在垂直方向上的差不可避免,但是在水平方向上的絕對差值應(yīng)該大于垂直方向上的絕對差值。在確定為水平移動之后,nDiffx被用來確定左姿勢和右姿勢之間的是哪個姿勢。以下偽代碼示出在第一反向發(fā)生之后如何處理:以下偽代碼示出在第二反向發(fā)生之后如何處理:在往復手部移動停止之后(手部停留在空中一些時間,例如2秒,或者使用特殊姿勢來指示停止,或者用戶迅速地縮回他的手部),如果在第一陣列pPointBuf0中有效數(shù)據(jù)的數(shù)量多于特定閾值(通常至少3個,否則姿勢軌跡太短,并且可以忽略),則我們將使用這些數(shù)據(jù)來確定發(fā)生了什么姿勢。以下偽代碼示出在一個連續(xù)姿勢停止之后如何處理:圖6是描繪用于根據(jù)本實施例根據(jù)連續(xù)往復移動檢測姿勢輸入的方法的流程圖。這里,連續(xù)往復移動由兩類裝置可識別姿勢形成,每一類發(fā)生若干次。步驟601,裝置通過使用相機捕獲移動來接收連續(xù)往復移動,并且輸出一系列圖像幀的結(jié)果。應(yīng)當注意,步驟601這里包括至少兩種情形,1)裝置在移動結(jié)束之前保持捕獲移動,并且隨后捕獲模塊輸出該系列圖像幀;和2)在移動期間捕獲模塊響應(yīng)于圖像捕獲立即輸出圖像幀。步驟602,裝置通過使用該系列圖像幀來確定至少一個反向點。具體地,此步驟進一步包括步驟6021,對每一個圖像幀確定與手部位置對應(yīng)的坐標值以獲得一系列坐標值。至于坐標值的確定,可以例如將捕獲的RGB圖像轉(zhuǎn)換為HSV色彩空間,并且基于皮膚色彩做背景減法(backgroundsubtraction)。如果需要的話,可以做一些形態(tài)操作,并且隨后我們可以發(fā)現(xiàn)手部的輪廓。大量這種輪廓將是對應(yīng)于該幀的首部位置的坐標值。步驟6022使用上面步驟1到步驟3基于該系列坐標值來確定反向點步驟603,裝置基于所確定的(多個)反向點而分割連續(xù)往復移動為子移動。因為確定了(多個)反向點并且該系列圖像幀對應(yīng)于連續(xù)往復移動,因此在該系列圖像幀內(nèi)由(多個)反向點隔開子移動,并且反向點是除了第一子移動之外的任何子移動的開始點。此外,應(yīng)當注意到,全部分割的子移動是可識別姿勢。步驟604,裝置基于所分割的子移動而輸出至少一個信號。具體地,裝置首先確定包括第一子移動且具有與該第一子移動相同的朝向的子移動的數(shù)量,并且隨后輸出具有與可識別第一子移動對應(yīng)的含義的信號,且其數(shù)量等于具有與第一子移動相同的朝向的子移動的數(shù)量。應(yīng)當注意,如果裝置以實時方式處理圖像幀,即,對應(yīng)于步驟601所述的情形2,則裝置可能需要響應(yīng)于圖像幀的每一個輸入,通過找到第一反向點來確定第一子移動并且輸出與第一子移動對應(yīng)的信號。在確定第一子移動之后,裝置將響應(yīng)于圖像幀的每一個輸入,通過找到第二反向點、第三反向點、第四反向點等,以順序方式確定第二子移動、第三子移動、第四子移動等,將第二子移動、第三子移動、第四子移動等分別與第一子移動進行比較以確定它們是否是同類姿勢,并且如果它們是同類姿勢,則裝置將輸出與第一子移動相同的信號。根據(jù)變型,因為是連續(xù)往復移動,所以不需要比較第二子移動、第四子移動、第六子移動等。因此,裝置僅需要確定第一子移動、第三子移動、第五子移動。當然,裝置需要確定每一個反向點用于分隔連續(xù)往復移動為子移動。在獲得第三子移動、第五子移動之后,裝置將它們與第一子移動進一步比較,并且在每一次肯定的比較之后輸出與第一子移動對應(yīng)的信號。另外,因為移動在往復,所以可能不需要比較奇數(shù)次子移動。相反,在從第一反向點起的每隔一個反向點,裝置輸出與第一子移動對應(yīng)的信號。圖7是示出用于檢測用戶輸入的裝置的框圖。如可以從圖7看到的,提供用于響應(yīng)于連續(xù)往復移動而檢測姿勢輸入的裝置,其中,連續(xù)往復移動由兩類可識別姿勢形成,即,第一類姿勢(例如,向左移動)和第二類姿勢(例如,向右移動),每一類姿勢都能夠被識別以輸出不同控制信號,所述裝置包括:捕獲模塊,用于捕獲以兩類中的第一類姿勢開始的連續(xù)往復移動,其中,第一類姿勢和第二類姿勢交替出現(xiàn);和處理模塊,用于基于捕獲的連續(xù)往復移動以等于在連續(xù)往復移動中包含的第一類姿勢的數(shù)量相等的次數(shù)輸出與第一類姿勢對應(yīng)的控制信號。進一步,將處理模塊配置為對連續(xù)往復移動確定反向點。進一步,將處理模塊配置為通過使用反向點來分割連續(xù)往復移動為至少兩個子移動,每一個子移動對應(yīng)于兩類姿勢的一個;對每一個子移動將其與第一子移動進行比較;并且響應(yīng)于經(jīng)過比較的子移動是與第一子移動相同的類型的確定,輸出與第一類姿勢對應(yīng)的控制信號。進一步,將處理模塊配置為響應(yīng)于每奇數(shù)次反向點輸出與第一類姿勢對應(yīng)的控制信號。已經(jīng)描述了一些實現(xiàn)。然而,將明白可以做出各種修改。例如,可以組合、補充、修改或移除不同實現(xiàn)的要素以產(chǎn)生其他實現(xiàn)。另外,普通技術(shù)人員將明白其他結(jié)構(gòu)和處理可以替代那些公開的結(jié)構(gòu)和處理并且產(chǎn)生的實現(xiàn)將以與公開的實現(xiàn)至少基本相同的(多個)方式進行至少基本相同的(多個)功能,以實現(xiàn)至少基本相同的(多個)結(jié)果。因此,這些和其他實現(xiàn)應(yīng)當落入本發(fā)明的范圍。