kinect for flash新手上路
DESCRIPTION
第八回AS3讀書會-Kinect for flash新手上路投影片TRANSCRIPT
Kinect to Flash新手上路
林克融
關於我
• 林克融(阿邪)
• 台藝大 古蹟藝術修護學系
• 一個不務正業熱血的開始
• 大一開始碰FLASH製作動畫
• 大四為了玩多媒體互動而開始研究AS3。
• 雲科大 設計運算所
E-mail : [email protected] Web : http://blog.roodo.com/sayaku 或google sayaku or 阿邪
Kinect發音?啃奶?
• 「 Kinect 」為 kinetics (動力學)加上 connection(連接)兩字所自創的新詞彙,讀音為ki-nect(/kɪn‘ɛkt/),並非con-nect(/kən'ɛkt/)。
參考資料:http://zh.wikipedia.org/wiki/Kinect
Kinect是什麼?
Kinect構造
圖片出處: http://www.techbang.com.tw/posts/2936-get-to-know-how-it-works-kinect
感應器
• 彩色和深度感應鏡頭
• 陣列式麥克風
• 輔助感應傾斜驅動馬達
視野角度
• 水平視野:57度
• 垂直視野:43度
• 實體傾斜範圍:± 27度
• 深度感應器範圍:1.2m – 3.5m
資料串流
• 深度感應器:320×240 16-bit 30 fps
• 彩色攝影機:640×480 32-bit 30 fps
骨架追蹤系統
• 同時辨識6人,包含2人的動作追蹤
• 每人能追蹤20個點
可以做什麼??
怎麼連接到電腦?
• OpenKinect的libfreenect
• OpenNI+SensorKinect
• Kinect SDK(官方正式版)
驅動程式
使用OpenNI Framework
什麼是OpenNI ?
OpenNI
OpenNI=Open Natural Interaction開放式自然互動
資料來源: http://kheresy.wordpress.com/2011/01/19/openni_1st/
• OpenNI 基本上是一個跨平台的「自然互動」(Natural Interaction) 開放原始碼架構,提供了一組標準的 API 來針對不同的裝置、中介軟體來做操作。
資料來源: http://viml.nchc.org.tw/blog/paper_info.php?CLASS_ID=1&SUB_ID=6&PAPER_ID=212
圖片來源: http://kheresy.wordpress.com/2011/01/19/openni_1st/
怎麼連接到FLASH ?
Socket server + AS3 library
• as3Kinect
• Jazztures
• flKinect(Mac OS only)
前置作業
下載可以執行以 Visual C++ 開發的應用程式
• Microsoft visual c++ 2010 redistributable package
• http://www.microsoft.com/downloads/zh-tw/details.aspx?FamilyID=A7B7A05E-6DE6-4D3A-A423-37BF0912DB84
• OpenNI :OpenNI Framework
http://openni.org/
• SensorKinect : 支援OpenNI的Kinect驅動程式他是基於 PrimeSense 官方的版本、專門針對 Kinect 修改出來的;算是 OpenNI 的一部分,要先安裝 OpenNI 後才可安裝。
https://github.com/avin2/SensorKinect
NITE
• 由 PrimeSense 提供的 OpenNI 的中介軟體,負責分析 Kinect 抓到的資料,轉換為人體骨架、手勢等資料。
• http://www.primesense.com/?p=515
• 授權碼:( 0KOIk2JeIBYClPWVnMoRKn5cdY4= )
參考資料: http://viml.nchc.org.tw/blog/paper_info.php?CLASS_ID=1&SUB_ID=6&PAPER_ID=212
下載as3Kinect
• as3Kinect OpenNI wrapper
http://www.as3kinect.org/download/
as3Kinect
• OpenKinect wrapper
• OpenNI wrapper
• Codelaboratories (NUI) wrapper (不再開發)
OpenNI wrapper
• Single socket
• Depth Camera. (With user detection).
• Skeleton detection
as3Kinect OpenNI wrapper
Demonstration 1
Get Depth
public class GetDepth extends Sprite { private var as3w:as3kinectWrapper; private var _canvas:BitmapData; private var _bmp:Bitmap; public function GetDepth():void { init(); //將要建構的物件初始化 initListener(); //初始化偵聽事件 } private function init():void { as3w = new as3kinectWrapper(); //建構as3kinectWrapper物件 _canvas = new BitmapData(as3kinect.IMG_WIDTH, as3kinect.IMG_HEIGHT, false, 0xFF000000); //先建構一張空白的點陣圖資料好用來儲存深度影像 _bmp = new Bitmap(_canvas); addChild(_bmp); //將圖片加到場景上 }
private function initListener():void { as3w.addEventListener(as3kinectWrapperEvent.ON_DEPTH, got_depth); //偵聽取得深度影像事件,只要每取得一次深度影像就會執行 got_depth函式 this.addEventListener(Event.ENTER_FRAME, onRender); //偵聽ENTER_FRAME不斷去執行 } private function got_depth(e:as3kinectWrapperEvent):void { as3w.byteArrayToBitmapData(e.data, _canvas); /* 功用是將從伺服器傳回來Kinect的深度影像的二進位資訊 * 轉成點陣圖資訊再存到_canvas */ } //不斷更新 private function onRender(e:Event):void { as3w.getDepthBuffer(); //執行從伺服器抓深度資訊回來 }
Demonstration 2
Get Skeleton
• 從伺服器抓回的骨架資訊
• as3w.getSkeleton();
• 偵聽抓回骨架資訊的事件
• as3w.addEventListener(as3kinectWrapperEvent.ON_SKEL, Function);
Thank you !!