強制更換 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 所提供的驅動程式也不完全、所以並非所有裝置都可以更換…


OpenNI / Kinect 相關文章目錄

對「強制更換 Kinect 的驅動程式(for OpenNI)」的想法

  1. […] 另外,由於在 OpenNI 2 和 OpenNI 1 下要使用 Kinect 感應器,是需要不同的驅動程式的,所以如果是需要在同一台電腦上,分別去開發 OpenNI 1 和 OpenNI 2 的話,是會需要強制更換 Kinect 所使用的驅動程式的(參考);這點在使用上,可能會造成一些困擾。 […]

  2. 你好!敝人按照之前的步驟全部照做了
    但是更改驅動程式的時候卻找不到「C:\Program Files\PrimeSense\SensorKinect\Driver」這個資料夾
    敝人安裝的是SensorKinect093-Bin-Win32-v5.1.2.1.msi這個版本的SensorKinect
    但是打開PrimeSense這個資料夾,裡面卻只有NITE跟Sensor
    就算打開Sensor資料夾,裡面也只有Bin跟Data兩個資料夾跟GPL.txt跟LGP.txt兩個檔案而已

發表留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料