OpenNI 人體骨架的網頁方案:webNI

Heresy 自己玩 OpenNI、從 OpenNI 1.x 開始、到現在的 2.x,算是玩滿久的了~不過由於主要是工作上在用,所以在公開的東西的部分,除了課程教材的範例程式(OpenNI 1OpenNI 2)外,似乎就只有之前的 DxOpenNI for OpenNI 2 了。而 Heresy 自己也一直有想要寫一些可以公開的程式,所以就弄出了這個「webNI」。

webNI 基本上的概念,大致上是:

建立一個 webNI Server,和網頁透過 HTML5 的 WebSocket 這個技術(維基百科)來連線、存取 OpenNI、NiTE 所分析的出來的人體骨架;如此一來,網頁上就也可以使用 Microsoft Kinect 或 ASUS Xtion 這類感應器的功能了。

閱讀更多»

廣告

OpenNI 2 & NiTE 2 課程投影片與範例

在去年,Heresy 曾經在幾個地方開過 OpenNI 1 的課程,後來也有將自己編製的投影片與範例程式放出來,有興趣的可以參考《3D 體感應用研習工作坊 課程投影片與範例程式》這篇文章。

而在去年年底,OpenNI 推出 2.0 版後,Heresy 除了開始研究、並寫部落格文章外,一樣也有在進行教材的規劃。而目前雖然還沒有舉辦過公開的課程,不過實際上教材已經算是準備到一個段落、並有在兩所大學的課程使用了。

目前 Heresy 把投影片和範例程式的檔案都放在:

https://1drv.ms/f/s!Al8B-ey4Dwfg7X_yCGA9ixuBmtDB

如果有需要的話,應該可以參考看看了~基本上,因為教材的部分大多都是比部落格文章晚寫的,所以理論上會更完整、更正確。 :p

閱讀更多»

OpenNI 2 的資料錄製與重播

基本上,之前的文章裡,Heresy 已經大致把 OpenNI 2 的使用都講過了。而這一篇,則是來講一下,怎麼透過 OpenNI 2.x 的介面,來把資料錄製下來、之後再拿來使用。

基本上,OpenNI 的資料的錄製,主要是可以把原始的資料,例如深度影像、彩色影像,以 OpenNI 自己定義的檔案格式、ONI 的形式儲存下來,方便之後再使用。而使用的時候,主要是用來給 middleware library 用來分析,方便用來偵錯、開發程式,避免在開發階段要不停地走到感應器前、做出同樣的動作。

在錄製的部分,它的使用方法,大致是透過 OpenNI 2 提供的 Recorder 這個類別(官方文件),來做錄製的控制。它的使用方法,基本上如下:

閱讀更多»

NiTE 2 的手部追蹤

這篇是延續前一篇的《NiTE 2 的手勢偵測》,繼續來講 NiTE 2 所提供的手部追蹤功能。NiTE 2 所提供的手部追蹤功能,和手勢偵測一樣,是由 HandTracker 提供的,而在使用上則是和在 OpenNI 1.x 的時候(參考)一樣,都是要先偵測到手的位置,然後再針對這個位置進行追蹤;所以一般在使用上,大多是搭配手勢偵測,找到手的位置後,再開始追蹤。

而寫成程式的話,基本上就會是像下面這樣子:

閱讀更多»

NiTE 2 的手勢偵測

在之前的文章,已經針對 NiTE 2 的人體骨架追蹤,以及姿勢的偵測,以範例的方法做了說明。而接下來這篇,則是來說明 NiTE 2 提供的手勢偵測的使用方法。

在 NiTE 2 裡,手勢偵測的功能是由 HandTracker 這個類別提供的;而除了手勢偵測之外,HandTracker 另一個重要的功能,就是手部位置的追蹤。他的基本使用概念,和人體骨架追蹤、姿勢偵測的 UserTracker 基本上是相似的。

而由於手部位置的偵測,一般來說是要搭配手勢偵測使用的,所以在這邊 Heresy 就先針對手勢偵測的部分,以簡單的範例來做說明。

