大家知道Kinect 2.0 / Xbox Kinect One更新也有些许时间了,对于C++或者C#开发者而言并不是很麻烦的一件事情,当然对于Unity用户甚至是福音(官方推出了支持U3D的开发组件),但是对于AS3的开发人员,灾难性的事情来临了,airKinect在Kinect v1 1.6时代就已经不更新了,大伦子的Kinect4Air虽然支持v1.8的握拳、面部、抠像等等高级功能,但是也仅仅支持kinect v1,接下来好吧。。。福利来了。。
首先让我们看下基于Kinect v2硬件的新版Kinect4AirV2都有哪些新特性: 1. RGB图像支持(也仅支持)1920*1080的高清彩色位图; 2. Depth深度图像512*424图像; 3. 6人25个骨骼点的全面支持(之前虽然也支持6人追踪,但是仅仅有2人的全身21个骨骼); 4. 与之请的Kinect V1一样,默认支持用户的握拳识别; 5. 仅需要ane一个文件,不在需要庞大的外部opencv库文件; 6. 接口方面全面兼容airkinect 类与接口(基础结构基本一样,当然还是有许多差别的,什么我是不是抄的?好吧。。。让我怎么说呢。。。我要是抄,前提也得是他做完了V2的开发了呀,对吧。。)
功能预览:http://v.youku.com/v_show/id_XODM0MzYyNDI4.html
看个视频大家乐呵乐呵,没办法,录屏软件仅支持转出1280p的视频,好吧,它尽力了,大家体谅下它们吧,1920p的录屏软件如果你有,请联系我。
视频看完了,再品鉴品鉴代码:
读取RGB图像
- [/align][align=left]package dreamers.kinect.examples.cameras {
- import dreamers.kinect.Kinect;
- import dreamers.kinect.constants.CameraResolution;
- import dreamers.kinect.events.CameraImageEvent;
- import dreamers.kinect.events.DeviceErrorEvent;
- import dreamers.kinect.events.DeviceEvent;
- import dreamers.kinect.events.DeviceInfoEvent;
- import dreamers.kinect.examples.DemoBase;
- import dreamers.kinect.frameworks.mssdk.MSKinectSettings;
-
- import flash.display.Bitmap;
-
- public class RGBCameraDemo extends DemoBase {
-
- private var rgbBitmap:Bitmap;
- private var device:Kinect;
-
- override protected function startDemoImplementation():void {
- device = Kinect.getDevice();
-
- rgbBitmap = new Bitmap();
- rgbBitmap.x = 0;
- rgbBitmap.y = 0;
-
- addChild(rgbBitmap);
-
- device.addEventListener(CameraImageEvent.RGB_IMAGE_UPDATE, rgbImageUpdateHandler, false, 0, true);
- device.addEventListener(DeviceInfoEvent.INFO, deviceInfoHandler, false, 0, true);
- device.addEventListener(DeviceErrorEvent.ERROR, deviceErrorHandler, false, 0, true);
- device.addEventListener(DeviceEvent.STARTED, kinectStartedHandler, false, 0, true);
- device.addEventListener(DeviceEvent.STOPPED, kinectStoppedHandler, false, 0, true);
-
- var settings:MSKinectSettings = new MSKinectSettings();
- settings.rgbEnabled = true;
- settings.rgbResolution = CameraResolution.RESOLUTION_1920_1080;
-
- device.start(settings);
- }
-
- protected function deviceErrorHandler(event:DeviceErrorEvent):void
- {
- trace("[RGBCameraDemo] ERROR: " + event.message);
- }
-
- protected function deviceInfoHandler(event:DeviceInfoEvent):void
- {
- trace("[RGBCameraDemo] INFO: " + event.message);
- }
-
- protected function kinectStartedHandler(event:DeviceEvent):void {
- trace("[RGBCameraDemo] Device started");
- }
-
- protected function kinectStoppedHandler(event:DeviceEvent):void {
- trace("[RGBCameraDemo] Device stopped");
- }
-
- override protected function stopDemoImplementation():void {
- if (device != null) {
- device.stop();
- device.removeEventListener(CameraImageEvent.RGB_IMAGE_UPDATE, rgbImageUpdateHandler);
- device.removeEventListener(DeviceEvent.STARTED, kinectStartedHandler);
- device.removeEventListener(DeviceEvent.STOPPED, kinectStoppedHandler);
- device.removeEventListener(DeviceInfoEvent.INFO, deviceInfoHandler);
- device.removeEventListener(DeviceErrorEvent.ERROR, deviceErrorHandler);
- }
- }
-
- protected function rgbImageUpdateHandler(event:CameraImageEvent):void {
- rgbBitmap.bitmapData = event.imageData;
-
- rgbBitmap.width = stage.stageWidth;
- rgbBitmap.height = stage.stageHeight;
- }
-
- }
- }
复制代码解析6人25全骨骼信息的代码片段 - for each(var user:User in device.users) {
- //遍历用户信息
- closestUser ||= user;
- if (user.position.world.z < closestUser.position.world.z) closestUser = user;
-
- if (user.hasSkeleton) {
- //用户左手状态
- if(user.handLeftState == HandSate.HAND_CLOSE)
- {
- rgbSkeletonContainer.graphics.beginFill(0x00ff00, user.leftHand.positionConfidence);
- rgbSkeletonContainer.graphics.drawCircle(user.leftHand.position.rgb.x, user.leftHand.position.rgb.y, 35);
- rgbSkeletonContainer.graphics.endFill();
- }
- else
- {
- rgbSkeletonContainer.graphics.beginFill(0x000000, user.leftHand.positionConfidence);
- rgbSkeletonContainer.graphics.drawCircle(user.leftHand.position.rgb.x, user.leftHand.position.rgb.y, 35);
- rgbSkeletonContainer.graphics.endFill();
- }
- //用户右手状态
- if(user.handRightState == HandSate.HAND_CLOSE)
- {
- rgbSkeletonContainer.graphics.beginFill(0x00ff00, user.rightHand.positionConfidence);
- rgbSkeletonContainer.graphics.drawCircle(user.rightHand.position.rgb.x, user.rightHand.position.rgb.y, 35);
- rgbSkeletonContainer.graphics.endFill();
- }
- else
- {
- rgbSkeletonContainer.graphics.beginFill(0x000000, user.rightHand.positionConfidence);
- rgbSkeletonContainer.graphics.drawCircle(user.rightHand.position.rgb.x, user.rightHand.position.rgb.y, 35);
- rgbSkeletonContainer.graphics.endFill();
- }
-
- //为每个骨骼点位着色
- for each(var joint:SkeletonJoint in user.skeletonJoints) {
- rgbSkeletonContainer.graphics.beginFill(0xFF0000, joint.positionConfidence);
- rgbSkeletonContainer.graphics.drawCircle(joint.position.rgb.x, joint.position.rgb.y, 5);
- rgbSkeletonContainer.graphics.endFill();
-
- depthSkeletonContainer.graphics.beginFill(0xFF0000, joint.positionConfidence);
- depthSkeletonContainer.graphics.drawCircle(joint.position.depth.x, joint.position.depth.y, 5);
- depthSkeletonContainer.graphics.endFill();
- }
- }
复制代码好吧,给大家放个读取高清RGB图像和Depth图像的demo示例解解馋
示例下载方法:
Demo下载:群共享里面,大家加QQ群:221849157 , 群共享里面即有demo和更多资料下载。
如果您需要该组件的更多功能,请联系大伦子,并支持他的工作,联系方式:
大伦子 QQ:123685049
目前Kinect4Air暂时由于精力问题没有发布免费的学习版本,请见谅,最近确实忙完一波又一波,计划元旦跨年期间发布更多功能以及提供学习版和教程文章等等资料,目前首先欢迎广大的AS3开发企业加入内测。
最后列举下接下来的开发计划,大家可以留意投票看看那些需求是你最需要的: 1. 高清抠像 2. Infrade图像 3. 点云 4. 面部识别 5. 语音识别
|