強制更換 Kinect 的驅動程式(for OpenNI)

之前 Heresy 已經在《在 WIndows 上安裝 Kinect(含 MMD 使用 Kinect 簡易教學)》和《2012 OpenNI 環境/Kinect 安裝教學》這兩篇文章,大概寫了要怎麼在 Windows 上,安裝 OpenNI 的環境、並且安裝 Kinect 的驅動程式。如果是使用 ASUS 的 Xtion Pro 或 Xtion Pro Live 的話,因為一開始就是為了 OpenNI 而製作的,所以問題應該不大。

不過,對於 Kinect 的用戶來說,看來還是在一些地方,有不少人有碰到同樣的問題。這邊,大概就針對在 OpenNI 環境下使用 Kinect 的常見問題,大概來講一下。

首先,一個常見的問題,是出現在 DLL 檔「無法找到程序輸入點」的問題;例如這篇回應的:

無法找到程序輸入點
?RegisterToNewStreamData@XnDeviceBase@@UEAAIP6AXAEBUXnNewStreamDataEventArgs@@PEAX@Z1AEAPEAX@Z(在動態連結程式庫XnDDK64.dll)

這樣的錯誤訊息,一般來說是由於各個模組之間的版本不一致所造成的。由於 OpenNI 的環境,大致上是需要「OpenNI Framework」、「Middleware(NITE)」、「硬體模組」這三種不同的東西,而這三者之間的版本,又有一定程度的相依性,所以如果不小心、沒有安裝對應的版本的話,就可能會出現如同上述、「無法找到程序輸入點」的問題。這種錯誤訊息通常會關連到特定的 DLL 檔,像以這邊 XnDDK64.dll / XnDDK.dll 就是硬體模組的檔案,所以就代表有很大的機會,是因為硬體模組和 OpenNI Framework 不相容所造成的。

而實際上,如果是使用 ASUS Xtion Pro 系列產品的話,直接安裝官方網站上的 package 版本就可以把所有必要的檔案安裝完了,所以比較不容易發生版本不相容的問題。但是由於 Kinect 的使用者,還需要自行安裝第三方的硬體模組、驅動程式(一般是 SensorKinect),所以發生問題的機會似乎就高了不少…

解決方法呢?很簡單,就是在下載、安裝前,請先確定使用的 SensorKinect 所對應的版本!實際上,在 SensorKinect 的官方頁面的下方,就有顯示「README」這個檔案,在裡面都會顯示出在它不同的版本裡,有哪些變更;最重要的是,他也會顯示哪個版本的 SensorKinect、是使用哪個版本的 OpenNI 和官方 Sensor 模組來修改的!比如說,以最新的 v0.92 和 v0.93 來說,他就是使用 OpenNI 1.5.4.0 和 Sensor 5.1.2.1 來修改的,所以就必須要搭配 unstable 版的 OpenNI 1.5.4.0 來做使用。而如果是要使用 stable 版的 OpenNI 1.5.2.23 的話,則就需要去找對應的版本,在這邊就是上一個版本、SensorKinect v0.91;雖然他是使用 OpenNI 1.5.2.7 和 Sensor 5.1.0.25 來修改的,但是和 OpenNI 1.5.2.23 是相容的。

實際上,SensorKinect 在 GitHub 上也有分 stable 和 unstable 的版本,來對應 OpenNI 官方的 stable 版和 unstable 版,所以不確定的話,只要去選對應的版本應該就可以了。(右圖)

以現在來說,如果要下載 SensorKinect v0.91 的話,只要先切換到 stable 版(連結),再進到 Bin 這個資料夾,就可以找到 v0.91 的檔案(連結)了;而如果要更舊的檔案,就要透過「history」的功能往回找了。


上面所講的問題,是版本間不相容的問題。另外一個很有可能遇到的問題,則是硬體沒有使用 Sensor Kinect 所提供的驅動程式,而去使用 Kinect for Windows SDK 的驅動程式的問題

