新聞中心

        EEPW首頁 > 消費電子 > 設計應用 > 基于語音識別的聲控鼠標的設計方法

        基于語音識別的聲控鼠標的設計方法

        作者: 時間:2012-08-07 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/165091.htm

          模擬移動可以通過循環調用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 一個語音控制鼠標工作的例子

        圖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 速度可控制的語音控制光標移動速度變化示意圖

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

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

          結語

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

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

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


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 柏乡县| 罗山县| 黄骅市| 江安县| 夏津县| 内江市| 彭州市| 古丈县| 雷州市| 南郑县| 莲花县| 方山县| 深圳市| 中山市| 开阳县| 阿瓦提县| 扬中市| 临高县| 阳春市| 澄迈县| 荣昌县| 南江县| 前郭尔| 丰镇市| 平山县| 临西县| 视频| 墨江| 醴陵市| 满洲里市| 酒泉市| 水城县| 铜鼓县| 文昌市| 上虞市| 河西区| 光山县| 班戈县| 上犹县| 榆中县| 社会|