2014年8月21日

平價高速攝影Playstation EYE

上週去台大找Scimage的江宏仁老師,聊天的過程中,他說到他會給他研究室的新進學生兩個禮物,一個是Arduino,另一個則是 PS Eye。當時講到PS Eye的時候,我忍不住「蛤」了一下,因為根本不知道那是什麼,江老師再細說,才知道原來是個Webcam。





PS Eye全名是Playstation EYE 啊Webcam不是隨便都可以用嗎?幹嘛專講這台Playstation EYE 哩,原來這台可以作高速攝影啊,意思就是可以拍出慢動作的影片,跟我們平常所說的縮時攝影,剛好是兩個不同的方向。

縮時攝影是好幾分鐘拍一張,就可以把物體或自然狀態的長時間變化縮成短時間,例如一分鐘看完一天的雲流動。高速攝影則是在一秒鐘拍攝好多張,這樣就可以把短時間的快速變化拉長時間來看,比方說看到氣球爆破的瞬間變化。

一般相機、webcam拍攝影片的幀數通常都是每秒拍30張(30 fps),意思就是你可以看到1/30秒內的物體變化,而這台PS Eye則是可以達到120 fps,而在特殊驅動程式下,還可以達到187.003fps(那個零頭不知道是怎麼來的)



如果是用數位相機來達到高速攝影的話,目前看來比較平價的是Casio EX-ZR1000,拍攝幀數最高可以到1000fps,這個在張主任的部落格有些影片可以看。如果數位相機本身就可以作到,那webcam的優點在哪呢?

我覺得第一個是價錢優勢,因為才幾百元而已,第二要看你需要的時間解析度是不是要到那麼1000fps那麼細,以PS Eye的187fps來說,已經是可以分辨5毫秒之內的變化,我覺得一般的研究都夠。第三,因為是連接電腦,錄影時間幾乎不受限制,反正就一直錄,一直壓製成AVI。不過還是要注意一下影片大小,像我錄個15秒的影片,大概就到800MB,因為是用AVI來存。

這個PS eye在windows上和Linux上都可以用,不過要能發揮到187fps還是得在windows上頭,linux目前我只能用到120fps。

先來介紹windows上面的驅動程式,以前應該是免費的,不過現在要付費。

---windows的驅動程式與應用程式下載(要錢喔)
http://codelaboratories.com/products/eye/driver/


但是,在某些神秘連結裡頭還是有免費的檔案可以找
---windows的驅動程式與應用程式下載(內文連結找一下喔)
http://profmason.com/?p=2224


Linux的就是寫給我自己用的,驅動程式要這樣安裝
http://wiki.nuigroup.com/PS3_Eye_on_Linux



拍完之後,如果是要作實驗分析,可以用Tracker這軟體來作,就像我之前貼的幾篇文,《用tracker追蹤綠豆向光性》、《用tracker分析植物生長動態

如果是播放的話,我用了VLC發現,雖然是錄187fps,但播放時還是用30fps來播,看不到慢動作的樣子,所以後來找了一會,發現用Mplayer播放,可以有慢動作的樣子。

如果把187fps的影片用軟體轉成30fps,直接生成慢動作的影片的話,這樣不管用什麼軟體播都可以慢動作了。我發現可以用用VirtualDub轉檔。

開啟檔案後,改一個地方就好,[Video/Frame Rate]改成30,然後[File/Save as AVI...]。我把弄出來的影片上傳到youtube,大家可以看看。








以下兩個影片順便可以看看把硬幣投在不同材質上的反應,一個是軟桌墊,另外一個則是木桌。








用webcam來拍攝還有一個好處,你買兩個webcam就可以作對照攝影,用三個就可以拍XYZ三軸的高速攝影,這樣花錢比較不會心痛。

在前面貼的那個要錢的驅動程式連結中,它還有另外一個要付費的SDK,可以讓使用者在同一台電腦使用多個webcam。我買了那個SDK,結果發現後面還要再買license,還要不少錢。

後來我就乾脆啦,反正家裡還有其他電腦,改成每台電腦裝一個webcam同時拍攝也行。最後再用軟體後製去抓兩部影片來合成。

本來一開始想得很美,先用閃光燈閃幾下,用來讓後製時,兩步影片可以作同步。沒想到這樣作還是有些問題,在前10秒的時候,可能還很同步,可是後面就會越差越多,所以我最後只好擷取一小段比較同步的放出來。





我是用kdenlive去影片轉檔處理的,如果把錄影下的avi放進去處理,都會有點問題,所以我就先用ffmpeg去調慢速度,並且把幀數下降成30fps。

ubutnu用ffmpeg調降速度的方式,請看此連結
https://trac.ffmpeg.org/wiki/How%20to%20speed%20up%20/%20slow%20down%20a%20video

我所下的指令是這樣(速度是調慢6倍,因為187/30=6.23...)
ffmpeg -i input.avi -r 30 -filter:v "setpts=6.0*PTS" output.mp4