Home People Research Blog Courses Links Search Download
NCHC

Blog

Blog 最新文章

  1. 提供新版 Edge 的 HoloLens 2 Insider Preview
    2021/01/20 08:55
  2. Facebook Oculus Quest 2 開箱文
    2021/01/13 14:19
  3. GitLab 手動執行 pipeline 的預輸入變數
    2021/01/04 11:14

Blog 最新回應

  1. 謝謝你提供的資訊...
    2021/01/17 17:40
  2. MSVC 也是有在進步的 XD...
    2020/12/24 15:55
  3. “如果不想另外定義一個 struct 的........
    2020/12/24 15:49

Keyword 關鍵字

Java OpenNI2 WebGL VR OpenMP iFlyover Windows MR OpenCV Pandas Boost PHP C++17 Docker MR Oculus Quest 2 svn 資料視覺化 3d print Docker git Kinect HTC Vive Focus 開放資料 Oculus CubeX Vulkan GitLab VR C++14 3D立體 ASUS Xtion OpenXR Python 開放資料 xml OpenNI C++11 C++14 OpenCL HTC Vive Pro Oculus Rift S CUDA Python C++ OpenGL Qt Pandas Valve Index C++20 HoloLens 2 資訊地圖 HTC Vive NiTE2 OpenVR javascript

類別:技術相關 » 技術研究
文章發表|我要回應|RSS訂閱

OpenNI/Kinect 的手部追蹤、處理

OpenNI 搭配 NITE 雖然提供了全身的骨架追蹤功能,但是他並沒有提供針對手部的細部處理,緊緊有提供手部的位置追蹤、以及幾組預設的手勢辨識的能力(參考)。而由於手部動作的分析、尤其是去抓出手指、或是判斷手是否握著,在互動操作上也是相當實用的功能,所以實際上也有不少人在往這方面做研究~

像下面這段影片,就是透過 model-based 的 3D 物件追蹤,來時做出來的手指追蹤,看起來效果算是相當地好!

這個研究的官方網頁是:http://cvrlcode.ics.forth.gr/handtracking/,在上面除了有相當多的影片可以參考系統運作的狀況外;一隻手有 26 個自由度(dergee of freedom)、不需要任何特殊的標誌或手套,也不需要 NITE 提供的追蹤功能。而為了計算效能,需要有支援 nVIDIA CUDA 的顯示卡來做計算;在 Intel Core i7 950 搭配 GeForce GTX 580 的情況下,處理的效能大約可以到達 20FPS。

而雖然沒有提供原始碼,不過也有提供 64 位元版本的展示程式,可以讓使用者下載測試。但是很遺憾的是,Heresy 下載後沒辦法正確執行就是了(錯誤似乎是在 CUDA 程式的部分)。


上面的方法,基本上算是去完整地去找出整個手的架構、進行手指的辨識以及追蹤,算是難度比較高的方法。而相較之下,雖然沒有那麼完整,但是還有一些比較簡易的方法,也可以做到一定程度的效果;像是在網路上,其實就可以找到不少人,把 OpenCV 拿來搭配 OpenNI 的深度資料(參考),進行簡單的手部的處理~像下面這兩段影片,都是類似的概念:

第一段影片是由 Robert Walter 這位網友所提供的,他在說明的地方,有提供 DropBox 的下載連結(ZIP 檔),可以下載原始碼來做測試;而後者則是由 Brandt Westing 這位網友提供的,他有將程式放在 github 上(連結),讓大家可以下載~

不過,Heresy 自己測試的時候,Robert Walter 的程式碼要能正確地在 Visual C 編譯、執行,是需要適度地修改的;而 Brandt Westing 的範例,則是不知道為什麼,可以在 Kinect for Xbox 360 上使用,而不能在 ASUS Xtion Pro Live 上執行…不過基本上,只要可以跑起來,都算可以做簡單的測試的~

實際上,這兩位所提供的範例,都是類似的作法。他們的處理流程,基本上都是:

  1. 使用 User Generator 的 Skeleton Capabiliy 來追蹤人體骨架,並藉此判斷手部的位置。
  2. 根據手部的位置,取鄰近的深度值,抓出手的區域。
  3. 把抓到的手部區域,透過 OpenCV 來找出手的輪廓(contour、文件) ,並簡化輪廓(文件)。
  4. 去找手的輪廓的在幾何上的「凸包」(convex hull、維基百科、OpenCV 文件)、以及凹進去的點(convexity defects、OpenCV 文件)。(不過 Robert Walter 似乎沒有直接用 OpenCV 去找 convexity defects)
  5. 接下來,就可以針對找到的這些點,來做進一步的分析,藉此來判斷手是張開、還是握著了~
    而這兩位基本上都是使用區域面積的比例,來做判斷的。

大致上大概就是這樣了~詳細的實作方法,可以直接參考這兩位所提供的原始碼。

Heresy 自己也有寫類似的程式,不過還沒弄完;等寫好了,再拿來分享吧~現在是希望能不能在更進一步,去分析各隻手指的位置,進而做到更細的控制;不過,還不確定能做到什麼程度就是了。


`
張貼者:heresy於2012/08/23 14:21 下午有12則回應,瀏覽次數:4,327次
lemonlwb 於 2012/09/27 17:09 下午 回應:
你好,你提供的Robert Walter源码下载链接不能连接哦···希望你能发我邮箱分享下···lemonlwb@yahoo.cn十分感谢!
作者作者heresy 於 2012/09/28 09:35 上午 回應:
to lemonlwb
DropBox 的連結應該是可以用的。
如果是被擋掉的話,麻煩請自行翻牆。
shimingD 於 2012/12/03 15:19 下午 回應:
最近也打算做openNI kinect的手部的跟踪和识别,希望有机会可以和作者交流一下。期待您的最新文章!向您学习了~
xiaomaohaizhu 於 2012/12/11 21:20 下午 回應:
您好,我想问下,做Brandt Westing 写的程序的测试时,人体和Kinect的距离有什么限制吗?因为我觉得我测试完的结果有些不对,请指导一下,谢谢啦!
作者作者heresy 於 2012/12/12 08:19 上午 回應:
to xiaomaohaizhu
不知道你是怎樣「不對」?
基本上,這部分的原始碼並不複雜,個人會建議可以試著自己下去看看他怎麼寫的,或許可以判斷出問題是出在哪。
xiaomaohaizhu 於 2012/12/12 09:02 上午 回應:
谢谢您的及时回复,我所说的“不对”就是运行之后并不能找到每个指尖的位置,而且左右手的结果是一样的。
作者作者heresy 於 2012/12/12 14:10 下午 回應:
to xiaomaohaizhu

他所使用的演算法,本來就只是去試著找凸出的端點。
所以如果手指太過靠近,或者不夠凸出,就會無法找到指尖。
DK 於 2013/04/02 21:28 下午 回應:
请问博主Robert Walter中的代码,在Vs2010里总是报 unsigned short near = depth - 100; // near clipping plane
unsigned short far = depth 100; // far clipping plane
error C2513: “unsigned short”: 在“=”前没有声明变量,
还有mask = mask & depthMat > near & depthMat < far;

error C2678: 二进制“>”: 没有找到接受“const cv::Mat”类型的左操作数的运算符(或没有可接受的转换)

怎么样修改才好呢?
DK 於 2013/04/02 21:55 下午 回應:
博主,上一个问题解决了,整个代码没有错了,但是系统报出inline XnStatus SetMapOutputMode(const XnMapOutputMode& OutputMode)
{
return xnSetMapOutputMode(GetHandle(), &OutputMode);
}

[下面的框架可能不正确和/或缺失,没有为 OpenNI.dll 加载符号]

是不是因为版本的原因?
作者作者heresy 於 2013/04/03 08:49 上午 回應:
to DK
抱歉,不確定這段簡體中文的錯誤訊息代表什麼意思。
不過,這個問題是在執行時發生的?如果是的話,建議確定一下 OpenNI 和 Sensor Module 之間的版本是否一致。
DK 於 2013/04/03 12:56 下午 回應:
博主再次打扰了,现在弄好了,原因是我的设备一直指定的是kinect for windows,但是却一直显示的是DepthImage,没有视频中的效果。
roxanne 於 2014/01/12 18:48 下午 回應:
我跟楼上是一样的问题,求问是怎么解决的啊~谢谢~

-- TOP --

我要回應
* 身份  訪客 (暱稱:)
 本篇文章作者 (帳號:密碼:)
* 內容      
很高興 悲傷 震驚 疑惑 大笑 發瘋 傷心
* 留言密碼 (請輸入下方圖片中去除前、後位數的數字,共五碼。)
說明 1. * 表示必填欄位。
2. 不支援HTML Tag。
   

-- TOP --

© Visualization and Interactive Media Laboratory of NCHC, 2007 - 2021, All Rights Reserved. Contact E-mail