查文錦,孫孝彬,趙太飛,高 波
(1.西安理工大學(xué) 自動化與信息工程學(xué)院,陜西 西安 710048;2.河北邯鄲永年海軍四七二三工廠五車間,河北 邯鄲 057150)
基于紅外視頻定位交互系統(tǒng)的鼠標(biāo)模擬方法
查文錦1,孫孝彬1,趙太飛1,高 波2
(1.西安理工大學(xué) 自動化與信息工程學(xué)院,陜西 西安 710048;2.河北邯鄲永年海軍四七二三工廠五車間,河北 邯鄲 057150)
本論文針對紅外視頻定位采用端口操作驅(qū)動程序組件(WinIo)模擬鼠標(biāo)事件的局限性,提出了用win32 API函數(shù)的方法實(shí)現(xiàn)鼠標(biāo)驅(qū)動,解決了因內(nèi)外部數(shù)據(jù)沖突導(dǎo)致鼠標(biāo)失控的問題,并實(shí)現(xiàn)WinIo難以做到的雙擊事件,擴(kuò)展了紅外視頻定位系統(tǒng)的功能,為實(shí)現(xiàn)基于視頻的多點(diǎn)觸控提供解決方案。
人機(jī)交互;指示點(diǎn)定位;坐標(biāo)轉(zhuǎn)換;鼠標(biāo)模擬
基于視頻定位[1]實(shí)現(xiàn)人機(jī)交互是在專門的應(yīng)用程序的支持下,構(gòu)造一個(gè)大屏幕、交互式的商務(wù)會議或教學(xué)環(huán)境,它將顯示幕布變成了“觸摸屏”。首先,電腦將屏幕的視頻信號通過投影機(jī),投射到幕布上,通過攝像頭采集幕布上的圖像信息送到電腦;然后,利用軟件計(jì)算,就可以將幕布上的觸摸位置與電腦的鼠標(biāo)信息相對應(yīng)。為配合各種應(yīng)用軟件在大屏互動操作,更好的應(yīng)用于教學(xué),會議,指揮,遠(yuǎn)程協(xié)作等各種場合,實(shí)現(xiàn)傳統(tǒng)方式所無法實(shí)現(xiàn)的互動動態(tài)的多媒體操作,改變傳統(tǒng)的教學(xué)模式,將理論教學(xué)和實(shí)踐有機(jī)的結(jié)合在一起,調(diào)動學(xué)生的多種感官參與學(xué)習(xí),提升教學(xué)的質(zhì)量,提高教學(xué)效率,擴(kuò)大教學(xué)規(guī)模[2],本文提出了應(yīng)用編程接口(API)鼠標(biāo)模擬方案,并對模擬雙擊做出了理論研究和實(shí)驗(yàn)分析。
系統(tǒng)的整體設(shè)計(jì)主要劃分為以下幾個(gè)模塊,各個(gè)模塊之間相互聯(lián)系,形成一個(gè)完整的人機(jī)交互系統(tǒng)。為實(shí)現(xiàn)鼠標(biāo)事件模擬的前期準(zhǔn)備,將系統(tǒng)的模塊劃分為如圖1所示。

