当Kinect本身没有插入时,是否可以模拟Kinect传感器(用于Kinect SDK)?
首先,我认为Kinect Studio完全符合我的要求,但现在看来Kinect Studio可以记录数据流,并可以将它们"提供"给应用程序,但无法模拟与传感器的连接.所以目前我有几个.xed文件用Kinect Studio录制,我无法启动任何启用Kinect的应用程序,而不会得到"Kinect传感器未插入"或任何消息.
有没有办法解决?我可以访问Kinect,但它不在同一个地方,我打算编写大部分代码(我非常希望用记录数据运行/调试它).
我真的很感激任何帮助.
PS也许我只是错误地使用Kinect Studio,它实际上可以模拟Kinect连接(实际上这是最好的情况).
所以我终于在邮件中获得了两个Kinect v2,并期待从他们那里获得一些原始数据,看看他们互相干扰了多少.我去下载SDK,由于某种原因我从未注意到Windows 8的要求......因为在Windows 7中不受支持.
这感觉很虚伪和不必要,但很好,我不能做任何事情.在我浪费一些钱将我的机器升级到我真正不想要的操作系统之前,有没有办法让Kinect v2与Windows 7机器(或者甚至是Ubuntu)通话?我不需要任何花哨的骨骼检测或任何东西; 我只想要原始xyz-rgb数据.我正在阅读关于OpenNI(以及他们新的Apple霸主)的内容,我希望通过一些奇迹,他们的最后一个开源发行版将与Kinect v2s向前兼容?
TL; DR:有没有可以在Windows 7-64bit上与Kinect v2连接的免费SDK?
我目前正在使用Windows 8.1上的Microsoft Kinect for Windows SDK 2进行编程.事情进展顺利,在家庭开发环境中,与"现实世界"相比,背景中没有太多噪音.
我想向那些具有Kinect"真实世界"应用经验的人寻求建议.Kinect(尤其是v2)如何在现场环境中与过路人,旁观者和背景中的意外物体相比?我确实希望,在从Kinect传感器到用户的空间中,通常不会有干扰 - 我现在非常注意的是背景噪声.
虽然我知道Kinect在阳光直射下(无论是在传感器上还是在用户身上)都不能很好地跟踪 - 我是否需要将某些照明条件或其他外部因素纳入代码?
我要找的答案是:
我一直在使用Kinect SDK(1.6)DepthBasicsD2D C++示例从kinect获取深度帧,并希望在OpenCV中使用数据执行blob检测.
我已经使用示例配置了OpenCV,并且还了解了示例的基本工作.
但不知怎的,在任何地方都没有任何帮助,很难弄清楚如何从Kinect获取像素数据并传递给OpenCV的IplImage/cv :: Mat结构.
有没有想过这个问题?
我已下载Kinect SDK 1.7,工具包,并使用以下示例.
我发现Kinect Toolkit在内部使用交互框架来检测手部位置/手势,并相应地将其映射到Kinect控件.
我有一个要求,我想在Kinect平铺按钮上捕获一个抓握事件.由于默认的KinectTileButton不提供Grip事件.我在我的按钮上添加了一个grip事件处理程序.
KinectRegion.AddHandPointerGripHandler(kinectButton, OnHandPointerCaptured);
private void OnHandPointerCaptured(object sender, HandPointerEventArgs handPointerEventArgs)
{
// Add code here
}
Run Code Online (Sandbox Code Playgroud)
我在OnHandPointerCaptured方法中放置了一个调试断点,当我抓住KinectTileButton时能够接收到正确的命中.但由于某种原因,我没有看到KinectCursor图像在KinectScrollViewer控件上发生变化.我尝试在KinectButtonBase类中设置isGripTarget属性,但它没有帮助.
private void InitializeKinectButtonBase()
{
KinectRegion.AddHandPointerPressHandler(this, this.OnHandPointerPress);
KinectRegion.AddHandPointerGotCaptureHandler(this, this.OnHandPointerCaptured);
KinectRegion.AddHandPointerPressReleaseHandler(this, this.OnHandPointerPressRelease);
KinectRegion.AddHandPointerLostCaptureHandler(this, this.OnHandPointerLostCapture);
KinectRegion.AddHandPointerEnterHandler(this, this.OnHandPointerEnter);
KinectRegion.AddHandPointerLeaveHandler(this, this.OnHandPointerLeave);
// Use the same OnHandPointerPress handler for the grip event
KinectRegion.AddHandPointerGripHandler(this, this.OnHandPointerPress);
//Set Kinect button as Grip target
// KinectRegion.SetIsPressTarget(this, true);
KinectRegion.SetIsGripTarget(this, true);
}
Run Code Online (Sandbox Code Playgroud)
如何将KinectCursor图像从openhand图标更改为grip,以及尺寸.
我正在开发一个Windows应用程序,允许用户使用Kinect传感器与他的计算机完全交互.用户应该能够向应用程序讲授他自己的手势,并为每个人分配一些Windows事件.在学习过程之后,应用程序应该检测用户的移动,并且当它识别出已知的手势时,应该触发分配的事件.
关键部分是自定义手势识别器.由于手势是用户定义的,因此无法通过将所有手势直接硬编码到应用程序中来解决问题.我已经阅读了许多讨论这个问题的文章,但是没有一篇文章给出了我的问题的答案:哪种算法最适合学习和识别用户定义的手势?
我正在寻找的算法是:
请注意,结果不一定是完美的.如果算法不时识别出错误的手势,则比算法运行缓慢更可接受.
我目前正在决定3种方法:
您认为哪种方法最适合我正在尝试的方法?或者这个问题有其他解决方案吗?我很感激能够推动我前进的任何建议.谢谢.
(我正在使用Kinect SDK.)
由于传感器之间的红外干扰,使用多个Kinect v1传感器非常困难.
根据我在这篇gamastura文章中所读到的内容,微软摆脱了Kinect v2传感器用于测量深度的飞行时间机制的干扰问题.
这是否意味着我可以同时使用多个Kinect v2传感器,还是我误解了这篇文章?
谢谢您的帮助!
我只是在理解主动红外图像和Kinect v2的深度图像之间的区别时感到困惑.谁能告诉我主动红外图像与深度图像相比有什么特殊功能?
对于我的应用,我分析了Kinect v2的空间分辨率.
为了分析空间分辨率,我将垂直和平面平面记录到给定距离,并将平面的深度图转换为点云.然后我通过计算欧几里德距离来比较一个点与他的邻居.
计算这种情况下的欧几里德距离(平面和kinect之间1米),点之间的分辨率接近3毫米.对于距离为2米的飞机,我的分辨率最高可达3毫米.
与文献相比,我认为我的结果非常糟糕.
例如Yang等人.得到距离为4米的飞机,平均分辨率为4mm(评估和提高Kinect for Windows v2的深度精度)
这是我的平面平面点云(距离我的kinect 2米)的示例:
有人对Kinect v2的空间分辨率做了一些观察,或者想出为什么我的分辨率不那么糟糕?
在我看来,我认为将我的深度图像转换为世界坐标时出现了问题.因此这里的代码剪断了:
%normalize image points by multiply inverse of K
u_n=(u(:)-c_x)/f_x;
v_n=(v(:)-c_y)/f_y;
% u,v are uv-coordinates of my depth image
%calc radial distortion
r=sqrt(power(u_n,2)+power(v_n,2));
radial_distortion =1.0 + radial2nd * power(r,2) + radial4nd * power(r,4) + radial6nd * power(r,6);
%apply radial distortion to uv-coordinates
u_dis=u_n(:).*radial_distortion;
v_dis=v_n(:).*radial_distortion;
%apply cameramatrix to get undistorted depth point
x_depth=u_dis*f_x+c_x;
y_depth=v_dis*f_y+c_y;
%convert 2D to 3D
X=((x_depth(:)-c_x).*d(:))./f_x;
Y=((y_depth(:)-c_y).*d(:))./f_y;
Z=d; % d is the given …Run Code Online (Sandbox Code Playgroud) 我知道如何转换从Joint.Position.X和获得的值的像素Joint.Position.Y.我有一个例子:
void kinectSensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
{
if (skeletonFrame != null)
{
Skeleton[] skeletonData = new Skeleton[skeletonFrame.SkeletonArrayLength]; //conterrà tutti gli skeleton
skeletonFrame.CopySkeletonDataTo(skeletonData);
Skeleton playerSkeleton = (from s in skeletonData where s.TrackingState == SkeletonTrackingState.Tracked select s).FirstOrDefault();
if (playerSkeleton != null)
{
Joint rightHand = playerSkeleton.Joints[JointType.HandRight];
Joint leftHand = playerSkeleton.Joints[JointType.HandLeft];
//EDIT: The following formulas used to convert X and Y coordinates in pixels are wrong.
//Please, see the answer for details
rightHandPosition …Run Code Online (Sandbox Code Playgroud) kinect-sdk ×10
kinect ×9
c# ×4
depth ×1
emulation ×1
infrared ×1
opencv ×1
openkinect ×1
openni ×1
point-clouds ×1
wpf ×1