2011年2月8日

眼動儀DIY-webcam的應用

這篇是歷史回憶文,因為已經是一年前做的事情了。

念了研究所,終於體會到為什麼人家說,念研究所很容易發展出第二專長,只要是和論文無關的事情,都會盡力去做。

我做的是利用多媒體學習理論來設計數位教材,裏面有個關鍵就是如何去導引學習者的注意力。那時候我老闆說了一句:「如果可以知道學習者在看教材的時候,眼睛是注意哪裡就好了,這樣就可以進行教材評析啊」,結果那句話就讓我瘋狂地玩了好幾個禮拜的DIY眼動儀了。

其實當初老闆並沒有要我去做眼動儀,只是前一年的學姊有利用其他研究室的眼動儀來做實驗,所以老闆就隨口提了一下。不過因為我自己很喜歡做東西,所以當場就開始搜尋有沒有辦法自己做眼動儀。

我一開始就想,這種東西應該是有辦法自己弄出來的啊,而且應該有免費的解決方案才是。

之前在玩紅外線照瞳孔的時候,就蒐集過這樣的資料。紅外線照眼睛的時候,因為瞳孔不會反射光線,所以會變成黑黑一個圓,只要用攝影機拍眼睛,然後用程式去運算那個圓的形變,就可以換算出瞳孔到底在看哪裡。

後來果然讓我找到幾個open source的軟體,第1個是openeyes
http://thirtysixthspan.com/openEyes/
有linux版的和windows版的。它是用兩台攝影機同時拍瞳孔和所見影像,然後合成出新的影片

範例影片在下面這個連結可以看得到
http://joelclemens.colinr.ca/eyetrack/index.html

雖然是open source的軟體,但其實是用matlab開發的。本來我以為這會是最佳的解決方案,因為學校有買matlab,可是後來遇到大問題,因為有matlab,可是卻沒有買裡頭的image processing toolbox,所以後續的處理分析就沒辦法繼續做了。所以這個方案算是無解了。

後來我繼續到處尋找,終於找到一個了,叫作 ITU Gaze Tracker,
http://www.gazegroup.org/downloads/23-gazetracker

它的示範影片在
--

--
看起來似乎可以符合我的需求,反正我的目的就是偵測眼睛在看哪裡。

軟體找到了,接下來是硬體的問題。這是他們團隊建議的使用方法一,用攝影機zoom in去拍眼睛。


第2種比較平價,用webcam夾在冰棒棍上,然後用牙齒咬著。第2種的穩定度比第1種要好很多,因為第1種,頭如果移動,定位就會失準,而第2種的好處是,除非你的嘴巴跟頭沒有連在一起,不然一定可以讓攝影機和頭同步移動。


但是,問題總是出在但是啊,我在試做第2種的時候,一直出現一個問題。當我張開嘴巴咬著冰棒棍的時候,我的口水就會一直流到桌面上,這對一個專業的研究生來說,是絕對不允許的。

所以後來我就想,乾脆把攝影機用鋁線綁在眼鏡上吧。於是我就開始東市買駿馬、西市買鞍韉..。阿不是,我是網路買webcam,五金行買鋁線,賣場買老花眼鏡,最後就組出一個有攝影機架在眼鏡框上的眼動儀啦。用起來是很順啦,不過因為攝影機很重,所以掛得耳朵很痛啊。

眼動儀 gazetracker


硬體軟體看似解決了,可是問題還是在。當初ITU釋出的版本還沒有辦法把觀看的座標輸出成文字檔,不過還在開發的版本是可以的

(他們正在開發的版本在這邊 https://gazetrackinglib.svn.sourceforge.net/svnroot/gazetrackinglib)

看到討論區得知他們的軟體是用C#寫的,雖然我從沒學過C#,不過反正所有的程式語言都差不多那個樣,重頭寫過我是不會,不過東貼西補的修改我倒是會。後來我就用Visual Studio 去編譯,除了本來的文字檔之外,我還多加了一段擷取螢幕畫面的代碼。

它的文字檔是像這樣,各欄定義為image number, time, gaze.x, gaze.y
================================================
4198    63400078647704  827.291304495819        600.626059368345
4199    63400078647737  826.766247764947        599.070355364438
4200    63400078647768  825.579816713179        597.721733543993
4201    63400078647800  824.119068723257        596.863445669061
4202    63400078647844  823.038358342888        595.810084781712
4204    63400078647912  847.734370258511        640.623526389456
4205    63400078647938  847.678532210462        654.482497759564
================================================

有了螢幕擷取的畫面還有凝視座標的文字檔之後,我後來又東貼西補的用C#寫了一個小程式,可以把一個小圖示根據座標貼到螢幕的圖片上,然後我再把這些圖片做成影片。看我寫得這麼複雜,大概也看不懂我做了什麼,總之我就是做了這樣的影片。
--

--
透過這些自製的軟硬體,終於達成我的目標了:監測使用者在看哪裡!雖然這個東西在商品化的眼動儀中就可以達成了,可是他們那種要數萬元以上,我這個只要幾百元就可以了。

花了好一段時間弄了這個東西,到底我有沒有把眼動儀放入我的研究呢?答案是沒有。雖然看起來是白忙一場,但是我很喜歡這種遇到問題,一層一層去找出解決方法的過程,而且至少我有了一個眼動儀啦。

一個普通平凡的家庭要個眼動儀能做什麼呢?
ITU GazeGroup還做了一個很棒的軟體-EyeTube啊。光靠眼睛盯著螢幕上的Youtube選單,就可以看影片啦,將來我萬一全身癱瘓,只剩下眼睛能動的時候,至少還有這個東西可以娛樂。如果不看youtube,他們也有做一個軟體GazeTalk  ,可以用眼球凝視來打字、寫信。

除了看影片,打字以外,還可以做些什麼呢?

眼睛還可以做畫!一個非營利組織的基金會Not Impossible Foundation 做了這樣一個計畫-The EyeWriter project


他們的一個藝術家朋友Tony,被診斷出有ALS(漸凍人),全身癱瘓只剩下眼睛能移動,於是他們用了幾個open source的軟體,幫助他們的朋友即使躺在床上,也能夠創作藝術。

--

--

身 體有障礙的人,很需要高科技輔具來協助他們與外界溝通,但如果這些科技只能搭配高價的醫療商品,那麼一般人怎麼可能利用呢?還好這世界上有很多好人,他們 很願意貢獻自己的學術研究,釋出免費、開放原始碼的軟體,幫助這世界上有需要的人,就像是ITU做的那些靠眼睛打字、看影片的軟體,或是Not Impossible Foundation的Eye writer。

除了眼動儀以外,還有哪些低價但是高科技的輔具呢?如果我沒有了手,我還可能用電腦嗎?其實不蠻各位,我常常訓練自己用腳開門、撿東西,不過就是沒辦法用腳打電腦。

世界上就是很多好心人,波士頓學院(Boston College)的學者們,就設計出這樣的軟體Camera Mouse,只要有webcam,不用手,只要移動頭,就能夠操作電腦,而且這套軟體也是可以免費下載使用的。
--

--

既然這篇文章講的都是webcam的應用,那就再來一點吧,用webcam 來玩遊戲。很出名的體感電玩 Kinect,其實也有平價版本,只要用一般的webcam就可以那種效果了。
在這個網站 http://webcamgames.sky.com/  你要用身體在webcam前做動作,你就可以玩游泳、跑步、推球各式各樣的遊戲。

當初發明webcam的人,應該沒想到這個小東西會有這麼多的應用吧!