【摘要】 本文通過對運動捕捉技術的研究,提出一種在Kinect和After Effects之間傳輸數據的方法,繼而開發出小型運動捕捉系統Kinect-After Effects Mocap Output System。該運動捕捉系統可以實現運動捕捉小型化和消費化。
【關鍵詞】 Kinect After Effects 運動捕捉
一、前言
目前市面上的運動捕捉系統大多昂貴,學習成本和使用費用過高,這限制了很多普通的視頻工作者。2010年微軟公司發布了體感設備Kinect,因其低廉的價格以及較為精確的深度傳感,更適合動畫制作中的運動捕捉。本文選擇了After Effects(下文簡稱為AE)這個廣泛使用且強大的特效制作軟件進行研究。雖然國外的KinectToPin軟件可以通過Kinect進行運動捕捉后導入AE驅動2D木偶,但由于采用OpenNI架構,該運動捕捉系統仍存在很多問題:一,OpenNI架構對Kinect的全身追蹤缺乏頭、雙手、腳、鎖骨五個骨骼點,控制模型不夠精確。二,關節閉塞未被估算,骨骼的關節處不夠平滑。三,安裝繁瑣,需單獨安裝NITE。四,目前只支持單人動作捕捉。本文重點研究Kinect與AE的接口文件。
二、Kinect骨骼流及AE關鍵幀動畫
2.1 Kinect骨骼數據點輸出原理
該研究基于Kinect SDK,核心思想是NUI,即自然人機交互。NUI API用于處理彩色圖像流、深度圖像數據、骨骼跟蹤管理等,其中骨骼跟蹤是其中的重要部分,它采用了景深圖像處理技術,使用如矩陣變換,機器學習等復雜的算法來確定人體各關節的坐標。使用Kinect SDK可以識別出全身完整20個骨骼,依次是:左腳、腳踝、膝蓋、臀部,右腳、腳踝、膝蓋、臀部,左手、手腕、肘關節、肩,右手、手腕、肘關節、肩,頭部,肩部中央,脊柱中段,臀部中央。
2.2 AE中的關鍵幀動畫
在AE中,制作動畫主要使用關鍵幀技術配合動畫曲線編輯器或表達式完成。關鍵幀動畫就是通過調節關鍵幀參數制作出的動畫效果。在AE的關鍵幀動畫中,至少需要兩個關鍵幀才能產生作用,中間的動態則是由計算機插值計算得出的。木偶工具是AE推出的圖層扭曲新方法基于關鍵幀動畫,可以流暢地制作角色動畫。該研究使用木偶工具,在研究前需要導入木偶圖片,依照Kinect可識別的骨骼順序手動創造20個關鍵點,這些點將會與來自Kinect的數據進行匹配。
三、After Effects關鍵幀文件結構研究
運動捕捉系統中Kinect與AE進行通訊依靠的是AE關鍵幀文件。這是一個txt格式的文檔,其形式并未被列入AE SDK中。我通過對AE內置的Mocha插件進行研究,分析出關鍵幀文件結構,包括文件頭、數據以及文件結尾聲明。其中文件頭和文件結尾聲明都是固定字符串,數據部分則包含每一個關鍵點的不同關鍵幀。
3.1數據結構

這樣的結構一共存在20組,分別代表木偶身上的20個骨骼點,用Pin #1、Pin #2……進行表示。每組數據的第一行和第二行標明了需要修改的參數值,依次按照第一、二行的順序進行搜尋,即可尋找到修改的參數值。
Frame是幀數,分別從第0幀開始,對骨骼點的X、Y坐標進行記錄。這里的X、Y坐標是經過原先三維坐標運算得來的,包含三維信息。Kinect每隔1/30秒會記錄一次骨骼點坐標,即每30幀為1秒的畫面。
3.2骨骼點文件結構轉換算法
用于通訊的txt文件中的關鍵信息分為20個單元,每個單元是一個骨骼點在多幀下點的坐標集合。而實際Kinect記錄的數據是按每幀記錄,這導致文件數據是按時間排列,而非關鍵點。因此需要暫存文件作為中轉站,然后執行格式轉換算法。暫存文件按照順序一次記錄每1/30秒的20個骨骼點各自的位置坐標,通過循環記錄坐標數據。暫存完成后執行以下算法:首先,逐行讀取暫存文件,將其保存到數組中。然后對數組中的每一行進行重新排列,將每第n行、第(n+20)行、第(n+40)行……(n取值0到19)提取出來排列在一起。這樣就可以將暫存文件轉換到AE可識別文件格式。
四、結論
通過對Kinect和AE的傳輸文件研究,可以將Kinect捕捉到的骨骼點運用到影視制作中,目前我根據該研究成果制作了Kinect運動捕捉界面以及AE插件,可實現角色動畫的制作。程序在后期的改進中,可以使用微軟于2014年底推出的新款Kinect提高運動捕捉的精度,使動作更加平滑。
參 考 文 獻
[1] 余濤.Kinect應用開發實戰——用最自然的方式與機器對話[M].機械工業出版社, 2014.5.
[2] Rob Miles.Start Here. Learn the Kinect API[M].Microsoft Press,2012
[3] 王森. Kinect體感程序設計入門[M].科學出版社,2015.1.
[4] 吉家進,樊寧寧.After Effects CS6技術大全[M].人民郵電出版社,2014.9