㈠ 最近做圖像識別,想通過MATLAB做手勢識別的演算法,不知道需要學些什麼,做完會是什麼樣子,求大牛指導
模式識別、機器學習。
一般的做法是:
首先要有一定數量的手勢圖片;
其次將訓練用的手勢圖片進行人工分類,即「打上標簽」
再次將手勢圖片轉換成輪廓圖(可以用DFT、DCT、小波變換等計算出邊緣,然後對邊緣進行「擴張」即可);
第四是將輪廓圖規格化、矢量化,生成向量;
最後以上述向量集來訓練學習機(例如:神經網路),直到回歸;
獲得的結果是能進行手勢識別的學習機。
㈡ opencv手勢識別的代碼,只要識別 手在屏幕中的位置,和張開,握拳兩種狀態 就行
http://blog.163.com/jw_67/blog/static/13619925620104662217218/
㈢ 如何用opencv實現動態手勢識別就是通過攝像頭,對手的運動進行判別,既手向左判斷向左,手向右判斷向右
可以先對手勢進行分割,把手拿出來,然後利用harr特徵來做手勢識別。在opencv里有先關的東西。
㈣ 手勢輸入方式的手勢識別的原理
手勢是指在人的意識支配下,人手作出的各類動作,如手指彎曲、伸展和手在空間的運動等,可以是
收稿日期: 2000 - 05 - 15
基金項目: 行業基金項目(院編96311)
作者簡介: 曾芬芳(1940 - ) ,女,湖南益陽人,華東船舶工業學院教授。
執行某項任務,也可以是與人的交流,以表達某種含義或意圖。基於手勢識別的三維交互輸入技術,常
用的有基於數據手套的和基於視覺(如攝象機) 的手勢識別。
人手有20 多個關節,其手勢十分復雜,在VR(Virtual Reality) 中的交互過程,需分析手勢的形成並
識別其含義。如用戶以自然方式抓取環境中的物體,同時還可以對用戶產生相關的感知反饋,如對具有
力反饋的手套,就能使人感知到抓取的物體的重量,對有觸覺反饋的手套,能感知到用戶所碰到的物體
的質感,如毛毯有多粗糙等。所以計算機要能對人手運動的靈活、復雜的手勢進行識別是一項艱難而又
十分有意義的任務。
手勢的分類早在40 年代,心理學家Quek[7 ] . ,Pavlovic[8 ]等人從人機介面的角度對手勢進行研究,
按其功能分為:
手的運動
無意識的手運動
有意識的手運動(手勢
交流手勢
表動作
表符號(手語)
引用手語(如表示數字)
情態手勢
執行任務(如抓握錘) 手勢不但由骨胳肌肉驅動,而且還受人的信念、意識的驅使,它涉及到人的思維活動的高級行為。
人機交互的研究目的之一是使機器對人類用戶更方便,從用戶產生手勢到系統「感知」手勢的過程[9 ]如
圖1 所示。
圖1 系統「感知」手勢的過程
Fig. 1 Process of sensing gesture by the system
手的運動,是手勢的表現形式。用戶的操作
意圖是用戶要完成任務的內容, 即用戶心理活
動(概念手勢) G ,經過運動控制(變換) ,用手勢
運動H 表達。由經感受設備(變換Thi) 將手的
運動H 變換為系統的輸入信息I ,所以從G到I
的映射過程為:
Tgh : G → H , 即H > Tgh ( G)
Thi : H → I , 即I > Thi ( H)
Tgi : G → I , 即I > Thi ( Tgh ( G) ) > Tgi ( G)
其中, Tgh 為人體運動控制傳送函數; Thi為輸入設備傳送函數。
手勢識別的任務就是從系統輸入I 推斷、確定用戶意圖G ,顯然是以上映射的逆過程。即
G = T- 1
gi ( I) ( 1 )
H = T- 1
hi ( I) ( 2 )
G = T- 1
gh ( H) ( 3 )
其中, T- 1
gi , T- 1
hi , T- 1
gh 是Tgi , Thi , Tgh 的逆變換。
所以手勢識別可以採用H = T- 1
hi ( I) 時輸入信息I ,得到手的運動H ,再由G = T- 1
gh ( H) 手勢的表
示推斷用戶手勢的概念意圖,也可直接從G = T- 1
gi ( I) 求得概念手勢G。
手勢識別分為靜態手勢和動態手勢的識別,目前的研究大都是在線靜態手勢識別,如Lee 研究的就
是靜態孤立手勢[10 ] 。動態手勢識別難度大,一般採用關鍵幀方法,記錄每個手勢的始和終狀態及手勢的
運動軌跡,然後用內插演算法重建幀,但仍需給予限制,如Davis研究的動態手勢識別就規定開始時手必須
朝上等。 手勢的語法信息是通過手的構形、手的運動變化來傳遞。為了
給用戶提供必要的視覺反饋信息, 使其在交互過程中看到自己的手
(圖2 是用3DSMAX 繪制) ,同時也為了分析交互過程中手和虛擬對
象之間的相互作用關系,必須建立手幾何模型和運動學模型。 人手是一個多肢節系統, 由27 塊骨骼組成, 可看成由4 個相鄰
手指、一個大拇指和手掌組成, 每個手指由指段和關節組成。因此手
是一種由關節相連的結構, 隨著關節運動, 手的形狀在不斷變化。這
種變化可以通過指段和關節的狀態空間位置的變化來描述[11 ] 。
每一個手指( Ⅱ - Ⅴ) 具有四個自由度,其中手指的
基部(MP) 有兩個自由度,彎曲和旋轉,手指的中間關節處(PIP)
和末端關節處(DIP) 分別各有一個自由度,主要是彎曲運動。大拇
指除了與其他四個手指一樣具有四個自由度外, 還有一個外展運
動,所以大拇指具有五個自由度(拇指和手掌之間的一節也可不考
慮) 。外加手掌的前後左右運動二個自由度。所以手運動總共具有
23 個自由度,即狀態空間為23 維。
從上述的分析可知,除大拇指外每個手指都具有四個自由度,
從而可以建立一條鏈,以協調手指的機構及運動。整個手可以以手掌為基礎鏈接五個手指( Ⅰ - Ⅴ) ,在
指段MP 上鏈接指段PIP ,再鏈接指段DIP ,每條鏈可以獲取四個參數。從而五個手指以手掌為根節點構
成一個樹型結構,樹中的每一個節點代表一個關節,關節通過指段具有相互關聯的運動特性。
212 手勢的輸入
手勢的輸入是實現手勢交互的前提。它要求能夠有效地跟蹤手的運動, 又要方便用戶手的運動, 既
要求准確確定手的位置、方位、手指彎曲角度,又要求對手的運動限制很少。就目前而言, 手勢的輸入有
基於數據手套的和基於視覺(攝象機) 等兩種方式。
21211 基於數據手套的手勢輸入
基於數據手套的手勢輸入[12 ] ,是根據戴在手上的具有位置跟蹤器的數據手套利用光纖直接測量手
指彎曲和手的位置來實現手勢輸入的。本文使用5DT 公司生產的不帶位置跟蹤器的5th Glove 右手數據
手套,每個手指中間關節有一個感測器用於測量手指的平均屈伸度,在手腕部位還有一個2 軸傾斜感測
器測量手的轉動(繞Z 軸旋轉) 和傾斜(繞X 軸旋轉) 兩個角度,以探測手的上下擺動和旋轉。該手套共
帶有七個感測器,因此同一時刻只能讀出七個角度值。5th Glove 還提供命令、報告數據、連續數據、模擬
滑鼠等工作方式,可定義一指、二指和三指( Z 軸) 等手勢來控制虛擬手的飛行、視點、運動速度等。
5th Glove 數據手套通過串列介面與微機連接在一起,以傳送手運動信號,從而控制手動作。它能將
用戶手的姿勢(手勢) 轉化為計算機可讀的數據, 因而使手去抓取或推動虛擬物體。人手在運動過程中
會碰撞物體,所以在系統中,虛擬手的交互操作除了實現抓取和釋放物體等功能外, 還需實現了碰撞的
檢測。
21212 基於視覺的手勢輸入
基於視覺的手勢輸入是採用攝象機捕獲手勢圖象,再利用計算機視覺技術對捕獲的圖象進行分析,
提取手勢圖象特徵,從而實現手勢的輸入。這種方法使用戶手的運動受限制較少,同時用戶還可以直接
看到手的圖象。基於視覺的輸入所輸入的原始數據是手的圖象,採用重建三維模型來構建手勢圖象,調
節模型參數如手指彎曲角度的夾角等,以合成手的三維圖形。根據手生成的圖形和已獲得的手圖象匹
配,所得到的模型參數就構成了手勢。1995 年,Lee J intae 和Kunii Tosiyasv l. 研究用立體圖像數據自動
分析三維手勢[4 ] 。它用攝像機拍攝手的運動圖像,使用輪廓提取邊界特徵進行識別的方法,成功地提
取27 個交互作用手參數,實現了三維手勢的重構。其實早在1981 年, Kroeger 採用兩個攝象機實現了
一個獲取手勢的系統,它通過用戶的手在與滑鼠墊一般大小的「鏡象盒」的3D 空間中來完成交互。兩
個鏡子被放在大約與前平面成45 度角的位置上,兩個鏡子代替單個鏡子產生了一個虛擬視點,加上兩
垂直平面上的兩個攝象機共三個視點相交成直角,以提供給用戶一個確定的工作空間,在這個空間內允
許用戶與計算機交互。
㈤ 手勢識別用什麼圖像特徵提取演算法
《基於計算機視覺的手勢識別研究》中提到了多尺度模型,它就是採用此模型提取手勢的指尖的數量和位置,將指尖和掌心連線,採用距離公式計算各指尖到掌心的距離,再採用反餘弦公式計算各指尖與掌心連線間的夾角,將距離和夾角作為選擇的特徵。對於靜態手勢識別而言,邊緣信息是比較常用的特徵。中採用的HDC提取關鍵點的識別演算法,基於用八方向鄰域搜索法提取出手勢圖像的邊緣,把圖像的邊緣看成一條曲線,然後對曲線進行處理。
㈥ gesture builder(手勢識別):could not load/mnt/sdcard/gestures.
您好,第一步:建立手勢庫
使用SDK自帶例子GestureBuilder建立手勢庫(位置:android-sdk-windows\samples\android-8\GestureBuilder)。使用GestureBuilder之前,你需要恢復其到開發環境,然後進行編繹並部署到手機上。此時,就可以使用GestureBuilder建立手勢庫,生成的手勢庫文件在SCDard上,默認文件名稱為:gestures
第二步:在應用中載入手勢庫文件,然後開發手勢識別代碼。
把手勢庫文件gestures文件拷貝到項目的res/raw目錄下。然後在布局文件中添加用於手勢繪制的View:
<android.gesture.GestureOverlayView
android:id="@+id/gestures"
android:layout_width="fill_parent「 android:layout_height="0dip"
android:layout_weight="1.0"
/>
大多數情況下,手勢都是通過一筆完成。然而有一些特別的需求就需要通過多個筆畫來實現,這時可以使用gestureStrokeType屬性進行設置:Multiple:1
手勢識別代碼見ppt下方
public class MainActivity extends Activity {
private GestureOverlayView gestureOverlayView;
private GestureLibrary mLibrary;
private boolean state;
private EditText addressText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
addressText = (EditText)this.findViewById(R.id.address);
gestureOverlayView = (GestureOverlayView)this.findViewById(R.id.gestures);
//當用戶完成一次Gesture繪制後,系統將自動調用Listener對象的onGesturePerformed()方法
gestureOverlayView.addOnGesturePerformedListener(new GestureListener());
mLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures);
state = mLibrary.load();//載入手勢庫
}
private final class GestureListener implements GestureOverlayView.OnGesturePerformedListener{
@Override
public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
if(state){
List<Prediction> predictions = mLibrary.recognize(gesture);//從手勢庫中查詢匹配的內容,匹配的結果可能包括多個相似的結果,匹配度高的結果放在最前面
if(!predictions.isEmpty()){
Prediction prediction = predictions.get(0);
//prediction的score屬性代表了與手勢的相似程度
//prediction的name代表手勢對應的字母
if(prediction.score > 1){
addressText.setText(prediction.name);
}
}
}
}
}
}
---------------------------------------
2.相關理解:手勢識別其實就是圖形識別,當用戶畫出圖形後,由程序識別然後按照識別的結果進行執行。
----------------------------------------------------------------------------------------------------
3.導入一個android項目到eclipse工作workspace中的方法:
a.在已經workspace已經存在的android項目中拷貝.classpath,.project,project.properties(這里應該是default.properties文件)到
需要導入的項目中
b.然後直接導入項目到eclipse中就可以了
---------------------------------------------------------
4.a、這里要實現的功能是,當用戶畫出一個對勾後,關閉該應用。
b、當用戶畫一個L後,就給李德偉打電話
------------------------------------------------------
5.首先要建立手勢庫,手勢識別的時候會從手勢庫中查找,如果找到就執行相應的業務功能
----------------------------------------------------------------
6.WARNING: Application does not specify an API level requirement!
[2009-12-27 16:51:33 - Tank] WARNING: Application does not specify an API level requirement!
[2009-12-27 16:51:33 - Tank] Device API version is 3 (Android 1.5)
網上一查是由於沒有指定users sdk的緣故,修改AndroidManifest.xml文件.
加入:
<uses-sdk android:minSdkVersion="3"></uses-sdk>
加在<manifest> </manifest> 之間.
------------------------------------------------------
7.2013/5/10
----------------
8.[2013-05-10 22:54:48 - GestureBuilder] Re-installation failed e to different application signatures.
[2013-05-10 22:54:48 - GestureBuilder] You must perform a full uninstall of the application. WARNING: This will remove the application data!
[2013-05-10 22:54:48 - GestureBuilder] Please execute 'adb uninstall com.android.gesture.builder' in a shell.
[2013-05-10 22:54:48 - GestureBuilder] Launch canceled!
這時先運行android模擬機,進入命令行,當然你要定位adb.exe的目錄,我是放在E:\android\android-sdk-windows\platform-tools 下
E:\android\android-sdk-windows\platform-tools> adb uninstall com.android.gesture.builder.
重新運行就可以了
--------------------------------------------------
9.這里建立手勢庫的時候,用的是android自帶的一個例子:
這個例子可以在這里找到:
G:\李鵬視頻\andoid程序學習及開發\3G手機Android應用開發\3G手機Android應用開發開發資料\開發資料\android-sdk_r06-windows\android-sdk-windows\samples\android-8
就是這個項目:GestureBuilder
---------------------------------------
10.如果出現問題按照上面的方法進行解決
運行該例子程序後:點擊Add gesture進行手勢添加,也就是添加用戶自己畫的圖片
添加的時候,只要在空白區域畫出手勢,在Name中輸入手勢名稱就,然後點擊Done就
可以添加一個手勢了
-------------------------------
11.當添加完手勢後,可以查看在sdcard根目錄下,有gestures這個文件,這個就是手勢庫文件
也是一個資料庫文件,這時候就可以在這個手勢庫的基礎上進行手勢的查找識別了。
---------------------------------------------------------------------------------------
11-1:做的時候首先將上一步生成的手勢庫文件gestures復制到:/gesture/res/raw/gestures這個路徑下,當查不到的時候需要關閉應用
11-2:關閉應用的方法:
當應用不再使用時,通常需要關閉應用,可以使用以下兩種方法關閉android應用:
第一種方法:首先獲取當前進程的id,然後殺死該進程。 (建議使用)
android.os.Process.killProcess(android.os.Process.myPid())
第二種方法:終止當前正在運行的Java虛擬機,導致程序終止
System.exit(0);
第三種方法:強制關閉與該包有關聯的一切執行
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
manager.restartPackage(getPackageName());
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
----------------------------------------------------------------------------------------
㈦ 手勢識別和人機交互是什麼關系
手勢識別是人機交互的一種,是一種直觀、易於學習的人機交互手段。
人機交互技術已經從以計算機為中心逐步轉移到以人為中心。目前人機交互主要有語音交互、手勢交互、操縱桿、三維滑鼠等類型。
手勢識別在人機交互中主要應用於虛擬環境的交互、手語識別、多通道、多媒體用戶界面等方面。掌網科技推出的雙攝像頭手勢識別就是一套人機交互系統,體驗者可以通過手勢玩游戲,與計算機互動。