閱讀更多»

NiTE 2 的姿勢偵測

之前的文章裡,已經介紹過 NiTE 2 在 OpenNI 2 架構下的人體骨架分析的方法。而接下來這一篇,則是來介紹一下,怎樣來使用 NiTE 2 提供的姿勢偵測功能。

NiTE 2 的姿勢偵測的功能,和人體骨架分析一樣,是由 UserTracker 提供的;在目前的版本裡,只有提供兩種姿勢,一個是「POSE_PSI」、一個則是「POSE_CROSS_HAND」。而和在 OpenNI 1.x 的時代一樣,NiTE 2 依然是沒辦法提供自訂姿勢的偵測,算是有點可惜的。

而所謂的「PSI」姿勢,實際上就是如同右圖的姿勢,這個姿勢在 OpenNI 1 + NiTE 1 的時候,是用來做骨架校正的標準姿勢(參考);由於後來的 NiTE 有提供不用校正姿勢的骨架追蹤了,所以就用不太到了。也由於他最早是用來做骨架校正的姿勢,使用頻率非常高,所以要偵測到這個姿勢相當地簡單,只要擺個差不多的姿勢,就可以觸發到了~

閱讀更多»

使用 OpenCV 畫出 NiTE2 的人體骨架

這篇基本上是《NiTE2 的人體骨架追蹤》的延伸,算是提供一個以 OpenCV 來做顯示的完整地 NiTE 2 + OpenNI 2 的人體骨架追蹤範例;另外,他也算是從《用 OpenCV 畫出 OpenNI 2 的深度、彩色影像》延伸出來的範例,如果還沒看過這兩篇文章的話,建議先看一下。

而這個範例程式所做的事,主要就是透過 OpenNI 2 的 VideoStream 來讀取彩色影像當作背景,並透過 NiTE 2 的 UserTracker 來讀取人體骨架關節點的資訊,並以圓和線、畫出來。最後的結果,應該會像右圖這樣子。

下面就是這個程式的主要架構:

閱讀更多»

NiTE2 的人體骨架追蹤

在前一篇《NiTE2 基本使用》裡,已經大致講了在 OpenNI 2 的架構下,NiTE2 的基本使用方法。不過,在那篇文章裡,主要是在講整個 NiTE 的架構和使用概念,並沒有講到細節;尤其一般人會使用 NiTE,大多都是為了去追蹤人的骨架,而這點在上一篇文章中,並沒有提到。所以這一篇,就來補充這一部分,來針對 NiTE 2 的 UserTracker 來做比較完整的說明~

在 OpenNI 1.x 的時候,OpenNI 是採取了一種比較複雜的 callback 事件,來做為人體骨架的辨識、追蹤的開發模式(參考),在使用上其實相對繁瑣;而在 OpenNI 2 + NiTE 2 的架構,要進行人體骨架的辨識、追蹤,算是相對簡單不少了~下面就是一段簡單的讀取頭部位置的範例程式:

閱讀更多»

NiTE2 基本使用

NiTE(官網)是 PrimeSense 針對 OpenNI 這個深度感應器程式開發 Framework 所推出的一套 middleware,他主要的功能,包括了使用者的偵測、人體骨架的分析與追蹤、手部的追蹤、姿勢手勢辨識等等。

在 OpenNI 1.x 的時候,雖然 OpenNI 是提供了一個開放的框架,讓開發者自行根據規格來實作各自的 middleware;但是實際上,到最後還是只有 NiTE 這一套而已…或許是這個原因,在 OpenNI 2 的新架構下,OpenNI 的框架不再去定義 middleware 的介面和功能,而是把本來屬於 plug-in 的 middleware,改成讓使用者直接去使用的函式庫的形式。

在這種模式下,OpenNI 2 的 middleware library 的功能變得更自由,不再被 OpenNI 定義的介面綁死,在開發上也更彈性了~而在 OpenNI 2 發布的同時,也就已經有不少由其他開發者提供的 middleware library 跟著一起上線了(連結)~

閱讀更多»