20131221 victor gau - kinect 簡介

Preview:

Citation preview

@ MOSUT + Python.Tainan

by Victor Gau

www.victorgau.com

Outline

緣起

什麼是Kinect?

怎麼開發Kinect程式?

Kinect 3D Scanner

New Kinect for Windows

台灣產業的問題

傳統產業的問題:

市場很少有新產品出現,各廠商都沒有擁有無法被取代的技術,也無法建立進入障礙,產品最後進入削價競爭。

政府認為可能的解決方法:

製造業服務化

服務業科技化

服務業國際化

傳統產業特色化

申請計畫的優缺點

優點 構思企業面臨的問題

構思與國內外技術/產品/服務比較

構思技術/產品/服務運用深度與廣度

構思市場所在

企業轉型/創新業務/核心能力

建立企業共識

計畫審查免費顧問諮詢

獲取資金挹注,分散風險

政府新聞稿,提升公司形象

缺點 降低研發的彈性

降低研發的時效性

洩密的風險

需花額外的時間在計畫文件上

政府計畫

CITD

主辦單位:經濟部工業局

補助金額:最高200萬元。

SIIR (以前叫做ASSTD)

主辦單位:經濟部商業司

補助金額:最高200萬元。

SBIR (中央型)

主辦單位:經濟部技術處

補助金額:每年補助最高不超過500萬元。

CITD概略的時程

2013/01/25: 遞出計畫申請書

2013/03/03: 至工業局簡報

2013/03/26: 獲得政府補助

2013/04/02: 簽約說明會

2013/04/09: 繳交修正版計畫書

2013/04/16: 委員復核通過

2013/04/19: 正式簽約執行計畫

2013/05/18: 簽約補件完畢

2013/07/30: 期中查訪說明會

2013/08/09: 繳交期中報告

CITD概略的時程

2013/09/02: 期中審查

2013/09/07: 繳交修正版期中報告

2013/09/11: 期中審查複核通過

2013/10/04: 申請計畫變更

2013/10/09: 計畫變更通過

2013/10/22: 結案說明會

2013/10/30: 繳交期末報告

2013/11/11: 結案審查

2013/12/10: 全年度資料彙整膠裝

BIFMA的辦公座椅參考尺寸

381 ~ 505.46 mm

座椅高度分析

K

K: Knee Height

B: Chair Base Height

M: Mechanism Height

T: Seat Thickness

X: Taper Length

Y: Length Below Taper

L: Extended Length

C: Stroke

一些有名的人體工學椅

公司名稱 座椅名稱 推出時間 座椅高度 備註

Steelcase Sensor 1986 16”~21” (406.4~533.4mm)

耗時四年,耗費200萬美金。

Herman Miller Aeron 1994

A: 14 3/8”~19 1/6” (365.1~486.8mm) B, C: 15”~20 7/8” (381.0~530.2mm)

1980年代末期開始研發,1991年發表,1994年正式推出。

Herman Miller Embody 2008 16”~20.5” (406.4~520.7mm) 耗時六年研發。

Kokuyo Agata 2001 435-525mm

Wilkhahn FS Line 1984 420-530mm 耗時多年研究。

Wilkhahn On 2010 400-520mm 耗時六年研發。

台灣及美國使用者膝蓋高度分布

Data analysis using Python + NumPy + MatPlotLib

Sensor Chair 高度分析

(a) without shoes (b) with shoes (3cm)

本公司今年度CITD內容

可鎖定氣壓棒

互動式產品服務系統

利用Kinect來掃描人體尺寸

比對辦公座椅的尺寸,幫使用者篩選符合其身材之辦公座椅。

(a) 標準型氣壓棒解剖圖 (b) 不可旋轉氣壓棒示意圖

可鎖定氣壓棒

+

“身體就是控制器”

Kinect Sensor有兩種

Kinect for XBOX (11/4/2010)

注意:XBOX Bundle裡面的Kinect,並沒有包含電源供應線。因為Kinect在跟XBOX連接的時候,不需要電源供應線。(沒有電源供應線無法在PC上正常驅動。)

