天天看点

Kinect开发笔记(三)通过libfreenet2实现openni2+Kinect2.0+vs2017开发

通过libfreenet2实现openni2+Kinect2.0+vs2017开发

参考博客:https://blog.csdn.net/Peng154/article/details/79127630

(其实libfreenet2安装主要参照git官网上的步骤,由于使用vs2017,进行了相应改动,这位博主遇到的问题我都没遇到)

网上大多数教程是编译他人写好的openni文件,再将生成的dll文件放到对应目录下,亲测网上现有教程的openni工程文件在vs2017上无法编译通过,所以我选择了借助libfreenet2实现openni2和Kinect2.0的链接。

其他版本的vs也可以仿照该方法实现。

    1.从github上下载源码:https://github.com/OpenKinect/libfreenect2

    2.安装UsbDK驱动

下载网址:https://github.com/daynix/UsbDk/releases,msi文件直接安装就好了 。

如果不起作用,首先查看设备管理器->通用串行总线控制器里USB设备是否有异常的,如果有,先禁用,然后重启,这个过程可能要重启电脑。

如果还是不行,参考步骤3(我重启后没问题了,步骤3没尝试)

注意:win7系统有bug,不要轻易尝试,可能导致鼠标键盘失灵,win10没这个问题。

    3.参考上述博文中的步骤3

    4.编译libusb(这确实是个大坑!)

不论是上述博主的方法还是官方的编译步骤对于vs2017都是有问题的。

首先我们看看官方的编译步骤:

Kinect开发笔记(三)通过libfreenet2实现openni2+Kinect2.0+vs2017开发

打开cmd,进入depends文件夹后运行对应vs版本的cmd脚本,很遗憾,没有对应vs2017的脚本,运行vs2015的脚本不能成功,所以我选择用notepad++打开脚本文件,改写该脚本!!

vs2015脚本如图:

Kinect开发笔记(三)通过libfreenet2实现openni2+Kinect2.0+vs2017开发

脚本大致分为四个步骤,下载文件,设置变量,编译文件,复制文件。

注意:为了防止大家重复我的错误,由于待编译工程中使用的是Windows8.1 SDK,未安装的请提前在vs2017的环境中安装好Windows 8.1 SDK的版本,安装方法见https://zhidao.baidu.com/question/1951627826004020948.html

我也尝试了利用重定解决方案目标升级项目文件,结果还是不行,只有安装Windows8.1 SDK后问题才得以解决。

首先使用cmd进入libfreenect2-master\depends目录。

  • 下载文件

如果安装了git,直接用git clone https://github.com/libusb/libusb.git libusb_src || exit /b下载即可,如果没有,可以直接访问该网站下载zip文件,解压到当前目录后,将文件名改为libusb_src(很重要)。

cmd中输入cd libusb_src (进入libusb_src目录)

  • 设置变量

依次设置上图中三个变量的值。

set CONFIG=Release

set YEAR=2017

set MSBUILD="E:\vs2017\vs2017\MSBuild\15.0\Bin\MSBuild.exe"

注意:MSBUILD的目录是你安装vs2017的目录,这很关键。

  • 编译文件

将%MSBUILD% msvc\libusb_dll_%YEAR%.vcxproj /p:Platform=x64 /p:Configuration=%CONFIG% /target:Rebuild || exit /b中的变量用对应的值替换。如我的替换结果为:

"E:\vs2017\vs2017\MSBuild\15.0\Bin\MSBuild.exe" msvc\libusb_dll_2017.vcxproj /p:Platform=x64 /p:Configuration=Release /target:Rebuild || exit /b

(我们发现libusb/msvc里面已经有libusb_dll_2017.vcxproj,所以我们可以放心的将YEAR改为2017)

  • 复制文件

后面的操作也就一样了,将对应变量替换即可。

mkdir ..\libusb\include\libusb-1.0

copy libusb\libusb.h ..\libusb\include\libusb-1.0

mkdir ..\libusb\MS64\dll

copy x64\Release\dll\*.lib ..\libusb\MS64\dll

copy x64\Release\dll\*.dll ..\libusb\MS64\dll

copy x64\Release\dll\*.pdb ..\libusb\MS64\dll

一切搞定,只用在cmd中一次输入这些指令即可,当然,写成一个脚本也是ok的。

改编好的脚本如下:

Kinect开发笔记(三)通过libfreenet2实现openni2+Kinect2.0+vs2017开发

    5.安装TurboJPEG

从网址http://sourceforge.net/projects/libjpeg-turbo/files 下载压缩包,安装到c:/libjpeg-turbo64或 depends/libjpeg-turbo64,然后设置环境变量:TurboJPEG_ROOT,变量值为安装路径。

    6.安装 GLFW

从http://www.glfw.org/download.html(64bit),解压到depends/glfw (重命名glfw-3.x.x.bin.WIN64 为glfw),然后设置环境变量:GLFW_ROOT,变量值为解压目录。

    7.安装OpenCL(可选)

    8.安装CUDA(可选,只支持nvidia显卡)

这两个不装也没关系,我没有安装。

    9.安装OpenNI2

下载 OpenNI 2.2.0.33 (x64) from http://structure.io/openni, 安装到默认路径 (C:\Program Files…)。

注意:一定是默认路径!!!不然不行。

    10.编译

需要先安装cmake!

回退到根目录!!!,即libfreenect2-master/

然后依次输入这三条指令:

mkdir build && cd build

cmake .. -G "Visual Studio 15 2017 Win64"

cmake --build . --config RelWithDebInfo --target install

由于我们使用的是vs2017,所以用cmake .. -G "Visual Studio 15 2017 Win64",如果是其他版本请输入对应的版本号。

    11.测试libfreenect2

运行.\install\bin\Protonect.exe

完美运行

Kinect开发笔记(三)通过libfreenet2实现openni2+Kinect2.0+vs2017开发

12.测试openni2

将 freenect2.dll, 还有其他的 dll 文件 (libusb-1.0.dll, glfw.dll, etc.) 从文件夹 install\bin 复制到文件夹 C:\Program Files\OpenNI2\Tools\OpenNI2\Drivers. 然后双击运行 C:\Program Files\OpenNI\Tools\NiViewer.exe.

Kinect开发笔记(三)通过libfreenet2实现openni2+Kinect2.0+vs2017开发

搞定!

使用openni2开发时记得将openni的安装目录下文件Redist的所有文件复制粘贴到工程的Debug目录下,环境搭建和上一篇一致。