A. 電腦是如何做到能識別手勢的
一種能夠識別抄手勢語並將其轉換襲成屏幕顯示文本的軟體,可以使失聰者更容易、更自然地利用電腦同別人交流。加拿大魁北克省舍布魯克大學的研究人員開發了一種能夠識別國際手勢語的系統。這種系統可以通過手勢把組成單詞的每個字母拼出來。
這種系統識別國際手勢語的成功率高達96%。由於每個人的手勢略有不同,如果使用這種神經網路系統的人經過培訓,可以使這種系統發揮的作用達到最佳效果。這種系統通過快速工作站識別一個手勢需要半秒鍾,研究人員尚未能使它達到最佳識別速度。研究人員相信,他們通過使這種系統具備可以檢驗容易出錯的手勢,能夠進一步提高識別的准確性。
這種系統用攝像機捕捉每個手勢,再由軟體進行一系列處理。第一階段是「邊緣測定」,即繪制出手的輪廓。然後由系統確定手的長軸和短軸,以便確定手勢的確切方向。
在這個基礎上,程序對手指相對於手的長軸的變化和方向加以測量。得出的信息被輸入神經網路程序,程序通過與現有訓練數據加以比較,對字母最有可能表達的含意做出猜測。一旦電腦識別出手勢所要表達的意思,就把相關的字母顯示在屏幕上。
研究人員說,由於這個系統採用的是實時交流方式,其反應速度是相當快的。
B. 三軸加速度感測器 怎麼手勢識別
針對手勢交抄互中手勢信號的相似性襲和不穩定性,設計實現一種基於三軸加速度感測器的手勢識別方案。採用MMA7260加速度感測器採集主手腕的手勢動作信號,根據手勢加速度信號的特點,進行手勢動作數據窗口的自動檢測、信號去噪和重采樣等預處理,通過提取手勢動作的關鍵特徵,構造離散隱馬爾可夫模型,實現手勢動作識別。實驗結果證明該方案的識別精度較高。
C. 手勢識別技術是什麼
手勢識別技術是利用攝像頭等感應元件,捕捉不同的手勢,根據手勢的形狀等,用晶元運算識別,能智能識別出相應的指令,我們能用一個手勢或多個手勢,進行發出指令,替代了很多傳統的按鍵,是未來的發展趨勢,例如市面上有一款匯春科技的抽油煙機,我們可以通過向左撥動手勢,發出開機指令,手部不再接觸油膩的機身。
D. 如何用雷達實現手勢識別
如何用雷達實現手勢識別
雷達,英文Radar(Radio Detection And Ranging),利用發射「無線電磁波」得到反射波來探測目標物體的距離,角度,和瞬時速度。隨著天線尺寸和晶元的極度縮小,在可預見的未來,更多的雷達設備將會以微型器件面世,如圖所展示的那樣,它們不僅能嵌入可穿戴設備,成為物聯網的一類重要感測器。
圖 傳統的探測偵查雷達(左)以及Project Soli中用於手勢識別的迷你雷達(右)
相比於其它隔空操作技術,比如體感相機、超聲波等,雷達有著一些天然優勢:比如無論白天黑夜,暴曬寒風,皆可正常工作;在體積、成本,以及功耗上都比Kinect等體感相機來得要更低;高頻雷達測量物體距離通常可以精確到毫米級別;而低頻雷達則可以做到「穿牆而過」,完全無視遮擋物的存在。這些特性讓雷達,尤其是微型雷達,在未來都有著廣闊的應用前景。
雷達的組成
一般雷達由發射器、接收器、發射/接收天線、信號處理單元,以及終端設備組成。發射器通過發射天線將經過調頻或調幅的電磁波發射出去;部分電磁波觸碰物體後被反射回接收器,這就好比聲音碰到牆壁被反射回來一樣;信號處理單元分析接受到的信號並從中提取有用的信息諸如物體的距離、角度,以及行進速度;這些結果最終被實時地顯示在終端設備上。傳統的軍事雷達還常配有機械控制的旋轉裝置用以調整天線的朝向,而新型雷達則更多通過電子方式做調整。
為節省材料和空間,通常發射器和接收器可以共享同一個天線,方法是交替開關發射或接收器避免沖突。終端設備通常是一個可以顯示物體位置的屏幕,但在迷你雷達的應用中更多是將雷達提取的物理信息作為輸入信號傳送給諸如手錶或其它電子設備。信號處理單元才是雷達真正的創意和靈魂所在,主要利用數學物理分析以及計算機演算法對雷達信號作過濾、篩選,並計算出物體的方位。在這基礎之上,還可以利用前沿的機器學習演算法對捕捉的信號作體感手勢識別等等。
雷達實現手勢識別
雷達的測距或者測速都把物體想像成一個抽象的點。而真實的物體如手掌則可以認為是一堆三維點的集合體。所以在反射波中已然蘊藏了許多個點的距離與速度信號。同時呈現這些信息的一個好方法叫做距離-多普勒映射(Range-Dopler Map),簡稱RDM(如圖)。RDM中的橫軸是速度,縱軸是距離。它可以認為是一張反射波的能量分布圖或概率圖,每一個單元的數值都代表了反射波從某個特定距離和特定速度的物體得到的反射波能量。仔細看的話,從RDM中已然可以窺見探測物體的特徵身形!基於RDM及其時間序列, 我們可以採用機器學習的方法識別特定的能量模式變化,進而識別手勢及動作。在Soli推出之前,Nvidia也做過類似的研究。
圖 距離-多普勒(速度)映射的等高線表示示例 每一個單元值代表了反射波中具有對應距離和速度的點的集合的反射能量。該映射可以作為特徵向量用於機器學習識別手勢動作。
E. 我在做關於手勢識別的程序,現在剛完成圖像預處理,但是怎麼樣才能在提取特徵參數前把手臂部分去除呢
感覺很重要的一部是要進行手掌的識別,或者手掌外區域的識別,這裡面必然用到特徵識別的演算法 也許人臉識別就是很好的例子。能發個你預處理後的圖片上來么?也不知你預處理到了什麼程度。
F. 如何用微信小程序開發手勢解鎖
整個功能基於canvas實現,首先添加畫布組件,並設定樣式
<!--index.wxml--><view class="container">
<canvas canvas-id="id-gesture-lock" class="gesture-lock" bindtouchstart="onTouchStart"
bindtouchmove="onTouchMove" bindtouchend="onTouchEnd"></canvas></view>.gesture-lock {
margin: 100rpx auto;
width: 300px;
height: 300px;
background-color: #ffffff;
}123456789101112
手勢解鎖實現代碼在gesture_lock.js中(完整源碼地址見末尾)。
初始化
constructor(canvasid, context, cb, opt){ this.touchPoints = []; this.checkPoints = []; this.canvasid = canvasid; this.ctx = context; this.width = opt && opt.width || 300; //畫布長度
this.height = opt && opt.height || 300; //畫布寬度
this.cycleNum = opt && opt.cycleNum || 3; this.radius = 0; //觸摸點半徑
this.isParamOk = false; this.marge = this.margeCircle = 25; //觸摸點及觸摸點和畫布邊界間隔
this.initColor = opt && opt.initColor || '#C5C5C3';
this.checkColor = opt && opt.checkColor || '#5AA9EC'; this.errorColor = opt && opt.errorColor || '#e19984'; this.touchState = "unTouch"; this.checkParam(); this.lastCheckPoint = null; if (this.isParamOk) { // 計算觸摸點的半徑長度
this.radius = (this.width - this.marge * 2 - (this.margeCircle * (this.cycleNum - 1))) / (this.cycleNum * 2) this.radius = Math.floor(this.radius); // 計算每個觸摸點的圓心位置
this.calCircleParams();
} this.onEnd = cb; //滑動手勢結束時的回調函數
}
主要設置一些參數,如canvas的長寬,canvas的context,手勢鎖的個數(3乘3, 4乘4),手勢鎖的顏色,手勢滑動結束時的回調函數等。並計算出手勢鎖的半徑。
計算每個手勢鎖的圓心位置
calCircleParams() { let n = this.cycleNum; let count = 0; for (let i = 0; i < n; i++) { for (let j = 0; j < n; j++){
count++; let touchPoint = {
x: this.marge + i * (this.radius * 2 + this.margeCircle) + this.radius,
y: this.marge + j * (this.radius * 2 + this.margeCircle) + this.radius,
index: count,
check: "uncheck",
} this.touchPoints.push(touchPoint)
}
}
}1234567891011121314151617
繪制手勢鎖
for (let i = 0; i < this.touchPoints.length; i++){ this.drawCircle(this.touchPoints[i].x, this.touchPoints[i].y, this.radius, this.initColor)
} this.ctx.draw(true);1234
接下來就是識別用戶的滑動行為,判斷用戶劃過了哪些圓圈,進而識別出用戶的手勢。
在touchstart和touchmove事件中檢測觸發並更新畫布
onTouchStart(e) { // 不識別多點觸控
if (e.touches.length > 1){ this.touchState = "unTouch"; return;
} this.touchState = "startTouch"; this.checkTouch(e); let point = {x:e.touches[0].x, y:e.touches[0].y}; this.drawCanvas(this.checkColor, point);
}
onTouchMove(e) { if (e.touchState === "unTouch") { return;
} if (e.touches.length > 1){ this.touchState = "unTouch"; return;
} this.checkTouch(e); let point = {x:e.touches[0].x, y:e.touches[0].y}; this.drawCanvas(this.checkColor, point);
}
檢測用戶是否劃過某個圓圈
checkTouch(e) { for (let i = 0; i < this.touchPoints.length; i++){ let point = this.touchPoints[i]; if (isPointInCycle(e.touches[0].x, e.touches[0].y, point.x, point.y, this.radius)) { if (point.check === 'uncheck') { this.checkPoints.push(point); this.lastCheckPoint = point;
}
point.check = "check"
return;
}
}
}12345678910111213
更新畫布
drawCanvas(color, point) { //每次更新之前先清空畫布
this.ctx.clearRect(0, 0, this.width, this.height); //使用不同顏色和形式繪制已觸發和未觸發的鎖
for (let i = 0; i < this.touchPoints.length; i++){ let point = this.touchPoints[i]; if (point.check === "check") { this.drawCircle(point.x, point.y, this.radius, color); this.drawCircleCentre(point.x, point.y, color);
} else { this.drawCircle(this.touchPoints[i].x, this.touchPoints[i].y, this.radius, this.initColor)
}
} //繪制已識別鎖之間的線段
if (this.checkPoints.length > 1) { let lastPoint = this.checkPoints[0]; for (let i = 1; i < this.checkPoints.length; i++) { this.drawLine(lastPoint, this.checkPoints[i], color);
lastPoint = this.checkPoints[i];
}
} //繪制最後一個識別鎖和當前觸摸點之間的線段
if (this.lastCheckPoint && point) { this.drawLine(this.lastCheckPoint, point, color);
} this.ctx.draw(true);
}2728
當用戶滑動結束時調用回調函數並傳遞識別出的手勢
onTouchEnd(e) { typeof this.onEnd === 'function' && this.onEnd(this.checkPoints, false);
}
onTouchCancel(e) { typeof this.onEnd === 'function' && this.onEnd(this.checkPoints, true);
}1234567
重置和顯示手勢錯誤
gestureError() { this.drawCanvas(this.errorColor)
}
reset() { for (let i = 0; i < this.touchPoints.length; i++) { this.touchPoints[i].check = 'uncheck';
} this.checkPoints = []; this.lastCheckPoint = null; this.drawCanvas(this.initColor);
}123456789101112
如何調用
在onload方法中創建lock對象並在用戶觸摸事件中調用相應方法
onLoad: function () {
var s = this; this.lock = new Lock("id-gesture-lock", wx.createCanvasContext("id-gesture-lock"), function(checkPoints, isCancel) {
console.log('over');
s.lock.gestureError();
setTimeout(function() {
s.lock.reset();
}, 1000);
}, {width:300, height:300}) this.lock.drawGestureLock();
console.log('onLoad') var that = this
//調用應用實例的方法獲取全局數據
app.getUserInfo(function(userInfo){
//更新數據
that.setData({
userInfo:userInfo
})
that.update()
})
},
onTouchStart: function (e) {
this.lock.onTouchStart(e);
},
onTouchMove: function (e) {
this.lock.onTouchMove(e);
},
onTouchEnd: function (e) {
this.lock.onTouchEnd(e);
}
G. 如何用opencv實現動態手勢識別就是通過攝像頭,對手的運動進行判別,既手向左判斷向左,手向右判斷向右
可以先對手勢進行分割,把手拿出來,然後利用harr特徵來做手勢識別。在opencv里有先關的東西。
H. 手勢識別技術是什麼都可以應用到什麼產品中
打個比方
,電視如果有
手勢識別技術
,你的手就可以當遙控器了。YS4004是匯春自主研發的第一款低功耗、高性能
隔空
手勢控制
晶元,可實現3D手勢檢測感應及方案控制應用。
I. 基於python的手勢識別論文的課題任務書怎麼寫
摘要 任務書含以下方面的內容: