标签: kinect

NUI /触摸界面的一般注意事项

在过去的几个月里,我一直在研究为各种软件音乐合成器开发基于Kinect的多点触控界面.

我提出的总体策略是以编程方式或(如果可能的话)以算法方式创建对象以表示软合成器的各种控件.这些应该有;

  • X位置
  • Y位置
  • 高度
  • 宽度
  • MIDI输出通道
  • MIDI数据缩放器(将xy coords转换为midi值)

我考虑用于创建算法的2个策略是XML描述,并以某种方式在屏幕上拉出东西(即给定一个正在运行的程序,找到所有控件的xycoords).我不知道如何去做第二个,这就是为什么我用这种特定的技术语言来表达它;).我可以做一些中间解决方案,比如在控件的角上点击鼠标来生成一个xml文件.我在Flash应用程序中经常看到的另一件事是将屏幕大小放入变量并使用数学来根据屏幕大小构建所有界面对象.请注意,并非必须使对象与屏幕控件的大小相同,或者表示所有屏幕上的对象(有些只是指示符,而不是交互式控件)

其他考虑;

给(现在)两组X/Y坐标作为输入(左手和右手),使用它们的最佳选择是什么?我的第一直觉是创建某种焦点测试,其中如果x/y坐标落入接口对象的边界内,则该对象变为活动状态,然后如果它们在一段时间内落在其他较小边界之外则变为非活动状态.我找到的廉价解决方案是使用左手作为指针/选择器,右边作为控制器,但似乎我可以做更多.我有几个手势解决方案(隐藏马尔科夫链)我可以搞砸.并不是说他们很容易上班,确切地说,但这是我可以看到自己在给予充分激励的情况下做的事情.

总而言之,问题是

  • 表示接口(必要,因为默认接口总是需要鼠标输入)
  • 选择一个控件
  • 使用两组x/y坐标(旋转/连续控制器)操纵它,或者在开关的情况下,优选使用手势来切换它而不给予/获得焦点.

任何评论,特别是那些已经工作/正在使用多点触控io/NUI的人,都非常感谢.与现有项目和/或一些好的阅读材料(书籍,网站等)的链接将是一个很大的帮助.

multi-touch kinect nui

5
推荐指数
1
解决办法
439
查看次数

尝试模拟鼠标单击/拖动

因此,我尝试模拟鼠标左键单击和鼠标左键释放以进行一些自动拖放。

目前它在C#Winforms中(是的,winforms:|),有点像鹅。

基本上,一旦发送了Click,我希望它根据Kinect输入来更新光标位置。Kinect方面很好,但是我不确定如何找到按钮是否仍处于按下状态。

这是我当前正在使用的代码+一些psuedocode以帮助更好地解释自己(做的时候)。

class MouseImpersonator
{
    [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
    private static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

    private const int leftDown = 0x02;
    private const int leftUp = 0x04;

    public static void Grab(int xPos, int yPos)
    {
        Cursor.Position = new Point(xPos + 25, yPos + 25);
        mouse_event(leftDown, (uint) xPos, (uint) yPos, 0, 0);

        //do
        //{
        //Cursor.Position = new Point(KinectSettings.movement.LeftHandX, KinectSettings.movement.LeftHandY);
        //} while (the left mouse button is still clicked); …
Run Code Online (Sandbox Code Playgroud)

c# mouseevent winforms kinect

5
推荐指数
1
解决办法
7688
查看次数

无鼠标拖放 - 更改事件的引发方式(以编程方式提升拖放/拖动事件)

(首先我要解释的问题)

如何告诉应用程序删除一个对象/以编程方式提升drop事件(我没有使用鼠标)?

我目前正在为MSKinect开发,我想实现一个非常接近原生拖放的拖放(参见msdn doc).

我已经使用画布实现了拖放操作,并使用Kinect游标引发的事件来"拖动"周围的事物.但是我更感兴趣的是使用拖放来传输数据.

我知道通常在释放鼠标按钮时启动drop事件,我想在给定手势发生时进行draggableElement释放.

附加信息:我正在根据LesterLobo的工作实施经理

c# wpf kinect

5
推荐指数
1
解决办法
823
查看次数

如何关闭Kinect USB端口的手柄以防止VisualStudio崩溃?

我正在研究Kinect,偶尔Kinect使Visual Studio崩溃.

当我kinectSensor.Start()在调试后调用该方法时发现Kinect已经在另一个进程中使用了.

但没有其他进程使用Kinect! 它在启动我的机器并启动应用程序后的早上发生了一次.但大多数时候,当我启动Kinect应用程序时(在VisualStudio 2010的调试模式下),我停止应用程序,经过一些代码修改后我重新启动应用程序,那时它不起作用,我有上面的异常和2秒后Visual Studio崩溃.

此外,我检查Kinect是否已经运行,情况并非如此(在调试期间Kinect传感器的状态下方):

kinect传感器的状态(调试模式)

最奇怪的是,有时它可以在几周内正常工作,之后它会在应用程序的每两/三次启动时使用两天.

我在这个问题上找到的唯一解决方案是来自一个问题非常相似的人(互联网上唯一一个?):Imad Elayyan

当我启动Process Explorer时,我发现了完全相同的USB端口处理问题(如照片所示),这是一个突然显示的过程,当我们关闭应用程序时它不会终止.

Kinect的USB手柄的突变过程

但他的解决方案并不是一个长期的解决方案:我必须手动杀死突变体并重新启动VisualStudio.有时我必须在早上重启VS 20次......

有没有办法正确关闭usb端口的句柄(代码?),这样当我关闭应用程序时它会终止该句柄并且不会使VS崩溃了?

任何帮助将不胜感激,这真的令我感到困惑,它让我发疯.

其他信息:

我正在使用适用于WindowsSDK1.5 + Kinect,SDK1.0 + Kinect XBox360也是如此

我已经尝试用另一个VS实例调试VS.

c# visual-studio-2010 visual-studio kinect

5
推荐指数
1
解决办法
1664
查看次数

通过XNA在Motion Builder中创建FBX模型

我想创建一个通过XNA应用程序内的Kinect传感器捕获的骨架的fbx模型.目前我所做的是将Kinect坐标存储为数据库中的Matrix,检索它们逐帧绘制骨架.

在XNA Framework中运行应用程序时,是否可以使用Motion Builder创建fbx模型.

3d xna fbx kinect

5
推荐指数
1
解决办法
574
查看次数

Kinect SDK深度数据(C++)到OpenCV?

我一直在使用Kinect SDK(1.6)DepthBasicsD2D C++示例从kinect获取深度帧,并希望在OpenCV中使用数据执行blob检测.

我已经使用示例配置了OpenCV,并且还了解了示例的基本工作.

但不知怎的,在任何地方都没有任何帮助,很难弄清楚如何从Kinect获取像素数据并传递给OpenCV的IplImage/cv :: Mat结构.

有没有想过这个问题?

opencv kinect kinect-sdk

5
推荐指数
1
解决办法
4704
查看次数

Python-如何配置和使用Kinect

我有一个Xbox 360 + Kinect。玩它非常有趣,因此,我想知道是否可以使用Python来使用它并制作自己的游戏(并在PC上玩)。
目前,
我拥有
1.Microsoft和硬件驱动程序。(仅)
2. 没有 3D编程经验。

我的问题
1.是否有用于PC上Kinect的简单易用的模块?
2.和任何一本相同的书吗?

我正在使用Windows 32和64位以及Python 2.7。

python kinect

5
推荐指数
1
解决办法
2万
查看次数

从灰度图像中删除异常值

我有一个代表我想要清理的深度信息的图像序列.有一些异常值(强度低于25的值,0-255范围),我希望用一个可接受的替代方案填充(局部特定区域的平均值可能是一个很好的猜测).

有人能看到一个简单的方法吗?我试图使用中值滤波器(滤波器大小为10)用NaN代替不需要的值,但它确实使情况恶化,相反通过用一般平均值代替它们来改善.

基础试验

PS有人已经建议我使用快速小波重建,但我真的不知道从哪里开始......

实施解决方案(到目前为止)

我实现的解决方案(在阅读tmpearceinpaint_nans建议之前)是:

  1. 复制原始图像;
  2. 用一般平均值填充无效像素;
  3. 使用光线10的圆盘使其模糊;
  4. 用我从第3点获得的值替换原始图像中的无效值.
  5. 运行大小为10的中值过滤器.
img2 = img;                                       
img2(img < .005) = mean(img(:));                  
H = fspecial('disk',10);                          
img3 = imfilter(img2,H,'symmetric');              
img4 = img;                                       
img4(img < .3) = img3(img < .3);                  
filterSize = 10;                                  
padopt = {'zeros','indexed','symmetric'};         
IMG = medfilt2(img4, [1 1]*filterSize, padopt{p});
Run Code Online (Sandbox Code Playgroud)

二审

matlab image-processing grayscale kinect

5
推荐指数
1
解决办法
3068
查看次数

Kinect v2会支持多个传感器吗?

由于传感器之间的红外干扰,使用多个Kinect v1传感器非常困难.

根据我在这篇gamastura文章中所读到的内容,微软摆脱了Kinect v2传感器用于测量深度的飞行时间机制的干扰问题.

这是否意味着我可以同时使用多个Kinect v2传感器,还是我误解了这篇文章?

谢谢您的帮助!

kinect openni kinect-sdk

5
推荐指数
1
解决办法
5891
查看次数

Kinect v2:空间分辨率/深度分辨率/摄像机校准

对于我的应用,我分析了Kinect v2的空间分辨率.

为了分析空间分辨率,我将垂直和平面平面记录到给定距离,并将平面的深度图转换为点云.然后我通过计算欧几里德距离来比较一个点与他的邻居.

计算这种情况下的欧几里德距离(平面和kinect之间1米),点之间的分辨率接近3毫米.对于距离为2米的飞机,我的分辨率最高可达3毫米.

与文献相比,我认为我的结果非常糟糕.

例如Yang等人.得到距离为4米的飞机,平均分辨率为4mm(评估和提高Kinect for Windows v2的深度精度)

这是我的平面平面点云(距离我的kinect 2米)的示例:

飞机距离Kinect v2 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)

point-clouds camera-calibration kinect kinect-sdk

5
推荐指数
1
解决办法
2950
查看次数