• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 基于語音識別技術的聲控鼠標光標設計

    基于語音識別技術的聲控鼠標光標設計

    作者: 時間:2016-10-29 來源:網絡 收藏

    1 概述

    本文引用地址:http://www.czjhyjcfj.com/article/201610/309205.htm

    電腦語音技術經過多年發展已經取得了巨大進步, 目前已經有一些產品和項目讓人們有機會和計算機進行語音交互工作, 例如IBM公司的Viavoice 系列軟件以及微軟的新的Office 產品都有實用的語音功能, 可以進行語音聽寫錄入文字等工作, 還出現了一些基于語音技術的應用系統。

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

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

    2 基于的光標控制類型

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

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

    3 實現

    本文語音控制光標程序的語音控制是采用微軟的Speech SDK 5.1 的語音識別引擎及其API 接口, 這是一個免費的開發包, 并且可以用它開發具有中文語音功能的軟件。語音識別引擎通常可以分為兩種工作方式, 一種就是命令控制(Command and Control) 方式, 這個方式下語音識別引擎可以識別簡短的語音命令, 以便執行相應的程序; 另外一種是連續聽寫方式,這個模式下語音識別引擎要識別連續的語音, 這種功能實現起來比語音控制更復雜, 因為語音聽寫過程中需要對上下文以及相同相似發音的詞語進行分析、作出判斷, 而在命令控制語音方式中不需要作上下文分析。本文采用的是命令控制方式, 因為實現語音控制鼠標只需要對有限的幾個簡短的命令進行識別, 如左、右、停等。圖1 是語音控制鼠標程序的結構圖。

    圖1 語音控制鼠標程序結構

    該應用程序主要包括兩個部分: 第一部分語音控制應用主程序部分, 主要調用語音識別引擎識別用戶的語音命令。

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

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

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

    停止

    單擊

    雙擊

    關閉

    在程序運行的時候, 一旦有上述語法文件中定義的命令被成功識別, 則在程序的onRecgnition 響應函數中可以查詢出識別的返回值是1~8 中的某個值, 根據不同的返回值就可以調用鼠標控制程序進行鼠標的某個方向的移動或者點擊等事件的模擬控制。

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

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

    for I := 1 to 500 do

    begin

    if bstop=1 then break;

    //遇到停止命令時停止光標移動

    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;

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

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

    // 左鍵按下

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

    // 左鍵抬起

    圖2 是一個理想情況下用本文程序實現語音控制鼠標的例子。光標初始位置在屏幕左下方, 目標矩形在屏幕右上區, 首先用戶對麥克風發出右的命令, 光標就向右移動; 當光標到達目標下方的時候用戶說上命令, 光標就改向上移動( 或者先說停命令, 光標停止) ; 當光標到達目標矩形, 用戶說停命令, 光標停止, 最后用戶說單擊, 程序模擬鼠標左鍵單擊事件, 相當于目標矩形被單擊。

    圖2 一個語音控制鼠標工作的例子

    4 語音控制鼠標的缺陷

    雖然幾個簡單的語音命令, 可以控制鼠標移動到屏幕的任何位置, 并可以根據語音命令模擬單擊、雙擊等各種鼠標事件, 但是實際使用中還存在缺陷。

    對于大的目標而言, 這種語音控制鼠標控制沒有什么問題, 如果目標區域比較小, 將會增加使用者的難度, 比如當光標移動到矩形時喊停, 光標會繼續移動一小段才停, 這時光標可能已經越過了目標矩形。這種情況和語音識控制中存在的延時有關, 每次用戶發出語音命令到命令被執行都有一個過程, 首先使用者說出語音命令是需要時間的, 而且語速快的人和語速慢的人說同樣的命令花的時間不同; 另外語音識別引擎成功識別一個語音命令也需要一個時間。所以語音控制鼠標在控制過程中必然存在延時。因此從開始發出語音命令到動作被執行, 光標必然會有位置的誤差: △S=V×△t ( △S 為位置誤差, V 為鼠標移動速度, △t 為說話和識別造成的延時)。

    Sear 等人曾經研究用一個虛擬鼠標機制來解決延時誤差問題, 即在真實的鼠標移動前虛設一個鼠標, 當假鼠標到達目標時發出語音命令, 執行的時候真鼠標正好到達目標處。但是他們的試驗結果并不理想。因為每個人說話的習慣和速度是不一樣的, 而且不同的狀態下的語速也不同, 因此延時△t 不是一定的, 所以每次的位置誤差△S 也不盡相同, 而一種固定距離的先導虛擬鼠標并不能取得很好的效果。

    5 一種改進方法

    影響位置控制效果的因素和目標的大小、移動速度和延時有關。能夠改變的是速度控制, 所以本文采取一種方案改進位置控制精度。改進后的語音控制鼠標每次的位置誤差△S 明顯減小, 在目標較小的情況下, 位置控制精度得到提高。

    改進方法是在程序中增加對鼠標的速度控制: 在目標較小的情況下, 光標先以正常速度V1 移動, 到達目標附近時先進行減速控制, 用語音命令慢來控制鼠標減低移動速度到V2( 實際設計中V2=1/3 V1) ,到達目標后再用語音命令停停止鼠標移動, 圖3 反映了這個過程中光標速度的變化。這樣在延時時間不變, 由于光標移動速度V 降低很多, 由△S=V×△t 知道位置誤差△S 也減小很多。

    圖3 速度可控制的語音控制光標移動速度變化示意圖

    而在目標比較大的情況下, 因為位置控制精度足夠, 可以不選擇慢命令控制直接進行停控制。

    結語

    本文研究語音控制鼠標的應用程序, 實現了對鼠標基本的語音控制, 針對語音控制中因為延時而產生的位置控制誤差做了分析和改進。本文研究的內容對于開發輔助不便使用鼠標及鍵盤的傷殘人士使用計算機的交互工具有積極的意義。

    試驗表明用本程序控制鼠標移動、點擊等可實現瀏覽網頁、打開、關閉程序等電腦操作。但是由于控制鼠標過程中要多次發出語音命令, 同時要集中注意力觀察光標的位置, 所以也存在用戶容易疲勞的問題。

    后續將對改進語音控制鼠標使用舒適情況和提高控制效率等做進一步研究。



    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 遂平县| 望谟县| 开远市| 沅陵县| 黑龙江省| 五大连池市| 黄大仙区| 名山县| 扬州市| 大荔县| 织金县| 高平市| 绥芬河市| 鄯善县| 安新县| 西丰县| 东港市| 徐州市| 宕昌县| 芜湖市| 阳山县| 平塘县| 怀仁县| 泰来县| 惠州市| 福鼎市| 武城县| 金昌市| 喀喇| 武汉市| 台前县| 贺州市| 罗甸县| 建湖县| 晴隆县| 徐汇区| 蓬溪县| 和静县| 堆龙德庆县| 和田县| 阿瓦提县|