圖1 系統(tǒng)的模塊組成圖Fig.1 The constitution of system modules
由圖中可以看出,該模塊的設(shè)置自下而上形成了一個(gè)數(shù)據(jù)流,同時(shí)通過交互設(shè)置模塊進(jìn)行參數(shù)的設(shè)置,與用戶交流。其中,該模塊又根據(jù)功能劃分為若干個(gè)功能子模塊,各個(gè)子模塊的功能分別為:
1)視頻圖像獲取與顯示子模塊(實(shí)現(xiàn)該子模塊功能封裝C++類為CVideo):利用攝像頭對顯示畫面的圖像進(jìn)行連續(xù)不斷的拍攝,軟件上利用該模塊從攝像頭中連續(xù)不斷的獲取視頻圖像,在設(shè)置模塊需要對攝像機(jī)的位置進(jìn)行可視化校正,并將圖像顯示在對話框上的相應(yīng)控件上。
2)圖像畸變校正子模塊(實(shí)現(xiàn)該子模塊功能封裝的C++類為CCamCalibration):在圖中,該子模塊是以虛線框顯示的,表明該功能是一個(gè)可選項(xiàng),主要是為了應(yīng)對攝像頭的鏡頭畸變,只需提取攝像頭標(biāo)定的參數(shù)[3]即可進(jìn)行畸變校正。
3)圖像分析與指示點(diǎn)提取子模塊(實(shí)現(xiàn)該子模塊功能封裝的 C++為 CCoordinateInImage和 CCoordinateTrans):通過攝像頭拍攝計(jì)算機(jī)顯示的純白色背景圖像、白色背景加3個(gè)頂點(diǎn)圖像和棋盤格圖像。對采集到的三幅圖像進(jìn)行分析,提取出棋盤格在拍攝圖像中的位置,即代表了顯示畫面在拍攝圖像中的位置。并在獲得位置信息的基礎(chǔ)上自動生成一幅索引圖。當(dāng)紅外光屏上有動作時(shí),通過opencv圖像處理算法[4]可以從攝像頭拍攝的視頻圖像中找到指點(diǎn)的區(qū)域,并計(jì)算輸出一個(gè)指點(diǎn)坐標(biāo)。
4)坐標(biāo)轉(zhuǎn)換與動作測試子模塊(實(shí)現(xiàn)該子模塊功能封裝的C++為CCoordinateTrans和PointDetect):利用顯示畫面在圖像中的位置信息,以及索引圖像及提取的小矩形坐標(biāo)等信息,對計(jì)算出的坐標(biāo)點(diǎn)進(jìn)行轉(zhuǎn)換,將圖像坐標(biāo)系中的坐標(biāo)轉(zhuǎn)換到屏幕坐標(biāo)系中的實(shí)際坐標(biāo),在測試對話框中進(jìn)行動作測試,及時(shí)調(diào)整模擬鼠標(biāo)的各項(xiàng)參數(shù)。
5)鼠標(biāo)模擬(實(shí)現(xiàn)該子模塊功能封裝的C++類為CMouseSimu):通過對圖像的分析以及指示點(diǎn)的提取得到手指位置在屏幕中的坐標(biāo),調(diào)用windows函數(shù)來實(shí)現(xiàn)相應(yīng)功能。
6)交互設(shè)置模塊:該模塊由若干對話框組合構(gòu)成,這些對話框?qū)⒁陨细髯幽K聯(lián)系起來,向用戶提供了視頻畫面顯示,參數(shù)設(shè)置,位置校正等功能,以提高該系統(tǒng)的環(huán)境適應(yīng)性,同時(shí)也提高了鼠標(biāo)事件模擬的準(zhǔn)確度。
在紅外光屏上提取指示點(diǎn)的原理如圖2所示(其中1-紅外激光器,3-投影幕布,2-激光器投射的紅外光屏)。攝像頭套上濾光片后可濾除可見光干擾,當(dāng)手指或者其他不透光的物體在紅外光屏上有動作時(shí),就會出現(xiàn)明顯的光斑,很容易被攝像頭捕捉到。當(dāng)有多個(gè)光斑出現(xiàn)時(shí),會選擇連通域面積最大光斑的質(zhì)心坐標(biāo)作為鼠標(biāo)模擬操作的坐標(biāo)。在求取指示點(diǎn)坐標(biāo)前,需要求取圖像x方向與y方向的步長,對圖像進(jìn)行二值化以及形態(tài)學(xué)濾波,貼標(biāo)簽等計(jì)算處理,按照步長逐個(gè)尋找棋盤格上的角點(diǎn)[5],如(1)式。

式中 f(x,y)為貼標(biāo)簽后圖像在 x,y 點(diǎn)的灰度值,點(diǎn)(xi,yi),i=1~3是標(biāo)記區(qū)域的中心坐標(biāo)值,ni為圖像中灰度值為i的點(diǎn)的總個(gè)數(shù)。

