Kinect SDK Wrapper
YuYuYouEr工作室针对商业解决方案提供SDK定制服务,另外YuYuYouEr工作室还可以提供针对FLASH/AIR中ANE相关开发服务和咨询。
Unity3D插件已更新至2.0.0.8版本;
本版增加与彩色RGB图像对应的平面骨骼节点,方便大家做AR互动类开发;
更换角色骨骼模型,支持背后跟随视角与面对面视角;
增加一代二代SDK切换脚本,详见Assets\YuYuYouEr_Kinect_SDK_Wrapper\Plugins\目录;
继续对Kinect V2硬件设备的支持,封装了Kinect for windows SDK v2.0-1409版本;
并提供与Kinect V1设备完全兼容的DLL插件接口,大家可以根据自己需要随时切换硬件设备,却无需修改你的应用代码;
对于Kinect V1和Kinect V2不同的接口,如二代没有马达接口,开发者调用不会出错,内部实现为空函数;
在Unity3D中使用独立线程更新图像数据,提高主线程帧率
模型骨骼、小点骨骼均支持单用户、两用户
支持Kinect骨骼数据录制与重放,方便开发过程中反复调试特定动作
最新社区免费版(如果下载失败,请加QQ群,向群主索要最新版本):
Unity3D插件:
YuYuYouEr_Kinect_SDK_Wrapper_for_Unity3D_v2.0.0.8_Community.zip
百度网盘提取码:42sjtt_Kinect_Calibration标定工具(下面有截图说明)
tt_Kinect_Calibration标定工具 提取码:p7ek
视频教程:
入门级教程:https://v.douyu.com/show/j4xq3WDK5GjMLGNz
内容如下:
1、下载地址
2、如何导入Unity3D
3、如何切换一代、二代硬件驱动
4、运行测试:彩色、深度、背景移除、单人骨骼
5、小游戏开发示例:如来神掌(备注:非常入门级的案例啊,高手不要好奇)
最新为v2.0.0.8版本,拥有以下特性:
Kinect V2插件:
对Kinect for windows SDK v2.0-1409进行封装
支持自定义用户管理器,内置单用户/双用户示例
支持用户进入/离开事件
支持骨骼数据录制/重放,方便骨骼动作算法调试
支持深度图、彩色视频
支持获取图像尺寸接口(注意此处V1、V2会不同,所以不要在自己的代码中写常量)
支持SDK v2.0背景移除接口支持单人骨骼数据、双人骨骼
支持单人握拳检测、双人握拳检测支持坐标系转换:骨骼数据 <-> 深度图像 -> 彩色图像
支持Enable开关,运行时暂停某些特性
提供32位、64位两份DLL
Kinect V1插件:
对Kinect for windows SDK v1.8进行封装
支持自定义用户管理器,内置单用户/双用户示例
支持用户进入/离开事件
支持骨骼数据录制/重放,方便骨骼动作算法调试支持深度图、彩色视频
支持获取图像尺寸接口(注意此处V1、V2会不同,所以不要在自己的代码中写常量)
支持SDK v1.8背景移除接口
支持单人骨骼数据、双人骨骼
支持单人握拳检测、双人握拳检测支持人脸检测(缩放、位置、旋转)
支持语音识别
支持坐标系转换:骨骼数据 <-> 深度图像 -> 彩色图像
支持Enable开关,运行时暂停某些特性
支持Kinect马达调整仰视、俯视角度
提供32位、64位两份DLL
Unity3D版本中DLL函数声明,请看KinectInterop.cs中NativeMethos定义,本文下方有详细的函数说明;
这份Wrapper代码会长期维护,并不断增加新特性,将来也会提供对其他体感硬件、体感平台的支持。
运行界面截图:
功能说明:
提供Unity3D插件(移植自CMU Kinect Wrapper,修复bug,重构代码,增加特性)
Kinect V1 DLL对Kinect for windows SDK v1.8进行封装
Kinect V2 DLL对KInect for windows SDK v2.0-1409进行封装
支持v1.8版本、v2.0版本背景移除接口
支持深度图、彩色视频、单人骨骼数据、双人骨骼数据
支持自定义用户管理器,内置单用户/双用户示例
支持用户进入/离开事件
支持骨骼数据录制/重放,方便骨骼动作算法调试
支持获取图像尺寸,V1、V2深度图、彩色视频尺寸不同
支持Kinect Interaction握拳手势
提供32位、64位两份DLL
Kinect V1 DLL支持人脸识别接口
Kinect V1 DLL支持语音识别
Kinect V1 DLL支持马达调整仰视、俯视角度
社区免费版本在启动Kinect时会在屏幕右下角显示带有此Wrapper版本号的信息窗口,持续5秒后会自动消失。
DLL调用方法:
YuYuYouEr_Kinect_SDK_Wrapper.h:此头文件封装一个DLL调用辅助类,完成DLL加载,DLL函数获取,调用封装功能。
定义方法:
CYuYuYouEr_Kinect_SDK_Wrapper m_YuYuYouEr_Kinect_SDK_Wrapper;
Kinect V2运行所需文件:
YuYuYouEr_Kinect_SDK_Wrapper.dll:运行必须;
qfOpenCV.dll:运行必须;
Kinect V1运行所需文件:
YuYuYouEr_Kinect_SDK_Wrapper.dll:运行必须;
FaceTrackData.dll:运行必须;
FaceTrackLib.dll:运行必须;KinectBackgroundRemoval180_32.dll:运行必须;
KinectInteraction180_32.dll:运行必须;
SpeechRecognition-en_US.grxml:使用英文语音识别时必须存在
SpeechRecognition-zh_CN.grxml:使用中文语音识别时必须存在
Wrapper函数返回值:
封装后的函数返回值均为HRESULT类型,成功则返回S_OK;
骨骼数据关节坐标类型:
typedef struct { float x, y, z, w;}Vector4; //点坐标,4维向量
函数列表:
1、Kinect打开/关闭:
HRESULT qfKinectInit(void); //打开Kinect
HRESULT qfKinectUnInit(void); //关闭Kinect
2、彩色图像、深度数据、骨骼坐标读取:
HRESULT qfKinectCopyVideoData(BYTE videodata[宽度*高度*4]); //读取彩色视频数据,调用者分配空间,32位图像
HRESULT qfKinectCopyDepthData(BYTE depthdata[宽度*高度*4]); //读取深度数据,每个成员为32位DWORD,存放深度值(毫米数),含UserIndex
HRESULT qfKinectCopyBackgroundRemovalData(BYTE data[宽度*高度*4]); //读取抠像数据,32位图像尺寸与彩色图像相同
HRESULT qfKinectCopySkeletonData(Vector4 skldata[20]); //读取骨骼数据,关节下标与微软顺序相同,后面会给出
HRESULT qfKinectCopySkeletonAndAction(Vector4 skldata[6][20], int userIndex[6]); //读取多人骨骼数据,检测userIndex[i]为非0表示此用户有效
3、语音识别打开/关闭/结果读取:
HRESULT qfKinectInitSpeech(int languageCode); //打开语音识别,需要首先启动Kinect
目前languageCode支持英文(1033)和中文(2052)
HRESULT qfKinectUnInitSpeech(void); //关闭语音识别
HRESULT qfKinectCopySpeechReslut(BYTE depthdata[1024]); //读取语音识别结果,返回值为UTF8编码,grxml语法文件使用中文<tag>时需要注意,示例中有相应处理函数
4、Kinect Interaction握拳/松开检测:
HRESULT qfKinectCopyHandEventReslut(BYTE handEventData[2]); //读取双手事件,目前支持握拳、松开检测
handEventData[0]为左手,handEventData[1]为右手;
值为0表示无动作、1表示握拳、2表示松开;
HRESULT qfKinectCopyMultiHandEventReslut(BYTE handEventData[6][2]); //读取多人双手事件,目前支持握拳、松开检测
用户顺序与copyMultiSkeletonData()函数结果一样,handEventData[i]表示第i个用户双手数据
handEventData[i][0]为第i个用户左手,handEventData[i][1]为第i个用户右手;
值为0表示无动作、1表示握拳、2表示松开;
5、人脸识别接口:
HRESULT qfKinectCopyFaceTrackResult(FLOAT scale[1], FLOAT rotationXYZ[3] , FLOAT translationXYZ[3], LONG translationColorXY[2]);
//得到面部缩放、欧拉角旋转、在骨骼空间的位移、彩色空间的位移
6、坐标系转换:
HRESULT qfKinectTransformSkeletonToDepthImage(FLOAT positionXYZW[4], int *plDepthX, int *plDepthY, USHORT *pusDepthValue); //骨骼数据 -> 深度图像
HRESULT qfKinectTransformDepthImageToSkeleton(FLOAT positionXYZW[4], int lDepthX, int lDepthY, USHORT usDepthValue); //深度图像 -> 骨骼数据
HRESULT qfKinectTransformDepthImageToVideoImage(int lDepthX, int lDepthY, USHORT usDepthValue , int *plColorX, int *plColorY); //深度图像 -> 彩色图像
在例程中,深度图像、彩色图像中用户身上的小白点位置即为以上函数计算得到。
7、特性开关
//多用户骨骼数据开关,单用户应用关闭此项可提高效率
bool qfKinectGetEnableMultiUser();
void qfKinectSetEnableMultiUser(bool bEnable);//人脸识别检测开关
bool qfKinectGetEnableFaceTracking();
void qfKinectSetEnableFaceTracking(bool bEnable);//语音识别检测开关
bool qfKinectGetEnableSpeechRecognition();
void qfKinectSetEnableSpeechRecognition(bool bEnable);//握拳识别检测开关
bool qfKinectGetEnableKinectInteractive();
void qfKinectSetEnableKinectInteractive(bool bEnable);//背景移除特性开关
bool qfKinectGetEnableBackgroundRemoval();
void qfKinectSetEnableBackgroundRemoval(bool bEnable);
8、马达控制
//控制马达,调整kinect仰角、俯角,微软建议调整频率不要太高,至少1s间隔
//角度有效范围:-27度 ~ +27度
int getElevationAngle();
bool setElevationAngle(int angle);
Test软件简介:
YuYuYouEr_Kinect_SDK_Wrapper_Test为DLL接口测试软件。
主界面使用对话框形式,点击启动Kinect按钮,可以看到彩色图像、深度图像,如果有用户被Kinect追踪到,还会显示单人、双人骨骼图像。
被识别用户可以进行握拳测试,可以看到代表左右手的绿色圆点变大。
Kinect启动后,可以启动语音识别,可以选择中文或者英文。
界面右下角有垂直滑动条可以调整Kinect仰角、俯角。
Kinect关节序号:
NUI_SKELETON_POSITION_HIP_CENTER = 0
NUI_SKELETON_POSITION_SPINE =1
NUI_SKELETON_POSITION_SHOULDER_CENTER = 2
NUI_SKELETON_POSITION_HEAD = 3NUI_SKELETON_POSITION_SHOULDER_LEFT = 4
NUI_SKELETON_POSITION_ELBOW_LEFT = 5
NUI_SKELETON_POSITION_WRIST_LEFT = 6
NUI_SKELETON_POSITION_HAND_LEFT = 7NUI_SKELETON_POSITION_SHOULDER_RIGHT = 8
NUI_SKELETON_POSITION_ELBOW_RIGHT = 9
NUI_SKELETON_POSITION_WRIST_RIGHT = 10
NUI_SKELETON_POSITION_HAND_RIGHT = 11NUI_SKELETON_POSITION_HIP_LEFT = 12
NUI_SKELETON_POSITION_KNEE_LEFT = 13
NUI_SKELETON_POSITION_ANKLE_LEFT = 14
NUI_SKELETON_POSITION_FOOT_LEFT = 15NUI_SKELETON_POSITION_HIP_RIGHT = 16
NUI_SKELETON_POSITION_KNEE_RIGHT = 17
NUI_SKELETON_POSITION_ANKLE_RIGHT = 18
NUI_SKELETON_POSITION_FOOT_RIGHT = 19
发布历史:
2019-07-14
————————-
发布2.0.0.8版本
二代Kinect支持多用户抠像
完善面对面视角与非面对面视角的动作同步;
2017-07-17
————————-
发布tt_Kinect_Calibration标定工具1.0.0.0版本
支持正视图、右视图、顶视图
支持三个调节步长档位
支持缩放视图
支持Yaw、Pitch、Roll欧拉角标定
2016-09-20
————————-
发布2.0.0.6版本
支持6用户管理器
更换角色骨骼模型,支持背后跟随视角与面对面视角;
支持与彩色图像对应的平面骨骼节点,可做AR互动开发
提供一代、二代SDK切换脚本
修改bug
2015-11-22
————————-
发布2.0.0.5版本
支持自定义用户管理器,内置单用户/双用户示例
支持用户进入/离开事件
支持骨骼数据录制/重放,方便骨骼动作算法调试
2015-04-13
————————-
发布2.0.0.2版本
修改bug,Kinect V2出现第三个用户时,数组越界
在SkeletonWrapper中,以到(0, 0, 1.9)为中心,保留两个距离最近的用户
作为模型绑定和小点的骨骼的数据源
2015-04-11
————————-
发布2.0.0.1版本
在Unity3D中使用独立线程更新图像数据,提高主线程帧率
模型骨骼、小点骨骼均支持两个用户
2014-10-30
————————-
发布2.0.0.0版本
封装Kinect for windows SDK v2.0-1409版本
在Kinect V2接口中支持彩色、深度、骨骼、握拳、抠像数据获取,以及坐标转换 接口
统一Kinect V2与Kinect V1插件接口
提供动态加载的DLL,解耦和应用代码与Kinect硬件驱动
2014-07-02
————————-
发布0.6版本
修复Unity3D坐标转换传参bug
2014-05-26
————————-
C++ Win32 DLL发布0.5版本
Unity3D版本增加语音识别示例
增加Kinect马达控制接口
发布64位版本DLL
修改了一些CMU代码中的bug
2014-02-24
————————-
C++ Win32 DLL发布0.4版本
Unity3D插件发布0.4版本
封装微软Kinect SDK v1.8版本
支持背景移除接口
支持人脸识别接口
2013-09-05
————————-
C++ Win32 DLL发布0.3版本
支持双人骨骼
支持双人握拳手势
增加坐标系转换函数:骨骼数据 <-> 深度图像 -> 彩色图像
2013-08-02
————————-
发布0.2版本
修复关闭Kinect时可能异常退出bug
发布Unity3D插件版本
提供OpenCV函数用来改变图像大小,水平垂直翻转图像
2013-07-31
————————–
发布0.1版本
支持Kinect SDK v1.7
支持读取骨骼数据、深度数据、彩色图像
支持语音识别
支持Kinect握拳检测
评论关闭