董劭杰,陳哲
(南京工程學院,南京 211167)
隨著圖像處理技術的進展和計算機處理能力的提高,以家用計算機作為硬件載體已經完全可以運行一些計算機視覺庫,并且得到相對準確的結果。利用這一結果,一部分殘障人士通過增量的軟件更新和家用攝像頭就可以方便地控制使用家用電腦,而不必做硬件層面的大改動。另外,人的眼部動作蘊含了非常多的信息量,同時雙目的目光聚焦處也代表了當前用戶的注意力集中點,利用眼球的這一屬性,可以適量減少操作過程中的誤觸和不當操作,有助于提高工作效率。最后,對新的人機交互方式的探索也許能夠帶來更好的用戶體驗,幫助人們更加便捷地使用計算機提高生產力。
在對人眼進行定位的過程中我們使用了OpenCV3中的Haar分類器。Haar-like特征最早是由Papageor?giou等應用于人臉表示,Viola和Jones在此基礎上,使用3種類型4種形式的特征。Haar分類器的工作原理如下:分布于目標區域中的矩形框通過強化的特征來反映各個位置的灰度變化,并且最終由這些變化情況來對目標圖像進行分類識別。

圖1
最初的特征庫包含3種類型的特征,如上圖1所示。圖像中白色區域的像素灰度值與減去黑色區域像素灰度值之和,所得到的數值就是所覆蓋區域的特征值[1]。
Haar特征值反映了圖像的灰度變化情況。例如:臉部的一些特征能由矩形特征簡單的描述,如:眼睛要比臉頰顏色要深,鼻梁兩側比鼻梁顏色要深,嘴巴比周圍顏色要深等。但矩形特征只對一些簡單的圖形結構,如邊緣、線段較敏感,所以只能描述特定走向(水平、垂直、對角)的結構[2]。
利用Hough變換,可以方便地在人眼中找到近似圓形的瞳孔區域并且進行定位。使用Hough變換之前的必要條件是先利用Haar特征將眼部區域進行預先分割,否則將會大大增加處理難度。以下為實驗結果。
(1)直方圖均衡化
直方圖是圖像的最基本的統計特征,它反映的是圖像的灰度值的分布情況。直方圖均衡化的目的是使圖像在整個灰度值動態變化范圍內的分布均勻化,改善圖像的亮度分布狀態,增強圖像的視覺效果。在處理圖像之前,首先對圖像進行灰度直方圖處理,刪除其中不必要的噪點,才可以得到更好的后期處理效果。

圖2

圖3
(2)利用圖像卷積來進行邊緣分割
無論是上文中的Hough變換還是Haar-like方法,都需要首先對圖像進行邊緣分割才能更好地確定需要處理的區域,排除背景和噪聲。所以,這里使用近似二階導數的Laplace算子來進行圖像的卷積操作并且最終得到圖像的邊緣分割結果。
最終結果再經過反相和銳化如圖4。

圖4

圖5
想要實現眼球鼠標,首先需要的就是捕捉連續的眼部圖像。這里考慮到以后的應用場景一般為家用,所以我們選用了一般的家用60Hz攝像頭作為圖像的來源。在實際使用過程中,由于設備的性能限制,我們并沒有逐幀的處理比較圖像,而是采用了每n幀一次的方式來處理圖像,事實證明:適當的降低處理的幀率反而有助于獲得更加有價值并且抖動較小的圖像。具體的比較結果如圖6:左圖為n=2即每兩幀跳過一幀時的處理結果,而右圖為n=3即每三幀跳過一幀時的處理結果。

圖6
如圖6所示,使用目光在屏幕上繪制圓形之后,左側幀率較高的時候軌跡出現了較多的折角,相較于右圖顯得不平滑不流暢。
處理圖像是為了從圖像中提取到有意義的信息并且供給下一步的圖像比較過程。主要涉及到的步驟按照時間軸分布如下:
(1)二值化和灰度處理
由于一般的圖像中很難保證沒有影響識別的噪聲,同時本裝置最終只需要識別顏色較淺的眼白上的黑色瞳孔,所以首先利用二值化或灰度處理來消除多余的顏色帶來的干擾。至于二值化和灰度化之間的選擇,經過對比,在復雜的背景環境下盡量還是應該選擇灰度化處理,這樣可以保留更多細節。圖7-8為對比圖,背景為白墻的前提下,灰度處理能夠保留更多的細節。

