<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 模擬技術(shù) > 設計應用 > 基于語(yǔ)音識別技術(shù)的聲控鼠標光標程序設計

基于語(yǔ)音識別技術(shù)的聲控鼠標光標程序設計

作者: 時(shí)間:2013-05-21 來(lái)源:網(wǎng)絡(luò ) 收藏
摘要: 實(shí)現了一種基于技術(shù)的應用程序, 可以用語(yǔ)音控制鼠標移動(dòng)到屏幕的任意位置, 能用來(lái)幫助傷殘人士只用聲音而不用鼠標和鍵盤(pán)就能操作電腦。分析了語(yǔ)音控制鼠標使用過(guò)程中的延時(shí)缺陷, 并做出了針對性的改進(jìn)。

  1 概述

  電腦語(yǔ)音技術(shù)經(jīng)過(guò)多年發(fā)展已經(jīng)取得了巨大進(jìn)步, 目前已經(jīng)有一些產(chǎn)品和項目讓人們有機會(huì )和計算機進(jìn)行語(yǔ)音交互工作, 例如IBM公司的Viavoice 系列軟件以及微軟的新的Office 產(chǎn)品都有實(shí)用的語(yǔ)音功能, 可以進(jìn)行語(yǔ)音聽(tīng)寫(xiě)錄入文字等工作, 還出現了一些基于語(yǔ)音技術(shù)的應用系統。

  語(yǔ)音技術(shù)特別是技術(shù)的發(fā)展, 使人們可能實(shí)現用語(yǔ)音控制電腦, 這對于世界上眾多不能方便使用傳統的鼠標及鍵盤(pán)的傷殘人士有重大的意義; 另外在一些場(chǎng)合不方便操作電腦但又必須使用的情況下同樣很有意義, 比如駕駛的同時(shí)查詢(xún)電子地圖。目前要真正控制一臺圖形界面的電腦, 必須做到使用語(yǔ)音控制也能像使用鍵盤(pán)和鼠標那樣輸入數據以及控制光標。因此一種有效的語(yǔ)音控制光標程序, 也就是可以定位在屏幕的任意位置, 并且可以模擬單擊、雙擊拖拽等各種鼠標動(dòng)作的語(yǔ)音控制程序, 對于實(shí)現語(yǔ)音控制電腦將是一個(gè)很有意義的工具。

  本文利用微軟的Speech SDK 5.1 免費的引擎和模擬鼠標技術(shù), 用Delphi7.0 實(shí)現了一個(gè)語(yǔ)音控制鼠標應用程序, 可以實(shí)現語(yǔ)音控制鼠標移動(dòng)、停止、單擊等動(dòng)作達到控制屏幕光標的作用, 并對語(yǔ)音控制鼠標程序中的延遲問(wèn)題進(jìn)行了分析, 提出并實(shí)現了一種改進(jìn)方法。

  2 基于語(yǔ)音識別的光標控制類(lèi)型

  目前有兩種語(yǔ)音控制鼠標的模式: 一種是目標導向光標控制和方向導向光標控制[n]。對于前者, 用戶(hù)需要用語(yǔ)音給出具體目標名稱(chēng)或者位置, 比如圖標、菜單, 或者屏幕區域名稱(chēng), 然后給出執行的命令如“單擊”等, 這種方式對于單個(gè)軟件還是有效的, 但是當目標增加的時(shí)候用戶(hù)需要記憶很多目標的名稱(chēng), 還可能出現同名稱(chēng)目標的情況, 因此工作中的錯誤率會(huì )增加。另一種方向導向光標控制又分為非連續控制和連續控制兩種, 對于非連續的情況用戶(hù)要同時(shí)說(shuō)明方向和距離, 如命令“左8 厘米”, 那么光標就向左移動(dòng)8厘米; 而對于連續的情況用戶(hù)先說(shuō)明方向如“向左”,光標就向左移動(dòng), 直到用戶(hù)再說(shuō)“停止”, 光標才停止運動(dòng)。

  本文討論的聲控光標是屬于方向導向中的連續控制, 這種鼠標控制和日常的使用習慣比較一致, 用戶(hù)使用起來(lái)比較適應。

  3 實(shí)現

  本文語(yǔ)音控制光標程序的語(yǔ)音控制是采用微軟的Speech SDK 5.1 的語(yǔ)音識別引擎及其API 接口, 這是一個(gè)免費的開(kāi)發(fā)包, 并且可以用它開(kāi)發(fā)具有中文語(yǔ)音功能的軟件。語(yǔ)音識別引擎通??梢苑譃閮煞N工作方式, 一種就是命令控制(Command and Control) 方式, 這個(gè)方式下語(yǔ)音識別引擎可以識別簡(jiǎn)短的語(yǔ)音命令, 以便執行相應的程序; 另外一種是連續聽(tīng)寫(xiě)方式,這個(gè)模式下語(yǔ)音識別引擎要識別連續的語(yǔ)音, 這種功能實(shí)現起來(lái)比語(yǔ)音控制更復雜, 因為語(yǔ)音聽(tīng)寫(xiě)過(guò)程中需要對上下文以及相同相似發(fā)音的詞語(yǔ)進(jìn)行分析、作出判斷, 而在命令控制語(yǔ)音方式中不需要作上下文分析。本文采用的是命令控制方式, 因為實(shí)現語(yǔ)音控制鼠標只需要對有限的幾個(gè)簡(jiǎn)短的命令進(jìn)行識別, 如“左”、“右”、“?!钡?。圖1 是語(yǔ)音控制鼠標程序的結構圖。

  基于語(yǔ)音識別技術(shù)的聲控鼠標光標程序設計

  圖1 語(yǔ)音控制鼠標程序結構

  該應用程序主要包括兩個(gè)部分: 第一部分語(yǔ)音控制應用主程序部分, 主要調用語(yǔ)音識別引擎識別用戶(hù)的語(yǔ)音命令。

  這部分程序主要完成幾件工作:

 ?、賹朕o書(shū)文法文件(XML 格式, 其中定義感興趣的語(yǔ)音命令) , 完成對語(yǔ)音識別引擎接口的初始化工作, 激活語(yǔ)音識別引擎;②接收語(yǔ)音識別引擎的識別結果, 根據識別結果調用相應的鼠標控制程序。

  下面的語(yǔ)法文件中定義了方向命令和鼠標事件命令的語(yǔ)法規則:

  GRAMMAR LANGID=“804”>

  DEFINE>

  ID NAME=“RID_start” VAL=“1”/>

  ID NAME=“PID_colour” VAL=“2”/>

  ID NAME=“PID_colourvalue” VAL=“3”/>

  /DEFINE>

 ??! - - Rule definiTIons - - >

  RULE NAME=“start” ID=“RID_start” TOPLEVEL=“ACTIVE”>

  RULEREF NAME=“colour” PROPNAME=“colour”P(pán)ROPID=“PID_colour” />

  /RULE>

  RULE NAME=“colour” >

  L PROPNAME=“colourvalue” PROPID=“PID_colourvalue”>

  P VAL=“1”>上/P>

  P VAL=“2”>下/P>

  P VAL=“3”>左/P>

  p VAL=“4”>右/p>

  p VAL=“5”>停止/p>

  P VAL=“6”>單擊/P>

  P VAL=“7”>雙擊/P>

  p VAL=“8”>關(guān)閉/p>

  /L>

  /RULE>

  /GRAMMAR>