由於之前微軟並沒有在 Windows 上提供 Kinect 的驅動程式,所以本來的狀況、要就是有安裝驅動程式、或是沒安裝驅動程式兩種狀態。但是隨著 Kinect for Windows SDK 正式版的推出,微軟似乎也針對 Windows 7、有提供 Kinect 驅動程式的線上更新了(Heresy 不是很肯定到底有沒有),所以現在似乎有可能變成,在 Windows 7 的電腦上、第一次接上 Kinect 的時候,系統就會透過線上更新的機制、去下載微軟官方版的驅動程式來用了…

而如果是使用微軟官方版的驅動程式的話,在裝置管理員裡出現一個「Microsoft Kinect」的分類,底下會有各種 Kinect 相關的裝置;以目前的版本來看,如果全部都安裝成功的話,在這個分類下,會有「Microsoft Kinect Audio Array Control」、「Microsoft Kinect Camera」、「Microsoft Kinect Device」、「Microsoft Kinect Secunity Control」這四個裝置。(如右圖,另外在音效裝置的類別裡,也會有一個「Kinect USB Audio」。)

而如果是遇到這種情況的話,在 OpenNI 下,會因為 SensorKinect 的驅動程式沒有正確安裝,所以無法正確連接到 Kinect 進行資料的存取。這個時候,就需要手動、強制去修改這些硬體的驅動程式,把他從微軟版的驅動程式、改成 SensorKinect 的驅動程式了!

強制去修改驅動程式的方法,基本上就是先進到裝置管理員裡,去找到要修改驅動程式的裝置,然後透過滑鼠右鍵選單的「更新驅動程式軟體」來進行;要注意的就是,接下來的動作,全部不能選「自動」的功能,需要全部以手動的方法來指定

操作的細部流程,這邊大概也來列一下:

  1. 進入「裝置管理員」

    要開啟 Windows 裝置管理員的方法其實很多種,Heresy 個人是習慣在「電腦」(就是以前的「我的電腦」)上,按下滑鼠右鍵,然後在右鍵選單裡面,點選「管理」這個項目(右圖)。

    如此一來,就可以開啟 Windows 內建的「電腦管理」的介面,而在左手邊會有樹狀列表,其中在「系統工具」裡的最後一項,就是「裝置管理員」了(可參考上方右圖)。

    另一種方法,就是透過「控制台」,點進「硬體與音效」這個分類後,也可以在「裝置和印表機」下找到「裝置管理員」;透過這個方法,可以單純地開啟「裝置管理員的視窗」。

  2. 開始更換驅動程式

    接下來,就是在裝置管理員裡,找到「Microsoft Kinect」這個群組,以及它下面的裝置。由於目前的 SensorKinect 只有提供影像的擷取功能,所以這邊可以只把「Microsoft Kinect Camera」這個裝置的驅動程式換掉就好,其他的不管它也可以。

    更換的方法基本上就是先選取「Microsoft Kinect Camera」這個裝置,然後在上面點選滑鼠右鍵、選取右鍵選單裡的「更新驅動程式軟體」(右上圖)。

  3. 指定需驅動程式

    接下來,系統會跳出來一個對話框,詢問要動搜尋更新,還是要手動安裝;這時候,需要選取下面「瀏覽電腦上的驅動程式軟體」這個選項,以進行手動指定。

    接下來,他會問驅動程式在哪裡?不過由於 SensorKinect 不是官方認證的驅動程式,所以不要直接在這邊指定,而是要再點選下方的「讓我從電腦上的裝置驅動程式清單中挑選」。

    在接下來的畫面,他會先顯示目前系統中的相容硬體列表,這時候要選取右下方的「從磁片安裝」。

    點選「從磁片安裝」後,會跳出一個對話框,要求指定驅動程式所在的位置;這時候,就要在下方的檔案路徑選取區內,指定 SensorKinect 所提供的驅動程式的所在路徑。

    如果沒有在安裝的時候去修改安裝位置的話,SensorKinect 所提供的驅動程式,預設是會在「C:\Program Files\PrimeSense\SensorKinect\Driver」這個資料夾內,這邊只要指定這個資料夾路徑就可以了。

    接下來,系統應該會列出這份驅動程式針對這個裝置所支援的硬體,在這邊就是「Kinect Camera」這個裝置;選起來之後,點選「下一步」就可以進行安裝了。

    不過,由於 SensorKinect 的驅動程式並沒有送給微軟做認證,所以會跳出一個 Windows 安全性的警告視窗;這個時候請選擇「仍然安裝此驅動程式軟體」。接下來,系統就會開始更新驅動程式了~

  4. 確認更換完成

    當驅動程式更新完成後,裝置管理員裡、本來在「Microsoft Kinect」下的「Microsoft Kinect Camera」這個裝置應該會消失;取而代之的,是會多出一個「PrimeSense」的分類,底下有一個「Kinect Camera」的裝置。如果有正確看到「Kinect Camera」這個裝置的話,基本上就代表驅動程式更換成功了~

