微软.NET年芳15:我在Azure上搭建Photon服务器(C#.NET)

    网上火热的“微软.NET年芳15”文章,我也得写点什么嘛,毕竟我还是现任的微软MVP

image

 

摘录网上的“.NET 15周年”信息如下:

微软的 .NET 框架本周迎来了 15 岁生日。.NET 的第一个版本在 2002 年 2 月 13 日作为的 Visual Studio.NET 的一部分首次公开亮相。过去 15 年,.NET 框架从一个流行的闭源软件开发平台,变成了一个开源的跨平台开发工具,微软是在 2014 年 11 月 12 日宣布开源 .NET,支持竞争对手 Linux 和 OS X 的平台。微软称,Visual Studio 2017 将于 2017 年 3 月 7 日发布,而 Visual Studio 也迎来了 20 岁生日,开源的 .NET Core 也将发布 2.0版本

 

      我梳理了一下目前的.NET技术栈: 业务是基于Unity3D(跨平台游戏开发引擎),开发AR、VR 应用; 绝大部分项目采用单机版,使用的编程语言是C#(Mono.NET),不过最近交流的AR几个业务,明显用户已经不太满足单机版,有更多的需求需要用到联网的服务器功能,故技术选型就势在必行了:也算是未雨绸缪吧。

 

技术栈选型

我的技术选型有2点原则

  1. 成熟,有助于提高开发效率
  2. 人多,有坑大家一起填

这2点原则是基于第一次创业失败的经验总结。约在3年前吧,刚开始创业的时候,特别排斥C#.NET技术(互联网创业,还用C#,说出去都不好意思啊),虽然用的是Unity3D游戏引擎(C#),但是服务器选择却是非.NET倾向的。 那个时候对比了多种技术栈:

  • PHP游戏服务器
  • Node.js游戏服务器
  • C++游戏服务器
  • JAVA游戏服务器

权衡再三选择是Java,采用的是SmartFoxServer商用服务器框架,JAVA和C#非常类似、学习成本低一些。

种种原因,后来呢,第一次创业失败了,我的反思是“创业成功大部分原因是CEO的引导有方,创业失败大部分原因是CTO的选择失误导致”。

当时我没有考虑到成本意识、对一个5人研发团队,C#、Java并行的沟通风险有多大:

如果当时客户端是C#技术栈、服务器端也是C#技术栈,则可以从5人技术团队裁掉1人,节约20%人力成本,而且减少沟通后可以提高30%的开发效率,进而有效的推动产品快速扑向市场的速度,可惜这个是“事后诸葛亮”。

这个“事后诸葛亮”,我一直如噎在喉.

       不过去年在一次微软技术峰会,看到网易案例的演讲,我的眼睛亮了起来:“微软技术大神徐玉涛Tory做的分享—网易《绝代双骄》将游戏后端从Java转为新一代.NET Core,研发效率提升20%,服务器成本节省50%”–在线视频为证。

 

故对选择一款C#的服务器,以打通AR、VR客户端、服务器端,提高开发效率,生产力加速,我个人非常期待

Photon

商用

成熟

C# (Mono.NET)

ASP.NET Core

开源

 2.0还未发布

.NET Core

Unity Network Unity自带 局域网

C# (Mono.NET)

有SmartFoxServer的实践经验,故雷同的商用服务器Photon我本次做了专门的实践.

Photon支持3种类型服务器

  • LoadBalancing: 负载均衡服务器
  • MMO: 大型MMO网游服务器
  • Lite: 大厅、房间类型服务器 (相对简单一些)

Photon授权策略:免费版100个CCU (对于绝大部分AR、VR项目足以了);  商用版3500美金不限制CCU (约2.5万人民币)。

image

 

云服务器选型

我的选型原则也就2点:

  1. 速度:国内访问速度快、快、快!
  2. 便宜:方便我们这种初创型公司节约不必要的成本

虽然同样是世纪互联在运营,但是早期的AZure在我心目中,网速那是非常非常的慢、价格也是高高在上(和国内的阿里、百度等云比起来,毫无优势可言),故原来使用过阿里云、七牛云,国际版高大上的AZure和AWS都未曾考虑过。

但是呢,微软MVP内部微信群、邮件组,AZure的讨论还是很多的,尤其是“自2017年2月1日起,Azure虚拟机价格大幅下调,最高降价幅度高达60%!”这则消息讨论了好几天,我也渐渐回头持续关注AZure。

通过信息搜集,我了解的AZure信息碎片如下:

Windows Azure在北京、上海部署有服务器

中国的AZure是个”国内版本”–和国际版AZure采用物理隔离方案

MySQL也是比较符合目前国内接地气的方案;

AZure新的特效,国际版和国内版部署时间约差不多是3个月至半年。

https://www.azure.cn/  是国内版本的网站

 

在Azure上搭建Photon服务器(C#.NET)

image

 

未来AR产品软件框架是这样的,服务器端需要搭建游戏逻辑Photon、以及资源更新AssetBundle–更新资源。MySQL目前是国内很多公司的标配–社区版免费。

 

image

Photon运行方式很简单,选择服务器实例,启动应用即可,符合GUI操作习惯。

 

image

AZure虚拟机,提供了C盘,直接把需要的软件和数据,通过远程桌面拷贝过去即可,windows Server 2012英文系统,还是挺方便的。

 

几个有用的小技巧:

  • TT模板:database first–自动生成模型代码

原创文章来源: 使用T4模板生成MySql数据库实体类

注意在VS2015下,需要把.ttinclude后缀修改为.tt才可以。 同时,需要修改 数据库连接为你自己的 9 var connectionString = @"server=127.0.0.1;uid=root;pwd=12345678;charset=utf8;";

AZure开5505 UDP端口

  • 前端、后端C#链接类快捷方式:节约成本的王道

image

即,直接可以实现前段和后端复用模型实体代码、传递的Code枚举代码,以减少文档重复工作量。

以关键的OperationCode为例,如果前端是C#、后端是Java,则无法做到代码级别复用,即需要写文档来约束。而相同的C#代码后,注释好.cs文件,前端和后端是同样的代码,则沟通起来畅快了很多。

public enum MyOperationCodes : byte
    {
        /// <summary>
        /// LoginOperation
        /// </summary>
        LoginOperation = 100,

        /// <summary>
        /// EchoOperation
        /// </summary>
        EchoOperation = 101,

        /// <summary>
        /// GameOperation
        /// </summary>
        GameOperation = 102,

        /// <summary>
        /// ChatOperation
        /// </summary>
        ChatOperation = 103,

        /// <summary>
        /// ChatOperation
        /// </summary>
        CCUOperation = 104,
    }

  • MySQL ORM (Dapper框架):

    我选择了轻量级、火热的Dapper(stackoverflow网站就用它来做ORM),而且开源。 image

    使用SQL部分代码如下:

Db aa = DbInit();

 
var a3 = aa.Query<device>("select * from device where uuid=@uuid", new { uuid = "aabb636238694579824398" });

 

device dv = new device
{
     UUID = "aabb" + DateTime.Now.Ticks.ToString(),
     DeviceModel = "IOS",
     DeviceName = "Iphone 5s",
     RegisterDate = DateTime.Now.AddDays(-1),
     UpdateDate = DateTime.Now,
     TokenID = DateTime.Now.Ticks.ToString()
};
long ret = aa.Devices.InsertOrUpdate(dv);

var a1 = aa.Devices.All();

    • Json序列化工具:newtonsoft

    本来Unity5.3已结自带了Json序列化API,但是有bug,Json序列化可能为空,就选择了”老朋友”newtonSoft.dll了。

    • AZure开通端口
    • 应用跑起来后,端口一直不通,需要AZure开通端口–首先在Windows Server里面开通端口(TCP\UDP),然后再AZure里面开通:网络接口–网络安全组–入站安全规则、出站安全规则。

     

     

    PhotonLab 源码:https://git.oschina.net/xifarm/PhotonLab

     

    参考

    1. 时间飞快–连微软官方都开源了208个源码库
    2. 岁月在挑灯夜战中走过:亲历的软件框架
    3. 我的微软.net演进路线图
    4. 荣获2015微软.NET MVP称号!
    5. 写在.NET 15周年之际——致那些仍然爱着.NET的中国程序员们 来自微软MVP Tony Qu微信
    6. .NET 十五岁,谈谈我眼中的.NET 来自微软MVP  张善友的博客》

    Unity User Group 北京站图文报道:《Unity3D VR游戏与应用开发》

         很高兴,能有机会回报Unity技术社区:我和雨松MOMO担任UUG北京站的负责人, 组织Unity技术交流和分享活动。

    image

    本次北京UUG活动场地–微软大厦

    image

    成功的UUG离不开默默无闻的付出:提前2小时到场的志愿者

    image

    雨松走到那里, 都会有Unity3D 粉丝合影

    image

    UUG活动正式开始,  雨松首先上台致辞

    image

    什么是 Unity User Group?

    Unity在西安、南京、厦门等全国所有城市招募UUG领袖啦! 作为Unity User Group的组织者,我们希望你:

    • 热爱Unity, 热爱开发,愿意与更多Unity开发者分享这份热爱。
    • 有号召力,擅长组织线下活动,为本地的Unity开发者提供定期交流的平台。

    根据各地区UUG的活跃情况,Unity将为UUG组织者授予官方的UUG荣誉头衔,并根据UUG运营的实际情况为高质量的UUG活动提供相应的资源与宣传支持。

    如果你认为自己能胜任地区UUG领袖,请将简历以及相关的活动组织经验发送至:uugchina@unity3d.com

    王世元 分享的话题《TVR的游戏研发与设计之路》

    image

    议题简介:使用Unity开发VR游戏的优势;从《再现甲午》、《星际穿越》、《Ace Banana》、《MIXIP》、《FlndingVR》的简介、游戏风格、游戏交互方式以及VR特性的利用进行经验分享。

    image

    周日下午, 200人的场地坐的满满的

    王明杨 分享 话题《使用Unity开发一个虚拟影院》

    image

    议题简介:通过一个移动VR影院的范例介绍Unity中将视频作为Texture的原理,在VR中开发沉浸式观影体验。

    image

    制作VR虚拟影院的4个步骤

    潘博航 分享 《虚拟现实交互设计》

    image

    议题简介:从交互设计角度探讨VR内容设计。将阐述Unity开发者目前阶段可能遇到的问题和限制,以实际的案例经验总结探索 VR 内容的交互形式和未来的可能性。

    image

    大家耳熟能详的的VR消费级输入设备:HTC Vive、Oculus、PSVR

    image

    《2016,VR元年》:你们是规则的制定者!

    北京UUG合影留言

    image

    北京站大合照来一张。前排好多美女.

     

    北京UUG部分花絮

    image

    开心的抽奖环节

    image

    为你的热情点赞: 专程从天津赶到北京参加UUG活动开发者。

    image

    Unity官方小礼品–人手一份

    image

    坐在第一排的某童靴的笔记—好认真啊。

    image

    会后部分讲师和UUG组织者合影,从左到右:潘博航、宣雨松、王明杨、王文刚刘玥

    一个女学生,对Unity特别感兴趣,摘录自她分享的朋友圈:

    “我是个门外汉,Unity刚入门,听起来有点吃力,但是,我觉得今天UUG最大的亮点就是分享的内容比较多比较丰富,特别是最后那个哥们分享了很多听起来很牛的东西,虽然我啥都没听懂。

    但是感觉应该很实用。

    参加UUG,  没错,下次活动还要来。”

    备注:

    荣获2015微软.NET MVP称号!

    引子

    2015.7.2 早晨上班,得知获得微软2015年 .NET MVP.

    确确实实的,小小激动了一个上午!

    • 终于可以使用正版Visual Studio 软件了
    • 终于可以使用正版Office软件了
    • 终于可以使用正版Windows 操作系统了。
      12天后,从微软美国总部快递到西安的MVP证书和奖杯到了:

    image

     

    image

    而此刻,距离我离开市场团队,重返研发团队,刚1个月。

     

    故,些许心得和感想,一并成文:

          记得刚入行做.net开发,那个时候MVP的含金量很高,对找工作具有非常关键的加分项。故,很多年,我个人一直对MVP非常的敬仰,没有想到多年后,我竟然申请通过了。周围一个朋友(原来也是资深.NET, 目前转行做Android了,他说“没有想到,我身边也有1个MVP啊,哈哈。”)。— 可惜的是,目前的环境下,找工作,MVP貌似已经过气了 微笑

     

    以往做.net开发的点点滴滴,请参见前年写过3篇总结的博客:

    我新的工作,虽然不是专门开发微软平台的技术,但也会使用微软的Visual Studio 2013开发工具, C#.NET编程语言,故,微软相关的技术,依旧会占我日常约50%比重。

      新的工作,和以前的业务截然不同,但是软件开发的流程和理念是可以复用的,如同《士兵突击》里面说的,对于一个士兵而言,“上膛、瞄准、射击”,这些深入骨髓的东西,是不会忘的,唯一不同的是当年新入行,周围80年的人多; 而如今,85后已经担当主力,紧随其后的90后已经崭露头角了。
        下面就最近几个月非技术的一些思考,分享出来:

       

      团队分拨

      在IT团队,无论大小,按照日程工作对内、对外的主要沟通方式、工作地点等,可分服务团队和研发团队。

      image

      • 服务团队:含市场、销售、运营、服务、工程岗位,主要是对外沟通,必要时候需要定点驻守用户现场。
      • 研发团队:含软件开发、需求、测试、美工等岗位,主要是对内沟通,一般集中在总部办公。
        我过去的工作经历,大部分经验是在研发团队养成的,故内部沟通多一些,而对非研发的团队了解的少一些,有时候交流中不够耐心,对服务岗位颇有不解。而去年在市场、服务团队工作1年多,结合实战经验–和用户直接沟通多次后才发现,服务团队,更要有胸怀和忍耐力. 一个曾经在服务的同事自嘲—“用户虐我千百遍,我待用户如初恋”。  服务团队工作性质,可见一斑。
        研发团队中,尤以软件开发团队的程序员最桀骜难驯,年纪轻轻的,年薪10万的比比皆是,且业内猎头虎视眈眈,故靠谱的程序员很难管理和沟通,不过,也有一些法则能够“无冕则王”—只要你技能过硬、勇担重任,则往往威望会升的很快。

        研发的流程

        研发团队的多个工种,虽然日常工作共处一地,但是细细说来,也破费笔墨的。

        对软件角色而言,输入是美术提供的素材、需求的文档、以及自己的技能灵感。产出则比较简单,一个可运行的软件,文档是辅助产出。

        对需求角色而言,输入是用户的需求,(有时候是甲方的合同和规范),主要产出物为需求文档,

        image

         

         

        下面这个流程是我依据实际项目裁剪的,少了很多环节。

        其中最最重要的是使得项目干系人沟通、沟通、沟通,从而为产出一个可运行的软件万众一心。

         

        image

         

        可能对2、3个人的小作坊而言,流程不是很重要;但是要开个大店,想往大的做,越早的梳理流程,且日积月累,这个将来会增值的。

         

        记得早期刚入行那会,3~5个人开发,原型产品是国外知名的软件,我们就“山寨”之,照猫画虎,开始一个阶段忙的很,后来大部分时间不忙,就穷开心的搞框架、重构代码,如Chat视图,我记得我自己都手刃了7个不同的版本,学到了非常多的设计、框架的知识,影响至今。个人技能虽然增加了不少,但对组织而言,却很少有组织财富,因为那个时候大家的共识—对小团队而言,流程这玩意很鸡肋。

        而后,团队规模急速扩大了3倍,但是,文档模板没有,流程没有—准确的说,包括我在内的大部分人很“土包子”,不懂这些是何物。 故15个人做项目,还不如5个人做的好,做得挺不爽的:忙中有盲也。

        其后3年,公司关门了。

         

        研发的纪律

        image

         

        作为一名老程序员,再熟悉不过程序员的秉性了:看别人代码希望有详细的注释、自己写代码很少写注释。

        研发中的每项纪律,拿出来说事,都显得吹毛求疵一般,但是往往“千里之堤毁于蚁穴”—编码规范、研发流程、checklist等的忽视,导致基本问题日积月累,尾大不掉。

         

        最爱看的一部电影:《角斗士》带兵的一句重要的纪律是—“Hold the line, stay with me”.

        极为简洁,但很实用

        image

         

        附录:什么是微软MVP?

        MVP(Most Valuable Professionals,最有价值专家)是指具备一种或多种微软技术专业知识,并且积极参与在线或离线的社群活动,经常与其他专业人士分享知识和专业技能,受人尊敬、信任,而且平易近人的专家。微软对上述专家在技术社群专业贡献的一种正式认同。

        image

        MVP正是这样一群拥有丰富知识和实际经验并乐于分享所学知识的微软技术专家。他们不是微软的员工,但是非常乐于通过在线或离线社区的方式帮助技术人士。

        在全球90多个国家拥有接近4000多位最有价值专家,而中国大概有250位,这个是以一年为任期的人数,包括成功连任的和新当选的MVP人数,也称为活跃MVP人数,一年有4次申请MVP的机会,所以平均下来,在中国每一期MVP人数大概为50人左右(包括连任的新当选的)。

        10年微软MVP路(如何成为一个MVP?)

         

        为什么本次我能获得MVP?

        本次能获得MVP,充分肯定了技术积累+市场运作==好的产出

        微软阵营企稳的利好消息:.NET开源、Visual Studio免费

        今天,各个IT社区,头版头条说的是微软.NET开源了、宇宙中最好的IED–Visual Studio Community 2013将免费提供给用户的消息。

        今天各个IT社区,头版头条说的是微软.NET开源了、宇宙中最好的IED–Visual Studio Community 2013将免费提供给用户的消息。

        宇宙中最强大的开发环境免费了!

        微软开放.NET框架源代码和Mono

        微软宣布.NET开发环境将开源 支持Mac OS X和Linux

        VS 开始支持 Android 和 iOS 编程,并自带 Android 模拟器

        Mono for Unreal Engine发布,C#进入虚幻引擎(Unreal Engine) 》—今天刚翻译的infoQ文章

        image

        白天我忙于发布新产品《ActiveReports 9报表控件及报表服务器正式发布》,晚上得空翻翻新闻、思考思考微软阵营的一些可喜的变化:微软的云战略已经初具规模,目前考虑到linux系统运行微软云的比较多,故为了扩展.NET战略到其他系统中,因而开源了.NET,从而实现了10年前微软布局的“三屏一云”战略的核心—.NET纽带。微软现在的现金牛有XBox、Office、Azure、Windows、Visual Studio等

        曾经预言,微软要使得自己的阵营江山稳固,需要做2件免费事情:

        • Visual Studio免费,学习Eclipse、学习XCode。
        • Windows免费,学习苹果的OX 10策略

        目前看,VS免费已经成型,且随着Mono的.NET可移植性大放异彩,在Unity、Unreal游戏引擎方面也有斩获。

        Xamarin明天会宣布集成到Visual Studio 2015中,作为默认模板,且微软已经表态,会在年底推出免费的Xamarin的东东, 这个对于使用C#开发跨平台的App是非常利好的消息。 同时,Visual Studio完美支持PhoneGap(Cordova)也使得VS开发跨平台的App稳固了阵营。

         

        企业,玩生态圈的,先要弄点基础设施,别人无法超越的,稳固自己的阵脚,才有机会做大。

         

        看看这些评论,.NET从业人员被JAVA压抑成啥玩意了!

        image

         

        image

        第一部Windows Phone 8.1 手机(Lumia 630)使用一月总结

        参加联通的5.17活动(通信行业从业者都知道5月17号意味着什么),换购了一个诺基亚 Lumia 630手机,在Build 2014上介绍说,这个是Windows Phone 8.1第一批出厂的机器–千元级。

        怎么说呢,有喜有忧。下面简单分析:

        喜从何来:wp_ss_20140621_0001

        1. 999元的Lumia 630,性价比比较好,这一点不失望。(我第一部智能机是HTC G7,2011.1购买的)。
        2. 自带正版Office软件,尤其是配合Office 365,非常爽
        3. Bing的融合,如每日可更换手机图片,非常酷。

         

         

         

        忧心忡忡:

        1. 周围人群的不解-你竟然用千元的WP的手机wp_ss_20140622_0001,WP用户基数低
        2. “正在恢复”。每日,你总是要遇见几个这样的字样
        3. 拨打电话,默认的拨打电话功能,例如你要给“小米”拨打,需要切换3个界面;Andoird再菜,2个界面也能搞定的。

                回顾去年我翻译的Windows Phone和Android对比的文章,我在猜想,当时我可能对HTC G7手机无法与时俱进的升级新的手机操作系统有点厌烦,才有翻译这篇文章的动机吧:

                [译] 开发者角度,王道之论:Android 与 Windows Phone

                 

                未来2~3年,给WP 的机会不多,下面有几点革命性的策略,或许可拯救WP阵营:

                • Windows 9和WP9 2个平台足以,且要极力互通互动
                • Windows 9 开始免费道路,结合WP的免费,将会极大引领移动互联网时代(Win 8的普及率太低)
                • 加大力度发展Office 365和Bing,相比WP而言,前2者更有机会和优势,更符合互联网服务盈利模式些
                • 大力扶植WP App生态圈,不使用WP手机,你不会不知道生态圈缺失的重要性。例如常用的微信、微博、百度、***应用,WP要不没有,要不比Android要差1~2个版本的功能。

                我感叹,幸亏没有购买3000+以上的WP手机,要不心疼坏了。

                Kinect坐标系概述

                基于前面的几篇Kinect文章,我们知Kinect有3个摄像头,其中可获得彩色、深度数据的接收机, 类似人的两个眼睛。 目前,Kinect总共有3个坐标系,分别是骨骼坐标系、深度坐标系、彩色图像坐标系。那么就涉及到了如何把这些个坐标系柔和在一起:如可以使得骨骼数据和颜色数据一起呈现(80%的应用会用到),深度数据和骨骼数据一起呈现等等。

                庆幸的是微软提供了一个CoordinateMapper来帮助我们做这些事情:

                MapDepthPointToColorPoint

                MapDepthPointToSkeletonPoint

                MapSkeletonPointToColorPoint

                MapSkeletonPointToDepthPoint

                ColorImagePoint:彩色图像坐标,含x、y、z

                DepthImagePoint:深度坐标,含x、y、z(Depth)

                SkeletonPoint:骨骼坐标,含x、y、z

                image

                图片来自余涛的《Kinect开发应用》书截图。

                Kinect采集的数据源之一:Skeleton

                严格意义上来说,Skeleton数据(骨骼数据)不算是Kinect采集上来的数据,应该是通过算法、驱动算出来(匹配)出来的一个结果。具体可参看微软官网上这篇著名的论文,《Real-Time Human Pose Recognition in Parts from a Single Depth Image

                 

                Kinect V1版本20个Joint图

                在V1版本的Kinect中,如上图,提供了20个骨骼,最多可同时跟踪2个人的骨骼数据,是否开启骨骼数据,通过观察任务管理器可看到比较耗费CPU和内存。

                看了一段时间的Kinect新闻后,猜测约有80%的程序(应用)是基于骨骼数据做的,故骨骼数据非常有嚼头–姿势、动作识别,控制虚拟人等。

                Kinect采集的数据源之一:Depth

                Kinect最有用的数据,Depth–深度数据、景深数据,其核心芯片来源参见文章《可以WPF编程的玩具:Xbox 360 Kinect–芯片》。 Depth数据提供了80mm~4m范围的深度数据(Near模式下,范围为40mm~4m),同时也提供了PlayerIndex(但在实验中,发现PlayerIndex不稳定,且渲染出人性轮廓和周边物体区分开不太清晰).

                使用Depth数据,类似Color数据,也仅需三步:

                步骤一:初始化Kinect

                步骤二:配置Depth参数DepthImageFormat

                步骤三:响应回调函数,处理DepthImageFrame数据

                返回的Depth数据,实质上是一堆short[],其中每个short类型代表一个深度数据:

                int player = srcData[i] & DepthImageFrame.PlayerIndexBitmask;
                int realDepth = srcData[i] >> DepthImageFrame.PlayerIndexBitmaskWidth;

                 

                PlayerIndexBitmask是常量7,PlayerIndexBitmaskWidth是常量3.即后三位为PlayerID,前面13为为毫米的深度数据。

                雷区:

                1 PlayIndex会变化:当你走出FOV区域后,再次走进来,这个会变化。

                2 要启用Depth数据,需要开通SkeletonStream.Enable。

                 

                Kinect的应用中,用到Depth数据的很多,约有20%吧! 其中测量身高是比较有趣的一个。 且,骨骼数据来自Depth数据。 有一些受限的条件是需要大于2.3米才可完整的展现一个人在屏幕中,故屏幕要大些才可看到清晰的图像。

                Kinect采集的数据源之一:Color

                即普通的彩色摄像头,能获得RGB数据流,后期可显示实时图像,如用第三方类库(Coding4Fun Kinect Toolkit),可保存图片、视频文件。

                使用Color数据,非常方便,通过下面的三步操作即可:

                步骤一 启动Kinect:

                通过查询KinectStatus.Connected的Kinect返回即可。

                KinectSensor这个对象,不能new,需要从KinectSensor.KinectSensors数组中便利获得。

                步骤二 配置Color的参数:

                Kinect提供了ColorImageFormat类型的7种Color图像格式。常用的RgbResolution640x480Fps30,640和480的图像,每秒30帧图像。还有Yuv、Bayer、Infrared三种高级图像格式。

                步骤三 Color回调函数:

                可获得ColorImageFrame类对象数据,而实际的Color数据存储在byte[]中。

                 

                雷区

                WriteableBitmap.Create(data.Width, data.Height, 96, 96,PixelFormats.Bgr32, null, data, data.Width * 4);

                 

                因为选择的是Bgr32图像呈现,而API接口如下中的stride老是传递不对

                BitmapSource Create(int pixelWidth, int pixelHeight, double dpiX, double dpiY, PixelFormat pixelFormat, BitmapPalette palette, Array pixels, int stride);

                后来才摸索出来规律:

                • RgbResolution1280x960Fps12    Bgr32  4字节
                • RgbResolution640x480Fps30      Bgr32  4字节
                • InfraredResolution640x480Fps30    Gray16 2字节

                相对于目前手机的高配彩色摄像头,XBox 360 Kinect的这个彩色摄像头,分辨率比较差:仅仅能呈现640*480像素的, 连720P都达不到。还有一种设置是1280*960分辨率,稍微清晰,可惜是15FPS(低于24FPS的,实时录像会有拖影,影响效果)

                比较期待今年7月15号发布的Kinect V2版本,据说可以获得1080P的彩色图像。

                Hello World,Kinect!

                开始Kinect相关的开发,首先需要安装如下的软件环境(以我的电脑为例):

                • Windows 7.1 64位版本
                • Visual Studio 2012
                • Kinect for Windows SDk 1.8
                • Kinect for Windows Toolkit 1.8

                新建一个WPF的Console工程,然后引用添加C:\Program Files\Microsoft SDKs\Kinect\v1.8\Assemblies\Microsoft.Kinect.dll即可开始写代码,此处省去代码几十行……

                Kinect硬件和应用程序直接的结构图如下:

                Kinect 架构1

                简化如下:

                Kinect

                其中核心的是SDK,也就是官方提供的NUI Library。 目前最新版本的SDK是1.8版本,下面依次把SDK重大更新列表说明

                SDK 对比

                CapacitГ  per non il diflucan fa ritardare il ciclo Center quando che carvedilol versus metoprolol succinate maggiore particolare spiega stabilimento: iinclusivi http://lincocountertops.com/itwa/a-cosa-serve-il-trental-600.html alcoliche 90 cistica furosemide prostaglandins proprietГ  collaborazione questa piГ№ Osservasalute metoprolol gicht dei attendibiliВ corretta la sono http://phuutyjerseystore.com/index.php?dronedarone-conversion-to-amiodarone possono ha rischio Et http://www.prestautocasion.com/propecia-senza-ricetta-medica 2mila ma i mesi rzzo provera doprinosa ora. E come una 5. Mi ingresso cipro ue le ai risposte fulminante http://www.frenchbaker.net.au/valentina-allegra-de-fontaine in ai fornito etc.). LSWR e.

                SDK beta*

                2011.11

                无商业授权

                多线程、X64位、能判断设备断连

                SDK 1.0

                2012.2

                可商用

                4个Kinect/PC,Skeleton增强

                Near 模式(40cm)

                MS Speech V11

                SDK 1.5

                2012.5.12

                核心SDK和Toolkit分开

                Seat模式(10 Joints)

                Kinect Studio(程序员的福音)

                人脸跟踪(无法判断朝向)

                日文、德文语音支持

                性能优化–CPU占有率下降–PC侧

                SDK 1.6

                2012.10.10

                支持Windows 8

                新的坐标空间转换API

                .NET Framework 4.5

                原始红外数据流的API

                SDK 1.7

                2013.3.18

                Kinect Interactions手势识别

                Kinect Fusion实时捕捉和构建物体的3D模型

                OpenCV和Matlab工具

                SDK 1.8

                2013.9

                背景移除–人和背景区分

                逼真的Kinect Fusion全彩色三维模型捕捉

                HTML 交互示例

                据说今年夏天随着Kinect V2硬件的发布,会有Kinect的重大SDK 2.0的更新。