圖2 指示點(diǎn)采集原理圖Fig.2 The principle of indicator point collection
標(biāo)定棋盤格上的角點(diǎn)后便可進(jìn)行指示點(diǎn)坐標(biāo)的計(jì)算,在調(diào)試的過程中發(fā)現(xiàn),采集角點(diǎn)要屏蔽掉棋盤格之外的角點(diǎn),否則會對下步坐標(biāo)轉(zhuǎn)換產(chǎn)生很大的影響。由于采集圖像和計(jì)算機(jī)屏幕畫面的坐標(biāo)系是相互獨(dú)立的,所以提取到的指示點(diǎn)坐標(biāo)不能進(jìn)行鼠標(biāo)模擬動作.為了實(shí)現(xiàn)所見即所得,需要建立了兩個(gè)坐標(biāo)系之間的映射關(guān)系來獲取準(zhǔn)確的計(jì)算機(jī)屏幕畫面的坐標(biāo),用轉(zhuǎn)換后的坐標(biāo)來進(jìn)行鼠標(biāo)事件的模擬。使用四點(diǎn)定位法[6]來計(jì)算,假設(shè)小矩形rect11是棋盤格中序號為11(從 1 開始)的矩形,如(2)式,ABCD 是該矩形的 4 個(gè)點(diǎn),lx,ly是該矩形的列與行的長度,T是待轉(zhuǎn)換坐標(biāo)的點(diǎn),分別是水平和垂直方向的比例值,即可求得點(diǎn)T在計(jì)算機(jī)屏幕中的真實(shí)坐標(biāo)(xscreen,yscreen)。

windows提供的API函數(shù)可以直接向目標(biāo)程序發(fā)送消息,常用的有SendMessage和 PostMessage,模擬鼠標(biāo)消息要用PostMessage函數(shù),用該函數(shù)向系統(tǒng)消息隊(duì)列中壓入一個(gè)自定義的鼠標(biāo)動作消息即可模擬鼠標(biāo)操作,但用這種方法模擬鼠標(biāo)并不是對所有程序都有效的,對于某些程序會禁止用戶對它使用模擬鼠標(biāo)程序。 或者利用函數(shù)SendInput來模擬鼠標(biāo)事件,該函數(shù)合成鍵盤事件和鼠標(biāo)事件,用來模擬鼠標(biāo)或者鍵盤操作。事件將被插入在鼠標(biāo)處理隊(duì)列里面,這是一種比較底層的模擬方法。 也可利用全局鉤子(Hook)[7]等方式進(jìn)行模擬,鉤子過程是Windows中提供的一種用以替換DOS下“中斷”的系統(tǒng)機(jī)制。在對特定的系統(tǒng)事件進(jìn)行hook后,操作系統(tǒng)在傳遞消息時(shí),將目的消息先傳遞給該鉤子過程,對該消息進(jìn)行檢查,這時(shí)程序就能在第一時(shí)間對該事件做出響應(yīng)。在程序中設(shè)置一個(gè)鼠標(biāo)鉤子過程,截獲所有的鼠標(biāo)消息,然后進(jìn)行判斷是否是目的消息,如果不是則將該消息放行交由系統(tǒng)處理,否則根據(jù)需求進(jìn)行鼠標(biāo)事件的模擬。在WinIo驅(qū)動級上模擬是通過加載一個(gè)內(nèi)核模式的設(shè)備驅(qū)動程序,利用幾種底層編程技巧,使得Windows應(yīng)用程序可以直接對I/O端口和物理內(nèi)存進(jìn)行存取,從而繞過了Windows系統(tǒng)的保護(hù)機(jī)制。由于直接的硬件端口讀寫使得很多程序無法對其進(jìn)行屏蔽,但是實(shí)驗(yàn)結(jié)果表明該方法也具有一定的局限性,就是驅(qū)動級的模擬是硬件相關(guān)的,因而兼容性不高。
在對以上幾種方法進(jìn)行測試比較,發(fā)現(xiàn)利用API函數(shù)mouse_event進(jìn)行模擬效率最高,兼容性較好,例如用該函數(shù)結(jié)合MOUSEEVENTF_LEFTDOWN和MOUSEEVENTF_LEFTUP即可模擬一次單擊鼠標(biāo)左鍵的過程。模擬過程為:先讓光標(biāo)移動到觸點(diǎn)位置,當(dāng)光標(biāo)停下時(shí)觸發(fā)點(diǎn)擊鼠標(biāo)左鍵的事件。當(dāng)手指離開紅外光屏,即檢測不到光斑時(shí)調(diào)用觸發(fā)彈鍵事件。為模擬鼠標(biāo)左鍵雙擊,需要使用時(shí)間函數(shù)來計(jì)時(shí)。當(dāng)手指離開光屏面時(shí)觸發(fā)計(jì)時(shí),再次檢測到光斑停止計(jì)時(shí),計(jì)算出時(shí)間差。若時(shí)間差小于某個(gè)數(shù)時(shí)相當(dāng)于在光屏上點(diǎn)擊了兩次。在對時(shí)間差的調(diào)整過程中發(fā)現(xiàn),當(dāng)時(shí)間差設(shè)為500 ms時(shí),測試的效果最好。為加強(qiáng)對目標(biāo)的精確點(diǎn)擊,又定義一個(gè)距離變量,計(jì)算第一次點(diǎn)擊的地方到第二次點(diǎn)擊的地方的距離。當(dāng)這個(gè)距離小于250個(gè)像素范圍時(shí),可以確定點(diǎn)擊的目標(biāo)。
在實(shí)際環(huán)境中利用該系統(tǒng)進(jìn)行了測試,如圖3,測試在室內(nèi)環(huán)境下完成,系統(tǒng)測試結(jié)果如下。

