- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在 Windows 8.1 上使用 Microsoft Kinect for Windows SDK 2 进行编程。一切进展顺利,在家庭开发环境中,与“现实世界”相比,背景中显然没有太多噪音。
我想向那些具有 Kinect“现实世界”应用经验的人寻求一些建议。 Kinect(尤其是 v2)在背景中有路人、旁观者和意外物体的现场环境中表现如何?我确实预计,从 Kinect 传感器到用户的空间通常不会有干扰 - 我现在非常注意的是背景噪音本身。
虽然我知道 Kinect 在阳光直射下(无论是在传感器上还是在用户上)无法很好地跟踪 - 是否需要将某些照明条件或其他外部因素纳入代码中?
我正在寻找的答案是:
最佳答案
Outlaw Lemur 详细描述了您在现实场景中可能遇到的大部分问题。
使用 Kinect for Windows 版本 2,您无需调整电机,因为没有电机且传感器具有更大的视野。这将使您的生活变得更加轻松。
我想添加以下提示和建议:
1) 避免直射光(物理或内部照明)
Kinect 有一个可能会混淆的红外传感器。该传感器不应与任何光源直接接触。您可以通过使用普通的激光笔和手电筒在家里/办公室模拟这样的环境。
2) 如果您仅跟踪一个人,请选择最近的跟踪用户
如果您的应用只需要一名玩家,则该玩家需要 a) 完全跟踪,b) 比其他玩家更靠近传感器。这是一种简单的方法,可以让参与者了解谁被跟踪,而不会使您的 UI 变得更加复杂。
public static Body Default(this IEnumerable<Body> bodies)
{
Body result = null;
double closestBodyDistance = double.MaxValue;
foreach (var body in bodies)
{
if (body.IsTracked)
{
var position = body.Joints[JointType.SpineBase].Position;
var distance = position.Length();
if (result == null || distance < closestBodyDistance)
{
result = body;
closestBodyDistance = distance;
}
}
}
return result;
}
3)使用跟踪ID来区分不同的玩家
每个玩家都有一个 TrackingID 属性。当玩家干扰或随机移动位置时使用该属性。不过,请勿使用该属性作为面部识别的替代方法。
ulong _trackinfID1 = 0;
ulong _trackingID2 = 0;
void BodyReader_FrameArrived(object sender, BodyFrameArrivedEventArgs e)
{
using (var frame = e.FrameReference.AcquireFrame())
{
if (frame != null)
{
frame.GetAndRefreshBodyData(_bodies);
var bodies = _bodies.Where(b => b.IsTracked).ToList();
if (bodies != null && bodies.Count >= 2 && _trackinfID1 == 0 && _trackingID2 == 0)
{
_trackinfID1 = bodies[0].TrackingId;
_trackingID2 = bodies[1].TrackingId;
// Alternatively, specidy body1 and body2 according to their distance from the sensor.
}
Body first = bodies.Where(b => b.TrackingId == _trackinfID1).FirstOrDefault();
Body second = bodies.Where(b => b.TrackingId == _trackingID2).FirstOrDefault();
if (first != null)
{
// Do something...
}
if (second != null)
{
// Do something...
}
}
}
}
4) 当玩家距离传感器太远或太近时显示警告。
为了获得更高的准确度,玩家需要站在特定的距离:距离传感器不能太远或太近。检查方法如下:
const double MIN_DISTANCE = 1.0; // in meters
const double MAX_DISTANCE = 4.0; // in meters
double distance = body.Joints[JointType.SpineBase].Position.Z; // in meters, too
if (distance > MAX_DISTANCE)
{
// Prompt the player to move closer.
}
else if (distance < MIN_DISTANCE)
{
// Prompt the player to move farther.
}
else
{
// Player is in the right distance.
}
5) 始终了解玩家何时进入或离开场景。
维特鲁威提供了一种简单的方法来了解某人何时进入或离开场景。
Here is the source code以下是如何在您的应用程序中使用它:
UsersController userReporter = new UsersController();
userReporter.BodyEntered += UserReporter_BodyEntered;
userReporter.BodyLeft += UserReporter_BodyLeft;
userReporter.Start();
void UserReporter_BodyEntered(object sender, UsersControllerEventArgs e)
{
// A new user has entered the scene. Get the ID from e param.
}
void UserReporter_BodyLeft(object sender, UsersControllerEventArgs e)
{
// A user has left the scene. Get the ID from e param.
}
6) 直观地了解哪个玩家被跟踪
如果玩家周围有很多人,您可能需要在屏幕上显示谁被跟踪。您可以突出显示深度帧位图或使用 Microsoft 的 Kinect 交互。
This is an example of removing the background and keeping the player pixels only .
7) 避免使用光滑的地板
某些地板(明亮的、有光泽的)可能会镜像人,而 Kinect 可能会混淆他们的某些关节(例如,Kinect 可能会将您的腿延伸到反射的 body )。如果您无法避免光面地板,请使用FloorClipPlane你的 BodyFrame 的属性。然而,最好的解决方案是在人们站立的地方铺一 block 简单的地毯。地毯还可以作为适当距离的指示,因此您可以提供更好的用户体验。
关于kinect - Microsoft Kinect 和背景/环境噪音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27852369/
我在这里有点困惑。 Kinect 如何计算深度 : 我的理解是 IR 投影仪抛出一个图案,该图案被 IR 摄像机反射回来并读取。 现在红外摄像机知道特定深度的模式。利用传入模式和已知模式之间的差异来计
我希望使用 Kinect ToF 相机进行编程,但是我不确定这样做的硬件和软件要求。我遇到了一些涵盖这个主题的文章/书籍,但似乎有一些不一致的地方让我有些困惑。 问题 我需要购买什么 Kinect 产
我正在探索 kinect 的开发,希望能够识别手指而不是整只手。 kinect 官方 SDK 的骨骼 API 只有手关节 - 没有手指跟踪的规定。我还了解到,最近微软在新的 SDK 中包含了抓握识别
我正在探索 kinect 的开发,希望能够识别手指而不是整只手。 kinect 官方 SDK 的骨骼 API 只有手关节 - 没有手指跟踪的规定。我还了解到,最近微软在新的 SDK 中包含了抓握识别
这个问题与 Kaggle/CHALEARN 手势识别挑战有关。 您将获得大量匹配 RGB 和深度视频的训练集,这些视频是从 Kinect 录制的。我想在这些视频上使用 Kinect SDK 的骨骼跟踪
我希望我的几个开发人员立即开始使用 Kinect SDK,而且时间紧迫。因为他们不在美国,所以我需要花太多时间为他们购买 Kinect 以及在 PC 上使用它所需的电缆。 有没有一种方法可以让他们在没
我正在尝试使用 Xbox 360 的 Kinect 开发一个有趣的人脸识别应用程序。我想知道应该使用哪个 SDK 和 Visual Studio 版本才能最好地访问 Kinect。 最佳答案 Is K
我正在尝试创建一个应用程序来放大和缩小图像并通过 Kinect 旋转图像。到目前为止,它适用于任何一种情况。我想要的是,如果我旋转了图像,则在缩放时会保存新值,因此我会放大已旋转 X 度的图像。我现在
很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。如需帮助澄清此问题以便可以重新打开,visit the help center . 9年前关闭
我正在研究一种扩展方法,将一个骨架移动到 kinect 字段 os View 中的所需位置。 我的代码接收要移动的骨骼和命运位置,我计算接收到的骨骼臀部中心与命运位置之间的距离以找到how much
给定从 Kinect 深度图获得的两个连续 3D 点云 1 和 2(不是整个云,比如说使用 OpenCV 的 GoodFeaturesToMatch 从云中选择的 100 个点),我想从 1 到 2
任何人都可以使用 Raspberry Pi 从 Kinect 获取相机数据吗? 我们想制作一个无线 Kinect 使用以太网或 WiFi 连接它。否则,请告诉我您是否有可行的替代方案。 最佳答案 要回
例如,我站在 Kinect 前面。 Kinect 可以识别关节,并将它们作为数据结构公开。到目前为止我已经很清楚了。 那么,我们能否将高度定义为头关节 - ((LeftAnkle + RightAnk
我尝试将从 Kinect 接收的图像保存为 png。我从包装中取出了一个 kinect 样本,它在两个平面上显示了深度和颜色图片,我对它们进行了修改。我尝试了不同的方法,例如直接保存 color32
kinect 真的很新。我正在尝试阅读我找到的 Material 。我找到了技术规范和 .net API 文档,但可以弄清楚我正在尝试做的事情是否可行: 我可以指示 kinect 物理移动相机吗? (
据说 Microsoft SDK 可以访问 Kinect 的内在参数,但有人知道它返回的深度图像是否实际上是不失真的吗?我找不到任何相关内容。 如果我脱离主题,请告诉我,尽管我认为这是一个隐式编程问题
由于传感器之间存在红外干扰,因此使用多个 Kinect v1 传感器非常困难。 根据我读到的内容 this gamastura article ,微软通过 Kinect v2 传感器测量深度的飞行时间
我只是对 Kinect v2 的主动红外图像和深度图像之间的差异理解感到困惑。谁能告诉我主动红外图像与深度图像相比有什么特殊功能? 最佳答案 在深度图像中,像素的值与通过飞行时间测量的距相机的距离相关
我可以从 Kinect 获取深度帧,然后修改帧中的数据。 现在我想使用修改后的深度帧来获取骨架数据。 我该怎么做? 最佳答案 好吧,我发现使用 microsoft kinect sdks 无法做到这一
This programming guide暗示这是可能的,所以我想知道到底是什么。 但是,现在它不起作用。 主机操作系统为 Vista 64 位,VMWare Workstation 6.5.3 运
我是一名优秀的程序员,十分优秀!