Kinect for Windows (2/1/2012)

Kinect 可以做什麼?

體感遊戲

醫療復健

遠端控制

試衣鏡

3D Scanner

Kinect 可以擷取那些資訊?

Microphone Array (麥克風陣列) (聲音)

Color Image (彩色影像)

Depth Image (深度影像)

Skeleton Tracking (人體骨架追蹤)

Face Tracking (人臉追蹤)

KINECT的結構

深度影像運作原理(PrimeSense)

IR Image

Depth Image

Kinect的偵測範圍

Kinect 的視角 & 骨架追蹤

Kinect的骨架追蹤

SDK的選擇

Kinect for Windows SDK 微軟官方SDK

只能用在Windows平台

可以使用C#, C/C++, Python等語言開發

OpenNI (Open Natural Interaction) PrimeSense公司發起 (www.primesense.com)

可以使用在Mac OS, Linux, 跟 Windows

僅能使用C/C++開發

OpenKinect Johnny Chung Lee發起的計畫。

如果使用Microsoft的解決方案

安裝Kinect for Windows SDK

安裝Developers’ Toolkit

豐富的範例

選擇使用的語言:C++, C#, Python

如果是使用Python需要安裝PyKinect

如何連結Kinect?

加入Microsoft.Kinect組件

在專案的參考(Reference)裡面加入Microsoft.Kinect.dll

加入Microsoft.Kinect命名空間

“using Microsoft.Kinect;”

從KinectSensors裡面存取預設的Kinect

Sensor。

Console程式概略架構

using Microsoft.Kinect;

static void Main(string[] args)

{

// 取得預設的Kinect Sensor

KinectSensor sensor = KinectSensor.KinectSensors[0];

// 啟動Kinect Sensor

sensor.Start();

// 填上自己的程式,譬如說將Kinect Sensor的角度歸位。

sensor.ElevationAngle = 0;

// 關閉Kinect Sensor

sensor.Stop();

}

視窗程式概略架構(WPF) public MainWindow()

{

InitializeComponent();

Loaded += Window_Loaded;

Unloaded += Window_Unloaded;

}

private void Window_Loaded(object sender, RoutedEventArgs e)

{

sensor = KinectSensor.KinectSensors[0];

if (sensor != null)

{

sensor.ColorFrameReady += Sensor_ColorFrameReady;

sensor.ColorStream.Enable();

sensor.Start();

}

}

視窗程式概略架構(WPF) void Window_Unloaded(object sender, RoutedEventArgs e)

{

if (sensor != null)

{

sensor.ColorStream.Disable();

sensor.Stop();

sensor.ColorFrameReady -= Sensor_ColorFrameReady;

}

}

類似的使用模式

直接取得相關多媒體資料

ColorStream

DepthStream

SkeletonStream

使用EventHandler

ColorFrameReady

DepthFrameReady

SkeletonFrameReady

ex: sensor.ColorStream.OpenNextFrame(0)

骨架追蹤 (Skeleton Tracking)

Skeleton Tracking Code Snippet void Sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)

{

using (var frame = e.OpenSkeletonFrame())

{

if (frame != null)

{

Skeleton[] skeletons = new Skeleton[frame.SkeletonArrayLength];

frame.CopySkeletonDataTo(skeletons);

var skeleton = skeletons[0];

if (skeleton != null)

{

var head = skeleton.Joints[JointType.Head];

var rightHand = skeleton.Joints[JointType.HandRight];

var shoulderCenter = skeleton.Joints[JointType.ShoulderCenter];

var hipRight = skeleton.Joints[JointType.HipRight];

var shoulderRight = skeleton.Joints[JointType.ShoulderRight];

}

}

}

ReconstructMe

SKANect

Kinect Fusion

深度影像 IR影像

骨架追蹤 肢體旋轉方向追蹤

肌肉受力分析 心跳偵測

臉部表情分析 多人骨架追蹤