圖3 系統(tǒng)測試圖Fig.3 System test
上面四幅圖分別是系統(tǒng)運(yùn)行彈出的人機(jī)交互對話框。首先要調(diào)整攝像頭的位置使之能拍攝全部幕布圖像,如圖(a);再拍攝保存顯示屏顯示的棋盤格,通過分析棋盤格可標(biāo)定計(jì)算機(jī)顯示屏,如圖(b);對棋盤格進(jìn)行圖像處理,標(biāo)出棋盤格上的角點(diǎn),這些角點(diǎn)將用于計(jì)算指示點(diǎn)的坐標(biāo),如圖(c);最后對指點(diǎn)檢測進(jìn)行設(shè)置,調(diào)整各項(xiàng)參數(shù)使之適應(yīng)當(dāng)前的環(huán)境,如圖(d)。綜上,交互設(shè)置模塊大大提高了系統(tǒng)運(yùn)行的環(huán)境適應(yīng)性。
對模擬雙擊之間的時(shí)間間隔的最佳值的計(jì)算做了統(tǒng)計(jì),如圖 4。

圖4 時(shí)間差-模擬雙擊成功率的關(guān)系圖Fig.4 The relationship between time difference and the success rate of double-click
可看出當(dāng)兩次單擊之間的時(shí)間間隔在200 ms時(shí),雙擊模擬成功率較低;大于200 ms后,雙擊模擬成功率開始上升;在500 ms時(shí),雙擊的模擬成功率達(dá)到最高;大于500 ms后雙擊模擬成功率開始下降。這是因?yàn)橄到y(tǒng)程序處理每次單擊需要一定的時(shí)延,當(dāng)時(shí)間間隔為200 ms時(shí),相當(dāng)于在一次單擊處理時(shí)延里模擬雙擊,結(jié)果被判為單擊,造成雙擊模擬成功率低。隨著時(shí)延增大,在單擊時(shí)延里處理雙擊事件的概率開始降低,使雙擊模擬成功率得到提高。而兩次單擊的時(shí)間間隔大于500 ms時(shí),這兩次單擊會被分配到兩個(gè)單擊處理時(shí)延中,被判定為兩次單擊。時(shí)間間隔越大被分配到兩個(gè)時(shí)延的概率就越大,模擬成功率開始下降。所以500 ms是最佳時(shí)間間隔。
屏幕分辨率就是屏幕上顯示的像素個(gè)數(shù),分辨率越高,像素的數(shù)目越多。在屏幕尺寸一樣的情況下,分辨率越高,顯示效果就越精細(xì)和細(xì)膩。在實(shí)驗(yàn)中,對于屏幕分辨率和光標(biāo)定位的準(zhǔn)確度之間的關(guān)系進(jìn)行了測試分析,如圖5,可以看出,屏幕分辨率越高,模擬光標(biāo)的移動延時(shí)越小,光標(biāo)定位準(zhǔn)確度越高,這是因?yàn)閳D像處理要先采集圖像信息,圖像越細(xì)膩,采集到的指示點(diǎn)越精確,處理得到的指示點(diǎn)坐標(biāo)越接近目的坐標(biāo),定位的準(zhǔn)確度就越高,人手直接對幕布進(jìn)行操作的效率也得到提高,能滿足精度以及實(shí)時(shí)性要求。