基本上,目前 OpenNI 要使用 Kinect,應該也只需要「Kinect Camera」這個裝置,所以整個流程到這邊就可以了。接下來,就可以開啟 OpenNI 的程式,測試看看是否可以正常運作了~

而如果有需要的話,也可以以同樣的流程、來更換其他 Kinect 裝置的驅動程式。不過,基本上由於其他的設備在 OpenNI 下也無法操作,所以沒有什麼意義…而實務上,SensorKinect 所提供的驅動程式也不完全、所以並非所有裝置都可以更換…

18 thoughts on “強制更換 Kinect 的驅動程式(for OpenNI)”

  1. Heresy妳好,我用的是openni2.0的sdk,當我發布的程程式在鏡頭前站著的人數達到20人左右時,骨骼數據就會出現抖動的情況,請問妳遇到過這種情況嗎?妳知道是什麽原因導致的嗎?非常感谢!!

  2. to 清水间

    抱歉,這個應該算是 NiTE 內部演算法的問題,Heresy 也不確定造成的確切原因。

  3. 好的, 这个问题一直困扰了我很久了,我再检查一下,谢谢!

  4. 我想請問 當我執行檔案時 出現
    無法找到程序輸入點xnOSSeekFile64
    這個狀況該如何處理

  5. to wf880180

    文章中已經說明了:

    這樣的錯誤訊息,一般來說是由於各個模組之間的版本不一致所造成的。
    請確定使用的 SensorKinect 所對應的版本

  6. hello,kinect 2.0固定是向上倾斜的,这个角度知道吗,或者有没办法算出

  7. to hello
    抱歉,看不太懂你的問題。
    Kinect v2 的感應器的角度基本上沒有馬達,是手動可以調整的。至於要算出角度,除非有參考座標,不然應該不太可能。

  8. 我的问题是这样的。我的kinect载体类似是个正方体,正方体的上下平面跟地面是平行的。kinect放在正方体上面后,kinect有点向上倾斜,这样kinect的Z轴是向上倾斜的,Y轴也不是垂直水平面的。我想对kinect的数据进行处理,使得获得的坐标系的Z轴是平行水平面的,Y轴垂直水平面。

  9. 我把openni2交叉编译到arm,识别不到kinect 2.0,是不是kinect2.0不管在windows还是在其他系统都要求是USB3.0的硬件。谢谢

  10. to hello

    1. Kinect v2 的傾角是可以手動調整的
    2. 如同之前所回覆的,你必須要自己在空間中找到對應的基準來做計算;比如說在找到地板之後,根據地板來做計算,看要怎麼轉回去。

  11. to water
    抱歉,Heresy 沒有在 ARM 測試過。
    不過基本上 Kinect v2 在 Windows 上的硬體需求就是 USB3,能用 USB 2 運作的機會不大。

  12. kinect2.0相对于kinect1.0非常容易出现噪点(指的是有些空旷地方没有东西也会探测出有深度数据),知道什么原因吗?跟TOF技术有关吗?

  13. to hello
    基本上,不管哪種感應器,一定都會有雜訊,就算彩色色影機也有。
    而理論上,ToF 的雜訊一般是認為 Light Coding 少了…

  14. 您好,文中openni下载等链接都失效了,请问openni安装包可以上传一份吗~

發佈回覆給「清水间」的留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *