李永強
(廣東工業(yè)大學(xué)計算機學(xué)院計算機視覺與交互實驗室,廣州510006)
近年來隨著計算機性能的快速發(fā)展,人機交互技術(shù)[1]逐漸走進了人們的視野,開始在社會的各個領(lǐng)域逐漸普及。很多科研人員在這方面展開了研究,如眼動跟蹤[2]、人臉檢測、手勢識別、語音識別等,這些豐富的研究成果促進了人機交互技術(shù)的發(fā)展,也給人們的日常生活帶來了翻天覆地的變化,極大地提高了人們的生活效率。
而人機交互技術(shù)中的眼動跟蹤技術(shù)是一種依靠攝像頭、紅外燈珠等輔助設(shè)備實時計算人眼注視方向與位置的技術(shù),其簡單、新穎、無疲勞的特性給人機交互領(lǐng)域提供了一種更加人性化的交互方式。關(guān)于眼動跟蹤技術(shù)的研究已有上百年歷史,目前它已廣泛應(yīng)用于多個領(lǐng)域。例如用于智能頭顯、圖片廣告研究[3]、動態(tài)分析、可用性測試、商場購物、智能家電、數(shù)字游戲等多個領(lǐng)域。
在智能頭顯設(shè)備中,眼動跟蹤技術(shù)是其最重要的技術(shù)之一。在智能頭顯設(shè)備上添加眼動跟蹤技術(shù),可以提高VR 世界的視覺寬廣性,減輕用戶的肢體疲勞,增加社交虛擬人物的逼真性,提高人類與周圍環(huán)境的互動能力。所以為了提高智能頭顯的綜合性能,眼動跟蹤就是智能頭顯的必備技術(shù)。
眼動跟蹤對于智能頭顯的幾個主要應(yīng)用如下。
(1)減輕用戶的肢體疲勞
由于技術(shù)的限制,目前的智能頭顯設(shè)備大多比較笨重,當(dāng)用戶在佩戴智能頭顯設(shè)備進行交互操作時,需要進行大量的肢體動作,例如用手拿著操作手柄進行虛擬菜單的選擇,或者在虛擬射擊游戲中用手不斷地射擊動作,都給身體帶來了沉重的疲勞。而使用眼動跟蹤技術(shù)時,相當(dāng)部分的疲勞動作都可以用眼神操作代替,從而釋放出了大量的肢體動作。如果在使用眼動跟蹤技術(shù)的同時在配合頭動追蹤,用戶的肢體動作將會更大程度地降低。
(2)基于眼動跟蹤的注視點渲染技術(shù)[4]
目前智能頭顯設(shè)備不能像電腦一樣在生活中普遍普及的一個重要原因就是它高昂的價格,這讓普通用戶望而止步。而智能頭顯設(shè)備之所以成本非常高的一個主要原因就是高分辨率的屏幕。根據(jù)人眼的視覺特性,人眼在看目標(biāo)對象時,只專注于目標(biāo)物體很小的視野而忽略周圍環(huán)境。在智能頭顯里面,使用基于眼動跟蹤的注視點渲染技術(shù),以高分辨率渲染中心區(qū)域,以低分辨率渲染周邊區(qū)域。這樣既能降低硬件設(shè)備的計算量,又不影響使用者的體驗。
(3)數(shù)據(jù)預(yù)取
在智能頭顯設(shè)備中,某些數(shù)據(jù)操作需要一定的時間才能完成,例如在在線數(shù)據(jù)庫中查找東西,如果一個人在特定方向上掃視,在選擇交互之前,數(shù)據(jù)讀取可以在后臺開始。數(shù)據(jù)預(yù)取改善了智能頭顯環(huán)境中的感知響應(yīng)性,對移動數(shù)據(jù)網(wǎng)絡(luò)尤為有用。
綜上所述,對面向智能頭顯的眼動跟蹤技術(shù)的研究,能幫助智能頭顯實現(xiàn)更好的用戶體驗。它能為用戶提供更多的操作空間和更自然的交互,而未來注視點渲染技術(shù)將進一步降低在復(fù)雜3D 環(huán)境中對處理器性能的要求,這也會在整體上讓智能頭顯變得更加平易近人。因此面向智能頭顯的眼動跟蹤技術(shù)有著重要的研究意義。
在目前階段,無論國內(nèi)還是國外,眼動跟蹤在智能頭顯上的應(yīng)用都處于發(fā)展的初始階段,技術(shù)不夠成熟,還有很多問題亟待解決?;谶@種情況,本文基于眼動跟蹤技術(shù)開發(fā)了一款高效、便捷、低成本、可移植的眼動跟蹤系統(tǒng),可以直接運用于智能頭顯上,加快了眼動跟蹤技術(shù)在智能頭顯上的研究與應(yīng)用。而且科研人員也可以直接應(yīng)用IVI-GAZE 系統(tǒng)做眼動相關(guān)的其他研究,例如心理學(xué)研究[5]、圖片廣告研究等,節(jié)約了科研人員對眼動跟蹤技術(shù)研究的成本投入,避免了前期大量的準(zhǔn)備工作,提高了對眼動跟蹤技術(shù)研究的效率。
IVI-GAZE 系統(tǒng)的目的是實現(xiàn)實時的屏幕注視點檢測,為其他基于眼動的開發(fā)項目提供一個高效、便捷的注視點檢測平臺。它的系統(tǒng)結(jié)構(gòu)分為兩大模塊:IVI-GAZE-CORE 模塊和IVI-GAZE-PLUGIN 模塊。它的程序設(shè)計功能包括模塊的線程控制、內(nèi)部通信與外部通信、指令控制、校準(zhǔn)場景的建立、瞳孔檢測、求解映射函數(shù)、坐標(biāo)映射等。程序流程邏輯如圖1 所示。
IVI-GAZE 系統(tǒng)運行于頭戴式設(shè)備上,設(shè)備需要使用多個850nm 紅外光燈珠,以及一個窄帶紅外光鏡片的攝像頭,并且設(shè)備與頭的位置不能有較大的位移。
IVI-GAZE 系統(tǒng)在實時性上要求瞳孔檢測及映射的運行速率至少要達到60 幀/秒,通信速率至少達到300 幀/秒,需要使用多線程以及其他加速算法進行加速。另外IVI-GAZE 系統(tǒng)在異常處理方面,能夠自動檢測設(shè)備,及時返回設(shè)備的出錯信息。通信模塊使用UDP 協(xié)議,自動丟棄超時的數(shù)據(jù)。對于用戶使用錯誤的情況,系統(tǒng)會給予其相應(yīng)的引導(dǎo)操作。在接口方面,以Unity 插件的形式為其他系統(tǒng)或模塊使用。
圖1 程序流程邏輯
IVI-GAZE-CORE 是一個Windows 程序,用于眼動儀的校準(zhǔn)與瞳孔檢測,與IVI-GAZE-PLUGIN 一起運行。在該部分,用戶需要進行的操作是將設(shè)備連接到電腦,啟動IVI-GAZE-CORE 程序,選擇相關(guān)設(shè)備,接下來啟動Unity,打開IVI-GAZE-PLUGIN 插件,并按照其引導(dǎo)進行操作。
在功能組成方面,它的模塊主要分為:管理模塊、設(shè)備模塊、校準(zhǔn)模塊、檢測模塊、映射模塊、通信模塊。
具體每個模塊的功能如下:
(1)管理模塊。主要功能包括程序的入口,線程的管理,以及對來自Unity 插件的指令進行處理。
(2)設(shè)備模塊。主要功能包括獲取UVC 設(shè)備信息,修改UVC 設(shè)備參數(shù),從UVC 設(shè)備獲取幀據(jù)。
(3)校準(zhǔn)模塊。主要功能包括校準(zhǔn)操作,以及返回擬合的映射多項式。
(4)檢測模塊。主要功能為接收幀數(shù)據(jù),從而獲得瞳孔的歸一化的絕對位置。
(5)映射模塊。主要功能為利用映射多項式計算出注視點位置
(6)通信模塊。主要功能是與Unity 插件進行通信。
IVI-GAZE-CORE 程序的功能組成如圖2 所示。
圖2 IVI-GAZE-CORE功能組成
IVI-GAZE-CORE 程序與IVI-GAZE-PLUGIN 插件需要進行通信,其內(nèi)容如圖3 所示。
圖3 IVI-GAZE-CORE程序與IVI-GAZE-PLUGIN插件通信圖
(1)從Unity 插件獲得編碼的指令
發(fā)送的指令有:初始化并啟動校準(zhǔn)進程;初始化并啟動檢測進程;關(guān)閉設(shè)備;關(guān)閉校準(zhǔn)進程;關(guān)閉檢測進程。
(2)向Unity 發(fā)送相應(yīng)的數(shù)據(jù)
①校準(zhǔn)。發(fā)送的數(shù)據(jù)為:校準(zhǔn)是否成功的標(biāo)識。
②檢測。發(fā)送的數(shù)據(jù)為:時間戳;圖像尺寸;歸一化的注視點坐標(biāo);置信度;其他相關(guān)信息。
瞳孔檢測算法的主要流程有:圖像預(yù)處理[6]、瞳孔選區(qū)[7];動態(tài)直方圖閾值[8]、選取瞳孔暗區(qū)與亮區(qū)[9];Canny 運算去除暗區(qū)與亮區(qū)[10];輪廓檢測;輪廓篩選;橢圓擬合[11-12];橢圓篩選;產(chǎn)生結(jié)果。
首先,對圖像進行預(yù)處理,選擇初始區(qū)域,保存為待處理圖像pupil-image,如圖4 所示。
圖4 待處理圖像pupil-image
然后計算待處理圖像的直方圖,根據(jù)計算的峰值來確定動態(tài)閾值,獲得暗區(qū)與亮區(qū),并分別對其做形態(tài)學(xué)操作。圖像暗區(qū)與亮區(qū)的計算流程如圖5 所示。
圖5 圖像暗區(qū)與亮區(qū)的計算流程
接下來對待處理圖像進行去噪,執(zhí)行Canny 運算獲得邊界圖像,去掉邊界圖像中與暗區(qū)/亮區(qū)重疊的部分。圖像邊界的獲取流程圖如圖6 所示。
圖6 圖像邊界獲取的流程圖
最后,對邊界圖像執(zhí)行findContours 操作,獲得輪廓集,對其進行篩選。對篩選好的輪廓做fitEllipse 操作,獲得橢圓,在篩選橢圓。若輪廓或橢圓數(shù)量為零,則使置信度為零,即代表查找失?。环駝t,計算出相應(yīng)數(shù)值,存為結(jié)果。最后將所有結(jié)果傳送給插件。對邊界圖像執(zhí)行findContours 操作流程圖如圖7 所示。
圖7 對邊界圖像執(zhí)行findCountours的流程圖
IVI-GAZE-PLUGIN 為Unity 程序開發(fā)的插件。Unity 是一款輕型的圖形游戲開發(fā)引擎,由于其簡單易學(xué)的特點,吸引了大量游戲開發(fā)人員,具有良好的軟件生態(tài)環(huán)境,因而在開發(fā)過程中將IVI-GAZE-PLUGIN作為Unity 的插件來擴展其對眼動設(shè)備的使用功能。
開發(fā)Unity 插件主要是為了擴展Unity 對眼動交互設(shè)備的支持,利用該插件實現(xiàn)IVI-GAZE 的可移植性,在該插件上開發(fā)人員可以很方便地使用眼動信息來進行交互,以實現(xiàn)Unity 程序中利用用戶的注視點信息進行渲染、交互或分析等功能。
IVI-GAZE-PLUGIN 的程序功能如圖8 所示。
圖8 IVI-GAZE-PLUGIN功能模塊
(1)管理模塊。管理線程,控制程序流程,對來自IVI-GAZE-CORE 的指令進行處理。
(2)交互模塊。校準(zhǔn)時提示用戶注視校準(zhǔn)點,模擬注視點位置等。
(3)通信模塊。與IVI-GAZE-CORE 進行通信。
在注視點位置與瞳孔中心之間有一定的函數(shù)映射關(guān)系,我們通過多項式擬合[13]的方法建立二者之間的數(shù)學(xué)關(guān)系模型。這種基于多項式擬合的實現(xiàn)估計算法屬于一種2D 映射算法,可以根據(jù)瞳孔中心的位置計算出注視點的位置。
算法主要流程如下:
(1)用戶把目光移向計算機屏幕上七個預(yù)先設(shè)定好的位置。首先用戶要依次注視計算機屏幕上的已知位置,用于擬合出注視點計算的多項式。在這一階段可以擬合不同階數(shù)的多項式,而且系統(tǒng)精度與階數(shù)成正比,但系統(tǒng)的復(fù)雜度也會隨著變高。同時階數(shù)越高意味著用戶需要在屏幕上注視更多的點,長時間停留在該階段,進而會影響系統(tǒng)使用的便捷性。因而需要保證注視點的精準(zhǔn)度在可正常使用的情況下,盡可能地降低由于校準(zhǔn)點而帶來的不便。
(2)獲取有效的瞳孔中心位置。對單個校準(zhǔn)點注視期間所采集到的瞳孔中心位置進行求解均值和方差操作,篩選掉異常點,求得七組瞳孔中心位置。
(3)多項式系數(shù)求解。由于注視點與瞳孔中心之間呈現(xiàn)非線性關(guān)系,所以擬合出的多項式至少是二階的。擬合的多項式如式(1)和式(2)所示。
其中,(Px,Py)指屏幕上預(yù)先設(shè)定好的七個注視點位置,(x,y)指人眼圖像中的瞳孔中心位置,cx0,...,cx6以及cy0,…,cy6是待定的未知系數(shù),需根據(jù)不同的(Px,Py)和(x,y)建立的方程組來確定。每組(Px,Py)和(x,y)可確立兩個方程,故至少需要在屏幕上設(shè)立七個需要注視的校準(zhǔn)點,才能確定cx0,…,cx6以及cy0,…,cy6的值。
為了確保多項式映射關(guān)系與實際注視點關(guān)系的準(zhǔn)確率,選取的校準(zhǔn)點應(yīng)該盡可能的分布在顯示屏的邊緣。當(dāng)多項式的系數(shù)確定之后,便可以計算出不同的瞳孔中心位置依次對應(yīng)的注視點位置。
校準(zhǔn)對應(yīng)流程如圖9 所示。
圖9 校準(zhǔn)流程
系統(tǒng)經(jīng)過多次測試,運行良好,實現(xiàn)了完整的工作流程。IVI-GAZE-CORE 的瞳孔檢測圖如圖10 所示。
圖10 瞳孔檢測圖
在Unity 中運行校準(zhǔn)場景。場景中有一個校準(zhǔn)按鈕,點擊校準(zhǔn)按鈕,開始校準(zhǔn)。初始場景如圖11 所示。啟動IVI-GAZE-CORE,檢測瞳孔位置,同時場景中會出現(xiàn)一個小球,小球會依次在屏幕左上角、右上角、右下角、左下角、正中心、正下方、正上方這7 個位置閃動,提示用戶注視小球,小球的位置則可視為注視點的位置。小球的七個位置示意圖如圖12 所示。
當(dāng)用戶注視小球時,IVI-GAZE-CORE 會采集瞳孔中心的位置數(shù)據(jù),采集完成后,會利用通信模塊通知校準(zhǔn)場景,使小球移動下一次的位置,開始下一次采集。7 次采集完成后,IVI-GAZE-CORE 通過采集的7 組用戶瞳孔中心的位置和小球的屏幕位置數(shù)據(jù),計算出用戶瞳孔中心的位置和小球的屏幕位置的映射多項式,至此校準(zhǔn)完成。
校準(zhǔn)完成后,點擊測試按鈕,根據(jù)已算出的映射多項式,當(dāng)用戶的注視點位置發(fā)生變化時,小球的屏幕位置也會跟隨其變化,如圖13 所示。
圖11 初始場景
圖12 小球七個位置示意圖
圖13 校準(zhǔn)完成后小球隨著瞳孔位置移動
開發(fā)IVI-GAZE 系統(tǒng)主要是為了促進眼動跟蹤技術(shù)在智能頭顯上的應(yīng)用,使其可以運用于各大頭顯廠商生產(chǎn)的智能頭顯設(shè)備上,降低智能頭顯成本,增加智能頭顯用戶的體驗性,方便科研人員利用用戶的注視點信息進行渲染、交互或分析等方面的研究。
截止到目前,我們已經(jīng)利用IVI-GAZE 系統(tǒng)獲得的注視點信息,取得了注視點渲染方面的相關(guān)研究成果[14],并且已經(jīng)將該系統(tǒng)試運行于國內(nèi)某著名智能頭顯生產(chǎn)商。
雖然IVI-GAZE 系統(tǒng)現(xiàn)在已經(jīng)取得了很好的運用,但是還有一些不足之處。例如IVI-GAZE-CORE的檢測模塊在采集瞳孔中心數(shù)據(jù)時,由于人眨眼的特性,導(dǎo)致IVI-GAZE 系統(tǒng)的魯棒性較差。所以我們下一步的工作重點將在眨眼情況下系統(tǒng)的魯棒性問題上展開研究。