zoukankan      html  css  js  c++  java
  • 《Kinect应用开发实战》读书笔记---干货集合

    本文章由cartzhang编写,转载请注明出处。 所有权利保留。 

    文章链接: http://blog.csdn.net/cartzhang/article/details/45029841

    作者:cartzhang


    说明:本帖内容同时在GALAXIX的Kinect区发表。《Kinect应用开发实战》读书笔记

    此书内容针对SDK版本为1.5版本,跟后来版本之前有微小的差别。


    《Kinect应用开发实战》读书笔记



    对于初学来说,本书很不错,讲述了挺多的基础和细节。
    非常感谢本书作者。
    以为阅读过程中记录的笔记,希望对各位有用。
    ------------------------------------- 
    1. KincetWindows版本和XBox360版本,区别其中是window版本针对Window平台做了优化,并且支持近景模式,而XboX的不支持此模式。
     
    2. 书中书Kinect传动马达上下覆盖角度为正负28.Kinect官方指导上写的是正负的27度。其实,实测的时候,可能得到的角度会超超过这个。因为角度本身就有误差的。
       具体可参考我博客里面的:http://blog.csdn.net/cartzhang/article/details/44588097
    3. Kinect SDK 建议,避免频繁的调用Tilt功能,最低标准是每秒不超过2次。(或每20不超过15次)调用。
       我之前用的时候,一秒都调用好多次啊,汗颜啊。
    4. Kinect For Xbox 360有效视野范围:0.83.5米,一个人推荐最佳距离为2.26米,两个玩家的距离为2.5米。
     
    5. 深度图像默认大小为320*240,而彩色图像格式默认为640*480的。
     
    6. Kinect 人脸识别是抽取人脸中层结构特征,识别率大约为85%
     
    7. 深度图像获取是激光的散斑原理。深度图像到游戏Avatar是需要一些边缘检测,噪声处理,然后玩家的深度图区域分割,剔除无用背景信息,识别和计算人体部位,映射为骨骼节点,也就是达芬奇的维特鲁威人。
     
    8. Kinect硬件采集,芯片处理不是延迟的主要原因,而软件的处理。 Kinect 对于有2米左右物体而言,XY维度上的精度为3mm,Z维度为1cm。注意单位是毫米啊。
     
    9. Kinect SDK一代版本,支持20个骨骼节点的三维坐标,因为头部只有一个点,因此无法识别面部朝向。当然的SDK不支持手指关节的跟踪精度。本书版本为1.5版本,网上查1.7同样不支持。1.8不清楚,估计也不行。
       Kinect安装了4个麦克风阵列,可以在左50度到有50度的范围内推断说话者的声源位置。
     
    10. Kinect SDK系统架构


    11. 应用程序根据NUI 提供的API,选择不同质量,格式,带宽的图像数据。图像的数据流是一组连续静止图像帧的集合。在初始化NUI时,可设置图像分辨率、图   像类型和视频流缓冲区大小。一个应用程序最多可以申请4个缓冲区,建议为2个。


    12. 深度图像的每个像素有2个字节构成,共有16位。高13位物体的距离,以毫米为单位,低3位,用户的索引编号(07),其中0表示没有找到用户。


    13. 获取数据流模式有两种:一个是轮询模式,使用GetNextFrame。一个是事件模式,注册数据流的FrameReady事件。不能对同一数据流同时使用两种模式。
      在某些时候,为保持深度图像和彩色图像尽可能同步,可采用轮询模式。
    14. 关于点坐标:
          a) 深度图像的坐标系,XY为深度图像的像素坐标,Z为深度值,单位为毫米
          b) 骨骼坐标系统,XYZ为空间坐标,单位为米。
          c) 彩色图像坐标系,XY为彩色图像的像素坐标。
     
    15. 骨骼镜像为X轴反转。


    16. Kinect 交互设计七条军规
            a) 控制手势集符合人类的自然手势
          挥手来获取焦点控制;悬停控制“确定”;双手靠近或伸展来表示放大或缩小。所有姿势必须是有意识的,不能与用户休息或放松的无意识动作一致。
            b) 让用户的肢体移动幅度尽量的小
         让菜单在用户触手可及的范围内。
            c) 操作界面的对象采用Metro(美俏)风格。
          可配合“磁石效应”按钮,可自动吸附。
            d) “确认操作”保持简单、一致
         由于Kinect没有Press能力,只有光标的跟踪能力。
         一个是悬停,选择的悬停建议时间为1.5s
         一个是滑动;
        一个实手掌前推(个人觉得功夫熊猫里面的左手来向前出击来确认也是很棒的)。
            e) 手势操作尽可能在同一个平面内。
        降低识别的复杂度。
            f) 从三维的视角去看交互设计
     
           g) 配有简单明了的手势说明
                i. 静态姿势。
                 ii. 动态姿势,动图来表示。
     
    17. 骨骼数据的处理十分消耗CPU的,当应用程序暂时不需要处理骨骼数据时候,可以考虑暂停骨骼跟踪(SkeletonStream.IsEnabled=false;),暂停骨骼跟踪可使游戏画面更为流畅。
        当然,需要注意,暂停会有副作用,首先,重新会导致延迟几毫秒;其次,会使传感器重新初始化,而此时时间戳和帧编号就会重置为零。若用到时间戳和帧号处理逻辑说话,需要注意。


    18. 在处理Kinect数据流的过程中,处理复杂的图形应用采用“轮询模型”,而不是基于事件机制来获取数据。轮询模型可以很好的调节应用的频率。


    19. 手势识别大致分为几种:
                a) 算法匹配:根据关节位置,结合三角几何快速匹配。
               b) 模板匹配:根据预设模板进行数据匹配,测量相似度。
               c) 神经网络和支持向量机:神经网络,具有自学习能力,具有分布性,有效的抗噪声和处理不完整的模式,以及具有模式推广能力;支持向量机,是基于统计学理论发展,与神经网络有更好的推测能力。
                d) 统计分析和机器学习:基于概率分布,一般都是贝叶斯相似理论。此技术不能对原始数据直接进行识别,需要对大量数据提前特征向量。


    20. 暂停手势,由微软提供用户的引导手势之一。通用的暂停为计算左臂与身体的夹角,根据阈值就可以判断。


    21. 使用Kienct 来跟踪手掌和手指
                    a) 多点触摸,网址:http://candescentnui.codeplex.com/开发语言为C#,基于OPenNIKinect SDK
                   b) GesturePak: Github地址:https://github.com/carlfranklin/GesturePak2V1
     
    22. 最后的推荐:
            a) OpencNIPrimeSense 
             b) Openkinect ---开源的力量
            c) OpenCV 
           d) KinectJS ---JavaScript
     
    --------The End--------


    若有问题,请随时联系!

    非常感谢!


  • 相关阅读:
    白盒测试 语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖(转)
    白盒测试--基本路径测试法详细说明和举例
    测试用例编写规范
    EF数据库连接时候出错
    元祖,字典,列表及其内置方法
    字符串、列表练习’
    数字,字符串,列表及其内置方法
    流程控制代码练习
    易出错知识点
    流程控制if、while、for
  • 原文地址:https://www.cnblogs.com/qitian1/p/6461958.html
Copyright © 2011-2022 走看看