在程序運行的時(shí)候, 一旦有上述語(yǔ)法文件中定義的命令被成功識別, 則在程序的onRecgnition 響應函數中可以查詢(xún)出識別的返回值是1~8 中的某個(gè)值, 根據不同的返回值就可以調用鼠標控制程序進(jìn)行鼠標的某個(gè)方向的移動(dòng)或者點(diǎn)擊等事件的模擬控制。

  第二部分鼠標控制程序, 就是調用程序模擬控制鼠標移動(dòng)或單擊等各種鼠標事件。這一部分主要是利用Windows API 函數模擬鼠標事件實(shí)現對鼠標光標的控制。

  模擬鼠標移動(dòng)可以通過(guò)循環(huán)調用Windows API函數SetcursorPos(x1,y1)來(lái)實(shí)現, 在循環(huán)中控制x1 和y1 的變化就可以實(shí)現任何方向的鼠標移動(dòng)。在程序中模擬鼠標移動(dòng)需要用到多線(xiàn)程控制, 否則鼠標移動(dòng)過(guò)程中無(wú)法隨時(shí)停止或者讓他轉向。以下是移動(dòng)線(xiàn)程中的移動(dòng)控制代碼:

  for I := 1 to 500 do

  begin

  if bstop=1 then break;

  //遇到停止命令時(shí)停止光標移動(dòng)

  case Dr of

  //根據參數Dr 決定光標運行方向

  1: x1:=x1+n1; //右移

  2: x1:=x1- n1; //左移

  3: y1:=y1+n1; //下移

  4: y1:=y1- n1; //上移

  end;

  windows.SetcursorPos(x1,y1);

  end;

  鼠標的另一類(lèi)控制程序是模擬鼠標單擊雙擊等鼠標事件, 主要是在程序中利用mouse_event 函數對鼠標事件進(jìn)行模擬。程序中以下代碼模擬了鼠標左鍵單擊:

  windows.mouse_event (MOUSEEVENTF_LEFTDOWN,0,0,0,0);

  // 左鍵按下

  windows.mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

  // 左鍵抬起

  圖2 是一個(gè)理想情況下用本文程序實(shí)現語(yǔ)音控制鼠標的例子。光標初始位置在屏幕左下方, 目標矩形在屏幕右上區, 首先用戶(hù)對麥克風(fēng)發(fā)出“右”的命令, 光標就向右移動(dòng); 當光標到達目標下方的時(shí)候用戶(hù)說(shuō)“上”命令, 光標就改向上移動(dòng)( 或者先說(shuō)“?!泵?, 光標停止) ; 當光標到達目標矩形, 用戶(hù)說(shuō)“?!泵?, 光標停止, 最后用戶(hù)說(shuō)“單擊”, 程序模擬鼠標左鍵單擊事件, 相當于目標矩形被單擊。

  基于語(yǔ)音識別技術(shù)的聲控鼠標光標程序設計

  圖2 一個(gè)語(yǔ)音控制鼠標工作的例子

  4 語(yǔ)音控制鼠標的缺陷

  雖然幾個(gè)簡(jiǎn)單的語(yǔ)音命令, 可以控制鼠標移動(dòng)到屏幕的任何位置, 并可以根據語(yǔ)音命令模擬單擊、雙擊等各種鼠標事件, 但是實(shí)際使用中還存在缺陷。

  對于大的目標而言, 這種語(yǔ)音控制鼠標控制沒(méi)有什么問(wèn)題, 如果目標區域比較小, 將會(huì )增加使用者的難度, 比如當光標移動(dòng)到矩形時(shí)喊“?!?, 光標會(huì )繼續移動(dòng)一小段才停, 這時(shí)光標可能已經(jīng)越過(guò)了目標矩形。這種情況和語(yǔ)音識控制中存在的延時(shí)有關(guān), 每次用戶(hù)發(fā)出語(yǔ)音命令到命令被執行都有一個(gè)過(guò)程, 首先使用者說(shuō)出語(yǔ)音命令是需要時(shí)間的, 而且語(yǔ)速快的人和語(yǔ)速慢的人說(shuō)同樣的命令花的時(shí)間不同; 另


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>