專利名稱:眼睛對電腦光標自動定位控制方法和系統(tǒng)的制作方法
技術領域:
本發(fā)明涉及人機交互和計算機視覺控制技術,尤其是眼睛對電腦的光標自動定位方法和系統(tǒng)。
背景技術:
電腦自從進入使用GUI(圖形用戶界面)的時代以來,鼠標(包括機械和光電式)的光標定位逐漸成為電腦操作中不可或缺的輸入工具,其重要性對于部分初級使用者來說甚至高于鍵盤。的確,在進行某些操作時,鼠標其輸入效率要遠高于鍵盤。但從另一方面來講,當使用者無法使用鼠標時,包括在特種場所的輸入控制信號——輸入便會變得極為不便——對于手部殘疾者來說這點尤為突出——因為他們除了無法使用鼠標以外,也無法使用鍵盤。這造成的直接后果是,對于此類人群,操作計算機便是“不可能完成的任務”。
除此之外,傳統(tǒng)鼠標還有一項缺點,便是長時間使用會對腕部肌肉造成物理性傷害,令使用者產生酸痛感,嚴重時甚至造成長期性的難以治愈的肌肉疾病。此點已得到醫(yī)學研究證明。出于此類原因,我們迫切的需要一種新的技術來解決此問題。即使用另一種輸入設備來代替鼠標,幫助使用者來操作電腦的光標。
用眼睛可以做到這一點。因為電腦最主要的輸出設備無疑是顯示器。對于任何使用者,離了別的輸出設備是可以使用電腦的,單顯示器不行。而我們接受顯示器輸出信息的器官是眼睛。也就是說,無論如何使用電腦,我們必須使用眼睛來接受電腦反饋的信息。于是相應的,若我們的眼睛可以接受電腦反饋的信息,那我們的眼睛也可以提供信息告知電腦我們如何使用電腦。
2004年9月20日有報導渥太華信息技術研究所的發(fā)明家Dmitry Gorodnichy發(fā)明了一種新的計算機導航系統(tǒng),該系統(tǒng)放棄了傳統(tǒng)的鼠標,而選擇鼻子來引導圖標進行網頁瀏覽。眨巴一下左眼或右眼,就相當于點擊左右鼠標。但未公布技術的細節(jié)。
發(fā)明內容
本發(fā)明的目的是提出一種以眼睛實現(xiàn)對電腦(包括具有GUI的電器或監(jiān)視器)的光標自動定位方法和系統(tǒng),包括以眼睛對電腦的光標進行控制。
本發(fā)明的目的是這樣實現(xiàn)的眼睛對電腦的光標自動定位和控制方法和系統(tǒng),其特征是首先系統(tǒng)進行初始化以攝像頭分別拍攝使用者注視電腦監(jiān)視器四個角時的眼部圖像,將圖像變換成灰階式數(shù)組,對數(shù)組動態(tài)處理,對剩余的值中最大有效區(qū)域進行均值處理選取其中心,算出每幅圖像的瞳孔中心位置,根據(jù)這四個點瞳孔中心位置和系統(tǒng)顯示的部分屬性建立模型獲取四極點對應的全圖坐標后,根據(jù)四點算出其中心位置M。以四點建立四邊形,再將四邊形修整為矩形,算出矩形的長與寬,并與顯示器的長寬相除,算出分別的比例KW,KH,此比例用于確定眼睛控制監(jiān)視器位置時瞳孔位置與監(jiān)視器的光標對應位置的關系。
本發(fā)明改進是根據(jù)上述四個點瞳孔中心位置和系統(tǒng)顯示的部分屬性建立模型將圖像變換成灰階式數(shù)組,對數(shù)組動態(tài)處理,并根據(jù)閾值對數(shù)組進行處理(包括對數(shù)組的邊角進行處理,使無效區(qū)的值失效,對于眼球外部區(qū)域的黑色閾值數(shù)據(jù)全部使其無效),對剩余的值中最大有效區(qū)域進行處理多維多次均值選取其中心,獲取四極點對應的全圖坐標后,根據(jù)四點算出其中心位置M。以四點建立四邊形,根據(jù)四邊形對角線算出坐標與水平線的偏轉量K。再將四邊形修整為矩形,算出矩形的長與寬,并與顯示器的長寬相除,算出分別的比例KW,KH。
自動跟蹤時的點的發(fā)送,拍攝獲得實時眼部圖像后,根據(jù)前文的方法獲得對應坐標N。算出M,N的距離及過M,N的直線的斜率,減K后獲得相對斜率,之后以此斜率和兩點距離、KW、KH算出監(jiān)視器上的對應位置,之后通過系統(tǒng)函數(shù)移動光標。
用眼睛發(fā)送類似于鼠標單擊的命令本發(fā)明的方法和系統(tǒng)設有“單擊”命令也將是用眼睛發(fā)送。此事件具體定義為,當鼠標在某一可以接受單擊命令的區(qū)域內停留兩秒,系統(tǒng)自動發(fā)送一個單擊命令到目標區(qū)域。
當然,可以定義眨眼為雙擊。根據(jù)此中心選定熱區(qū),熱區(qū)適當降低閾值重新二值化,對二值化過的熱區(qū)重新選取黑區(qū)中心,中心值是否有效,根據(jù)事先建立的模型發(fā)送光標到相應位置。
這之后便可算出瞳孔大致中心。此時采用的算法可以叫做單線掃描。程序從Boolean型數(shù)組第一橫行逐點掃描,在第一次掃倒點的橫行記一次,再到第一次沒掃倒點的橫行記一次,取兩次均值。豎行同理。雖說該算法會在圖片有兩塊黑色區(qū)域時產生錯誤(例如眼角處也取得較大黑區(qū)),但這種機率較小。
第一次取中心代碼根據(jù)上述計算。通過系統(tǒng)初始化,可建立位置對應模型,以方便之后的使用過程中光標的放置。
圖1是本發(fā)明的RGB顏色模型,用于將彩圖轉為灰階數(shù)組 圖2是本發(fā)明原像未處理圖2a,經處理后圖2b變化成黑白圖像的示意圖 圖3是以不同閥值二值化圖像變換示意圖,圖3a原圖,圖3b以170為閾值二值化,圖3c閾值為180,圖3d閾值為190,圖3e閾值200,圖3f閾值為210 圖4是本發(fā)明主流程處理示意圖,圖5是流程的具體示意圖
具體實施例方式 瞳孔中心位置判斷算法模塊程序將實時采集使用者眼部圖片。獲得圖片后,本程序需先將圖片轉為灰階數(shù)組,即值的范圍為0-255,尺寸與原圖片相同。此轉換需獲取每點RGB分量值。為了加快速度,使用LockBits函數(shù),鎖定并讀取此段內存,直接獲得各點各分量的Byte型值。處理一幅320*240的Bitmap用此函數(shù)需耗時0.01秒,較使用GetPixel的0.16秒更具效率。此部分代碼為 Dim bmpData As System.Drawing.Imaging.BitmapData=bmp.LockBits(rect,Imaging.ImageLockMode.ReadOnly,Imaging.PixelFormat.Format24bppRgb) Dim ptr As IntPtr=bmpData.ScanO Dim numBytes As Integer=rect.Width*rect.Height*3 Dim rgbValues(numBytes)As Byte System.Runtime.InteropServices.Marshal.Copy(ptr,rgbValues,0,numBytes)即將Bitmap型變量每點各分量復制入Byte型數(shù)組。
RGB顏色模型如圖1所示,由于使用攝像頭為黑白,圖片中所有值均為灰度。根據(jù)RGB顏色模型,所有灰度值均在正方體的對角線上,也就是說R紅、G綠、B藍三者值相同。因此轉灰階時,只需抽取這三者中的任意一個。圖中C青,M絳,Y黃,Bl黑,W白。又由于此時數(shù)組為一維,所以之后需進行以下操作Dim bmArrayS(rect.Width,rect.Height)As Short Dim t As Integer For h As Short=0 To rect.Height-1 For w As Short=0 To rect.Width-1 bmArrayS(w,h)=256-rgbValues(t)t+=3 Next 即每隔兩點在一位數(shù)組里去一個值,排列在新建的二維數(shù)組內。新建二維數(shù)組與原圖具有相同尺寸。這時的二維數(shù)組便是原圖灰階的量化數(shù)組。此轉化即將圖片轉為Short型數(shù)組,可利于后期處理素的的加快。接下來,為了降低圖片中噪音點對結果的影響,采用了模糊算法,即對3*3的范圍內取均值。實際測試結果顯示,該算法不但可洗去圖片中噪音點,還可使各色塊邊緣較為圓滑。
圖2是攝像圖像經處理后變化圖像,圖3是以不同閥值二值化圖像變換示意圖,均是根據(jù)左右不同的眼睛的的拍攝的圖像而進行的圖形抽象, 若以170為閥值,則信息的損失最少,但同時,得到的無效信息也越多,如最左邊的大片黑色區(qū)域,該區(qū)域會對結果產生很大影響,而且瞳孔周圍仍有很多會對結果產生或多或少黑點;若以190為閥值,瞳孔周圍的黑點消失了,但左側黑色色塊依然存在;若以210為閥值,左側黑色色塊消失了,但與此同時,瞳孔中的很多有效點也將被過濾掉,這有可能造成程序最后無法取得任何有效值。瞳孔的顏色相對其他區(qū)域是穩(wěn)定的,一般都在200以上。據(jù)此,可通過二值化將瞳孔與眼球周圍區(qū)域區(qū)別開,即提取出瞳孔區(qū)域。
二值化代碼為 Dim bmArrayB(rect.Width,rect.Height)As Boolean For m=0 To rect.Height-1 For n=0 To rect.Width-1 If bmArrayS(n,m)>=fa Then bmArrayB(n,m)=True Else bmArrayB(n,m)=False End If Next n,m 經過這些處理,計算結果還有可能被圖片邊角的連續(xù)性黑色色塊干擾(如經過模糊處理的效果顯示圖片中的左圖的左上角的小面積黑區(qū))。針對這些無效區(qū),增加了一塊自己命名為“去邊角”的算法,作用為洗去圖片邊角連續(xù)的無效黑色區(qū)域。這樣便可得到瞳孔的大致區(qū)域?!叭ミ吔恰贝a為(主要根據(jù)區(qū)域座標或位置來去邊角連續(xù)的無效黑色區(qū)域) 如For n=0 To rect.Height-1 For m=0 To rect.Width-1 If bmArrayB(m,n)Then bmArrayB(m,n)=False Else Exit For End If Next 這之后便可算出瞳孔大致中心。此時采用的算法可以叫做單線掃描。程序從Boolean型數(shù)組第一橫行逐點掃描,在第一次掃倒點的橫行記一次,再到第一次沒掃倒點的橫行記一次,取兩次均值。豎行同理。雖說該算法會在圖片有兩塊黑色區(qū)域時產生錯誤(例如眼角處也取得較大黑區(qū)),但這種機率較小。
第一次取中心代碼為 Dim x1,x2,y1,y2 As ShortDim ifFound As BooleanifFound=FalseFor m=0 To rect.Height-1<!-- SIPO <DP n="4"> --><dp n="d4"/>If ifFound=False ThenFor n=0 To rect.Width-1If bmArrayB(n,m)=True Theny1=mifFound=TrueExit ForEnd IfNextElseDim falsetime As Short=0For n=0 To rect.Width-1If bmArrayB(n,m)=False Then falsetime+=1NextIf falsetime=rect.Width Then y2=mifFound=FalseGoTo20End IfNext20For m=0 To rect.Width-1If ifFound=False ThenFor n=0 To rect.Height-1If bmArrayB(m,n)=True Thenx1=mifFound=TrueExit ForEnd IfNextElseDim falsetime As Short=0For n=0 To rect.Height-1If bmArrayB(m,n)=False Then falsetime+=1NextIf falsetime=rect.Height Then x2=mifFound=False<!-- SIPO <DP n="5"> --><dp n="d5"/>GoTo 30End IfNext30 此時取得的瞳孔中心與真實值相比,存在一定偏移。對此較為簡單的解決方法當然是適當降低閥值。但若這樣帶來的問題也顯而易見,即邊角處無效點的增多。為解決此問題,采用的是對熱區(qū)二次處理的方法,即在通過之前的處理之后,獲得瞳孔中心大致位置,之后再以此位置為中心,自動選擇一塊矩形區(qū)域。在此區(qū)域內降低閥值再二值化處理一次。這樣一來即可獲得較多有效值,又可降低取得邊角處無效值得機率。
選取熱區(qū)代碼為 Dim x1C,x2C,y1C,y2C As Shortx1C=x1*2-x2If x1C<0Then x1C=0x2C=x2*2-x1If x2C>rect.Width-1Then x2C=rect.Width-1y1C=y(tǒng)1*2-y2If y1C<0Then y1C=0y2C=y(tǒng)2*2-y1If y2C>rect.Height-1 Then y2C=rect.Height-1Dim bmHotB(x2C-x1C+2,y2C-y1C+2)As BooleanFor m=0 To y2C-y1C+1For n=0 To x2C-x1C+1If bmArrayS(n+x1C,m+y1C)>=fa-10ThenbmHotB(n,m)=TrueElsebmHotB(n,m)=FalseEnd IfNextNext 在此處理之后,程序將重新計算一次熱區(qū)的黑區(qū)中心。這次的中心與之前的相比較為準確。
第二次選取中心代碼為 For m=0 To y2C-y1C+1If ifFound=False ThenFor n=0 To x2C-x1C+1If bmHotB(n,m)=True Theny1=mifFound=TrueExit ForEnd IfNextElseDim falsetime As Short=0For n=0 To x2C-x1C+1If bmHotB(n,m)=False Then falsetime+=1NextIf falsetime=x2C-x1C+2Then y2=mifFound=FalseGoTo 40End IfNext 此時獲得的中心為熱區(qū)相對坐標,還需轉化為全圖坐標。
此部代碼為 FindPointWithLockbits.X=(x2-x1)\2+x1C+x1+2+rect.X FindPointWithLockbits.Y=(y2-y1)\2+y1C+y1+2+rect.Y 使用PIVM1.9G 640MB測試,采用此算法系統(tǒng)光標位置刷性率約為每秒10幀。
此后便須將數(shù)組進行二值化處理,轉為Boolean型數(shù)組,即True or False。此操作可減少甚至消除圖片中圖片中的大量無效信息。當然二值化處理的使用也是具有條件的,即關注區(qū)域灰度較為穩(wěn)定,或存在一定規(guī)律性。(為更好的表示處理效果,后面的黑白單色圖中黑色為True,白色為False。)這時在閥值的選取上便有一定的要求,因為選取不同的閥值往往對處理結果會有很大的影響。(圖3)可以很好的說明該問題用眼睛發(fā)送類似于鼠標單擊的命令 為了盡量脫離鼠標,本系統(tǒng)“單擊”命令也將是用眼睛發(fā)送。此事件具體定義為,當鼠標在某一可以接受單擊命令的區(qū)域內停留兩秒,系統(tǒng)自動發(fā)送一個單擊命令到目標區(qū)域。
特制的UIUI(圖形界面)的各按鈕均較大。這是因為本系統(tǒng)目前精準度并未達到可控制常見操作系統(tǒng)的要求,在此情況下大按鈕可使操作更為簡單。本發(fā)明的UI(用戶界面)目前具有以下功能 ·圖片瀏覽(自動加載“我的文檔”中“圖片收藏”內的JPG文件,“上”/“下”瀏覽上一幅/下一幅) ·文本瀏覽(自動加載桌面上的TXT文件,“上”/“下”瀏覽上一篇/下一篇) ·資源管理(磁盤查看,類似于Windows資源管理器) ·計算器 ·游戲 ·Mp3播放(自動加載My Music目錄下Mp3文件,依次播放) ·時間顯示 本發(fā)明當然可以用于數(shù)字電視的控制中,也可以使用于其它具有GUI的電器或監(jiān)視器。
本發(fā)明的系統(tǒng)構成是包括無線或有線攝像頭一套(可自帶紅外或黑白),如輸出模擬信號則通過外接視頻采集盒一個(USB接口)轉化成數(shù)字信號;采用USB接口的數(shù)字攝像頭更為簡便的低成本。數(shù)字攝像頭可以將模擬信號轉為數(shù)字信號,可以是頭戴式或置于監(jiān)視器的側邊或角部,加上本發(fā)明完成的系統(tǒng)軟件和UI用戶界面顯示和控制軟件,構成一API程序將監(jiān)視器的光標納入控制,從而將構成ETMSA(Auto)-UI;ETMSA(Auto)-Cap(UIUser Interface,用戶界面),獲取圖像并對光標進行控制。
本發(fā)明的系統(tǒng)模型可以基本健全及瞳孔中心位置判斷,目前光標在監(jiān)視器上的自動定位的精度可以達到20-40mm2分辨率,可以通過高分辨率的攝像設備和分辨率高的標線進行定位。實際使用時光標定位與使用者實際注視部位一般會有不超過1.5cm的偏移較好,可以通過較大的控制圖標,并設計專用UI,間接解決了光標定位不夠準確的問題。
權利要求
1、眼睛對電腦的光標自動定位和控制方法,其特征是首先系統(tǒng)進行初始化以攝像頭分別拍攝使用者注視電腦監(jiān)視器四個角時的眼部圖像,將圖像變換成灰階式數(shù)組,對數(shù)組動態(tài)處理,對剩余的值中最大有效區(qū)域進行均值處理選取其中心,算出每幅圖像的瞳孔中心位置,根據(jù)這四個點瞳孔中心位置和系統(tǒng)顯示的部分屬性建立模型獲取四極點對應的全圖坐標后,根據(jù)四點算出其中心位置M。以四點建立四邊形,再將四邊形修整為矩形,算出矩形的長與寬,并與顯示器的長寬相除,算出分別的比例KW,KH,此比例用于確定眼睛控制監(jiān)視器位置時瞳孔位置與監(jiān)視器的光標對應位置的關系。
2、根據(jù)權利要求1所述的眼睛對電腦的光標自動定位和控制方法,其特征是對灰階式數(shù)組動態(tài)處理,對剩余的值中最大有效區(qū)域進行處理多維多次均值選取其中心。
3、根據(jù)權利要求1所述的眼睛對電腦的光標自動定位和控制方法,其特征是以四點建立四邊形后,根據(jù)四邊形對角線算出坐標與水平線的偏轉量K;再將四邊形修整為矩形,算出矩形的長與寬,并與顯示器的長寬相除,算出分別的比例KW,KH。
4、根據(jù)權利要求1所述的眼睛對電腦的光標自動定位和控制方法,其特征是根據(jù)閾值對數(shù)組進行處理
5、根據(jù)權利要求1所述的眼睛對電腦的光標自動定位和控制方法,其特征是對根據(jù)中心選定熱區(qū),熱區(qū)適當降低閾值重新二值化,對二值化過的熱區(qū)重新選取黑區(qū)中心,中心值是否有效,根據(jù)事先建立的模型發(fā)送光標到相應位置。且對數(shù)組的邊角進行處理,使無效區(qū)的值失效,對于眼球外部區(qū)域的黑色閾值數(shù)據(jù)全部使其無效。
6、根據(jù)權利要求1所述的眼睛對電腦的光標自動定位和控制方法,其特征是自動跟蹤時的光標點位置控制信號的發(fā)送,拍攝獲得實時眼部圖像后,獲得對應坐標N。算出M,N的距離及過M,N的直線的斜率,減K后獲得相對斜率,之后以此斜率和兩點距離、KW、KH算出監(jiān)視器上的對應位置,之后通過系統(tǒng)函數(shù)移動光標。
7、根據(jù)權利要求1所述的眼睛對電腦的光標自動定位和控制方法,其特征是用眼睛發(fā)送單擊的命令光標在某一可以接受單擊命令的區(qū)域內停留兩秒,系統(tǒng)自動發(fā)送一個單擊命令到目標區(qū)域。
8、根據(jù)權利要求1所述的眼睛對電腦的光標自動定位和控制方法,其特征是用眨眼為雙擊。
9、根據(jù)權利要求1所述的眼睛對電腦的光標自動定位和控制方法,其特征是根據(jù)瞳孔大致中心后采用單線掃描方法程序從Boolean型數(shù)組第一橫行逐點掃描,在第一次掃倒點的橫行記一次,再到第一次沒掃倒點的橫行記一次,取兩次均值。豎行同理。
10、眼睛對電腦的光標自動定位和控制系統(tǒng),其特征是系統(tǒng)構成是包括無線或有線攝像頭一套(可自帶紅外或黑白),如輸出模擬信號則通過外接視頻采集盒一個(USB接口)轉化成數(shù)字信號;采用USB接口的數(shù)字攝像頭更為簡便的低成本。數(shù)字攝像頭可以將模擬信號轉為數(shù)字信號,可以是頭戴式或置于監(jiān)視器的側邊或角部,加上本發(fā)明完成的系統(tǒng)軟件和UI用戶界面顯示和控制軟件,構成一API程序將監(jiān)視器的光標納入控制。
全文摘要
眼睛對電腦的光標自動定位和控制方法,先系統(tǒng)進行初始化以攝像頭分別拍攝使用者注視電腦監(jiān)視器四個角時的眼部圖像,將圖像變換成灰階式數(shù)組,對數(shù)組動態(tài)處理,對剩余的值中最大有效區(qū)域進行均值處理選取其中心,算出每幅圖像的瞳孔中心位置,根據(jù)這四個點瞳孔中心位置和系統(tǒng)顯示的部分屬性建立模型獲取四極點對應的全圖坐標后,根據(jù)四點算出其中心位置M。以四點建立四邊形,再將四邊形修整為矩形,算出矩形的長與寬,并與顯示器的長寬相除,算出分別的比例KW,KH,此比例用于確定眼睛控制監(jiān)視器位置時瞳孔位置與監(jiān)視器的光標對應位置的關系。
文檔編號G06F3/01GK1889016SQ20061008608
公開日2007年1月3日 申請日期2006年7月25日 優(yōu)先權日2006年7月25日
發(fā)明者周辰 申請人:周辰