基于語音識別的聲控鼠標(biāo)的設(shè)計方法
模擬鼠標(biāo)移動可以通過循環(huán)調(diào)用Windows API函數(shù)SetcursorPos(x1,y1)來實現(xiàn), 在循環(huán)中控制x1 和y1 的變化就可以實現(xiàn)任何方向的鼠標(biāo)移動。在程序中模擬鼠標(biāo)移動需要用到多線程控制, 否則鼠標(biāo)移動過程中無法隨時停止或者讓他轉(zhuǎn)向。以下是移動線程中的移動控制代碼:
for I := 1 to 500 do
begin
if bstop=1 then break;
//遇到停止命令時停止光標(biāo)移動
case Dr of
//根據(jù)參數(shù)Dr 決定光標(biāo)運行方向
1: x1:=x1+n1; //右移
2: x1:=x1- n1; //左移
3: y1:=y1+n1; //下移
4: y1:=y1- n1; //上移
end;
windows.SetcursorPos(x1,y1);
end;
鼠標(biāo)的另一類控制程序是模擬鼠標(biāo)單擊雙擊等鼠標(biāo)事件, 主要是在程序中利用mouse_event 函數(shù)對鼠標(biāo)事件進行模擬。程序中以下代碼模擬了鼠標(biāo)左鍵單擊:
windows.mouse_event (MOUSEEVENTF_LEFTDOWN,0,0,0,0);
// 左鍵按下
windows.mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
// 左鍵抬起
圖2 是一個理想情況下用本文程序?qū)崿F(xiàn)語音控制鼠標(biāo)的例子。光標(biāo)初始位置在屏幕左下方, 目標(biāo)矩形在屏幕右上區(qū), 首先用戶對麥克風(fēng)發(fā)出右的命令, 光標(biāo)就向右移動; 當(dāng)光標(biāo)到達目標(biāo)下方的時候用戶說上命令, 光標(biāo)就改向上移動( 或者先說停命令, 光標(biāo)停止) ; 當(dāng)光標(biāo)到達目標(biāo)矩形, 用戶說停命令, 光標(biāo)停止, 最后用戶說單擊, 程序模擬鼠標(biāo)左鍵單擊事件, 相當(dāng)于目標(biāo)矩形被單擊。
圖2 一個語音控制鼠標(biāo)工作的例子
4 語音控制鼠標(biāo)的缺陷
雖然幾個簡單的語音命令, 可以控制鼠標(biāo)移動到屏幕的任何位置, 并可以根據(jù)語音命令模擬單擊、雙擊等各種鼠標(biāo)事件, 但是實際使用中還存在缺陷。
對于大的目標(biāo)而言, 這種語音控制鼠標(biāo)控制沒有什么問題, 如果目標(biāo)區(qū)域比較小, 將會增加使用者的難度, 比如當(dāng)光標(biāo)移動到矩形時喊停, 光標(biāo)會繼續(xù)移動一小段才停, 這時光標(biāo)可能已經(jīng)越過了目標(biāo)矩形。這種情況和語音識控制中存在的延時有關(guān), 每次用戶發(fā)出語音命令到命令被執(zhí)行都有一個過程, 首先使用者說出語音命令是需要時間的, 而且語速快的人和語速慢的人說同樣的命令花的時間不同; 另外語音識別引擎成功識別一個語音命令也需要一個時間。所以語音控制鼠標(biāo)在控制過程中必然存在延時。因此從開始發(fā)出語音命令到動作被執(zhí)行, 光標(biāo)必然會有位置的誤差: △S=V×△t ( △S 為位置誤差, V 為鼠標(biāo)移動速度, △t 為說話和識別造成的延時)。
Sear 等人曾經(jīng)研究用一個虛擬鼠標(biāo)機制來解決延時誤差問題, 即在真實的鼠標(biāo)移動前虛設(shè)一個鼠標(biāo), 當(dāng)假鼠標(biāo)到達目標(biāo)時發(fā)出語音命令, 執(zhí)行的時候真鼠標(biāo)正好到達目標(biāo)處。但是他們的試驗結(jié)果并不理想。因為每個人說話的習(xí)慣和速度是不一樣的, 而且不同的狀態(tài)下的語速也不同, 因此延時△t 不是一定的, 所以每次的位置誤差△S 也不盡相同, 而一種固定距離的先導(dǎo)虛擬鼠標(biāo)并不能取得很好的效果。
5 一種改進方法
影響位置控制效果的因素和目標(biāo)的大小、移動速度和延時有關(guān)。能夠改變的是速度控制, 所以本文采取一種方案改進位置控制精度。改進后的語音控制鼠標(biāo)每次的位置誤差△S 明顯減小, 在目標(biāo)較小的情況下, 位置控制精度得到提高。
改進方法是在程序中增加對鼠標(biāo)的速度控制: 在目標(biāo)較小的情況下, 光標(biāo)先以正常速度V1 移動, 到達目標(biāo)附近時先進行減速控制, 用語音命令慢來控制鼠標(biāo)減低移動速度到V2( 實際設(shè)計中V2=1/3 V1) ,到達目標(biāo)后再用語音命令停停止鼠標(biāo)移動, 圖3 反映了這個過程中光標(biāo)速度的變化。這樣在延時時間不變, 由于光標(biāo)移動速度V 降低很多, 由△S=V×△t 知道位置誤差△S 也減小很多。
圖3 速度可控制的語音控制光標(biāo)移動速度變化示意圖
而在目標(biāo)比較大的情況下, 因為位置控制精度足夠, 可以不選擇慢命令控制直接進行停控制。
結(jié)語
本文研究語音控制鼠標(biāo)的應(yīng)用程序, 實現(xiàn)了對鼠標(biāo)基本的語音控制, 針對語音控制中因為延時而產(chǎn)生的位置控制誤差做了分析和改進。本文研究的內(nèi)容對于開發(fā)輔助不便使用鼠標(biāo)及鍵盤的傷殘人士使用計算機的交互工具有積極的意義。
試驗表明用本程序控制鼠標(biāo)移動、點擊等可實現(xiàn)瀏覽網(wǎng)頁、打開、關(guān)閉程序等電腦操作。但是由于控制鼠標(biāo)過程中要多次發(fā)出語音命令, 同時要集中注意力觀察光標(biāo)的位置, 所以也存在用戶容易疲勞的問題。
后續(xù)將對改進語音控制鼠標(biāo)使用舒適情況和提高控制效率等做進一步研究。
評論