圖7

圖8
(2)利用Haar分類器來進行眼部識別和定位
利用圖像的Haar特征,可以確定人臉的位置,并且進一步確定人眼的位置。在位置關系上人眼位置相對人臉區域具有一定的不變性,如:人眼位于人臉的上半部分,人眼對稱分布在人臉兩側,利用這些先驗知識可以減少人眼定位的搜索區域;其次,人眼區域的灰度變化值低于周圍區域的灰度變化值,因此,可以利用閾值分割算法分割出人眼候選區內含有人眼的區域。具體效果如圖9:

圖9
但是,在實際使用過程中,是沒有這樣直觀地展示和對比過程的,并且考慮到設備的處理能力和算法的一些缺陷,也存在一定的檢測失敗情況。實際測試中,在頭部快速擺動的兩秒鐘之內攝像頭捕捉了40張圖像,批量處理過后只有兩張圖片的處理結果出現了錯誤,這樣的準確率已經達到了要求。
(3)利用Canny算子(卷積)做邊緣處理
在前面的理論部分已經提到過,利用Laplace算子對圖像進行梯度計算并且最終得到圖像中對比度符合閾值的邊緣圖像。而Canny算子正是OpenCV3中提供的一種對圖像做邊緣處理的算子,利用Canny算子,可以方便地將需要識別的色塊分割出來轉化為特定的線條,并且最終提取出有效信息。
(4)利用Hough變換檢測瞳孔(圓形特征)
眾所周知,瞳孔邊界的輪廓近似地構成了一個圓形,這樣就可以利用Hough變換來獲取瞳孔的中心位置。由于比直線檢測多出一個維度,使得標準的Hough圓檢測需要大量內存且速度較慢。出于對運算效率的考慮,OpenCV3實現的Hough圓檢測是一個比標準Hough圓變換更為靈活的檢測方法:Hough梯度法,也叫2-1Hough變換(21HT)。原理是首先對圖像進行Canny邊緣檢測,然后考慮邊緣圖像中的每一個非0點的局部梯度,通過CVSobel()函數計算x,y方向上的Sobel一階導數得到梯度,利用得到的梯度,由斜率指定直線上的每一個點都在累加器中被累加,然后從累加器中這些點中選擇候選的中心畫圓[3]。實際的檢測效果如圖10。
圖像經過處理之后我們便得到了一個關鍵信息,即瞳孔的中心位置。利用這個中心位置,只要再經過參數的整定,便可以得到目光在屏幕上相應的聚焦點,并且最終實現眼球鼠標軌跡的繪制。

圖10
(1)參數整定
為了實現最終的目標,必須先在繪制軌跡之前確認瞳孔位置和屏幕上目光聚焦位置的對應關系。本文中采用的方法便是使用標準大小的特定圖像來整定參數,如圖11。每次在使用者的目光移動到目標點的時候都進行一次記錄,將此時的目光聚焦點和瞳孔位置形成對應關系,這樣就可以得出瞳孔移動距離到目光移動距離的放大倍數。

圖11
經過實驗和測量,在日常使用家用電腦的過程中,只要滿足在頭部基本不晃動的情況下用目光能夠腳輕松地遍歷屏幕這樣的條件,瞳孔移動距離到目光移動距離的放大倍數就基本不會隨著目光的移動而出現較大的變化。而上述條件也符合一般情況下大多數人使用電腦的場景。
(2)繪制軌跡
為了動態標注軌跡,需要有可視化的引導,這里我們使用了Pillow集成的繪圖功能,這里不做贅述。
本文探討了利用OpenCV3完成眼球鼠標的可行性,并且成功進行了驗證。以一般家用計算機的算力,借助常用的攝像頭,就可以完成對人眼球信息的搜集。這樣的裝置能夠幫助殘疾人或行動不便者更加便利的使用電腦,有一定的社會意義和研究價值。