圖5 屏幕分辨率—光標(biāo)定位準(zhǔn)確度關(guān)系圖Fig.5 The relationship between screen resolution and the cursor positioning accuracy
本文首先闡述了紅外交互系統(tǒng)的構(gòu)建,包括系統(tǒng)的硬件與軟件環(huán)境,并介紹各個(gè)模塊的劃分以及模塊間的關(guān)聯(lián),重點(diǎn)闡明了系統(tǒng)的最終目標(biāo),即鼠標(biāo)事件模擬,使用API函數(shù)避開在驅(qū)動級上進(jìn)行模擬,又克服了一般應(yīng)用軟件禁止鼠標(biāo)模擬的缺點(diǎn),在此基礎(chǔ)上完成了雙擊事件。最后對整個(gè)系統(tǒng)進(jìn)行了測試,測試結(jié)果證明系統(tǒng)能很好的完成各項(xiàng)功能。基于視頻定位的人機(jī)交互系統(tǒng)因其較低的成本、更自然的交互方式和對多媒體技術(shù)更充分的利用,在未來將會有更為廣闊的發(fā)展前景。未來的工作將向多點(diǎn)觸控展開,構(gòu)造基于多點(diǎn)觸控的大屏幕教學(xué)、娛樂系統(tǒng)。多點(diǎn)觸控是在同一顯示界面上的多點(diǎn)或多用戶的交互操作模式,摒棄了鍵盤、鼠標(biāo)的單點(diǎn)操作方式,利用視頻定位方式將能很大程度上的降低其成本。
[1]李巖.視頻定位人機(jī)交互系統(tǒng)的研究與實(shí)現(xiàn) [D].西安:西安理工大學(xué),2012.
[2]吳愷.基于紅外感應(yīng)的交互式白板系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].長沙:國防科學(xué)技術(shù)大學(xué),2009.
[3]Gary Bradski,Adrian Kaebler.學(xué)習(xí)OpenCV (中文版)[M].于仕琪,劉瑞禎,譯.北京:清華大學(xué)出版社,2009.
[4]于仕琪.OpenCV教程——基礎(chǔ)篇[M].北京:北京航空航天大學(xué)出版社,2007.
[5]王玉珠.圖像角點(diǎn)檢測算法研究[D].重慶:重慶大學(xué),2007.
[6]崔如春,譚海燕.電阻式觸摸屏的坐標(biāo)定位與筆畫處理技術(shù)[J].儀表技術(shù)與傳感器,2004(8):49-50.
CUI Ru-chun,TAN Hai-yan. Interface and software processing technology for resistive touch screen[J].Instrument Technique and Sensor,2004(8):49-50.
[7]孫鑫.VC++深入詳解[M].北京:電子工業(yè)出版社,2006.
Human-computer interaction system based on infrared video positioning
ZHA Wen-jin1, SUN Xiao-bin1, ZHAO Tai-fei1, GAO Bo2
(1.Faculty of Automation and Information Engineering,Xi'an University of Technology,Xi’an 710048, China;2.The Fifth Workshop of 4723 Factory,Hebei Yongnian Navy, Handan 057150, China)
There are some limitations when using port operation driver components (WinIo) to simulate mouse events in infrared video positioning technology.According to the above problem,the method of win32 API function to achieve mouse driver is proposed.Using this method,the mouse out of control caused by internal and external data collision is solved and the double-click event which is difficult to do using WinIo function is achieved.Analysis and results show that the functions of infrared video positioning system are expanded and the method can provide solution to realize the multi-point touch based on the infrared video positioning.
human-computer interaction;indicate a point positioning;coordinate transformation;mouse simulation
TP37
A
1674-6236(2014)02-0165-03
2013-05-29 稿件編號:201305288
國家自然科學(xué)基金資助項(xiàng)目(61001069);西安市技術(shù)轉(zhuǎn)移促進(jìn)工程重大項(xiàng)目(CX12166);陜西省自然科學(xué)基礎(chǔ)研究計(jì)劃項(xiàng)目(2011JQ8028);陜西省教育廳產(chǎn)業(yè)化培育項(xiàng)目(2012JC19)
查文錦(1990—),男,安徽黃山人。研究方向:通信。