Kinect 轮询方式下 握住 放开

// by jiabin
namespace xnaGame
{
    //实现交互端接口的类      
    public class InteractionClient : IInteractionClient      
    {          //实现得到交互对象          
        public InteractionInfo GetInteractionInfoAtLocation(int skeletonTrackingId, InteractionHandType handType, double x, double y){                      
            return new InteractionInfo{  
                IsPressTarget = true,                  
                IsGripTarget = true,              
            }; 
        }      
    }
    class reInteraction {
        public Vector2 rection;
        public string HandType; //手的类型
        public string action; //是否按下
    }
    class Interaction : Object2D
    {
        private readonly SkeletonPointMap mapMethod;
        private DepthImagePixel[] depthData; //深度数据!!
        private UserInfo[] UserInfos = null;
        InteractionClient ic; 
        InteractionStream its;
        public reInteraction outInteractionyou;//右
        public reInteraction outInteractionzuo;//左
        public Skeleton[] skeletonData;
        string action = null;
        public Interaction(Game game,SkeletonPointMap map)
            : base(game)
        {
            this.mapMethod = map;
        }
        public Boolean LoadInitialization(){




            if (this.Chooser==null || null == this.Chooser.Sensor ||
false == this.Chooser.Sensor.IsRunning ||
KinectStatus.Connected != this.Chooser.Sensor.Status)
        {
           
            return false;
        }
        else {
            ic = new InteractionClient();
            its = new InteractionStream(this.Chooser.Sensor, ic);
            outInteractionyou = new reInteraction();
            outInteractionyou.rection = Vector2.Zero;
            outInteractionzuo = new reInteraction();
            outInteractionzuo.rection = Vector2.Zero;
            return true;
             }
        
       }
        public reInteraction actioncType(reInteraction reget, InteractionHandPointer handPointer)
        {
            //if (handPointer.X != 0)
            //{
            //    reget.rection.X = (float)handPointer.X;
            //    reget.rection.Y = (float)handPointer.Y;
            //}
            switch (handPointer.HandEventType)
            { 
               
                case InteractionHandEventType.Grip:
                  
                    reget.action = "握住";
                  
                   break; 
                case InteractionHandEventType.GripRelease:
                    reget.action = "放开";
                   break; 
            }
            return reget;
         }
    public Boolean up() {
        using (var framedepth = this.Chooser.Sensor.DepthStream.OpenNextFrame(0))
        {
            // Sometimes we get a null frame back if no data is ready
            if (null == framedepth)
            {
                return false;
            }


            // Reallocate values if necessary
            if (null == this.depthData || this.depthData.Length != framedepth.PixelDataLength)
            {
                this.depthData = new DepthImagePixel[framedepth.PixelDataLength];
            }
            framedepth.CopyDepthImagePixelDataTo(this.depthData);
            its.ProcessDepth(this.depthData, framedepth.Timestamp);
        }
        using (SkeletonFrame skeletonFrame = this.Chooser.Sensor.SkeletonStream.OpenNextFrame(0))  
            {  
                if (skeletonFrame != null)  
                {
                    skeletonData = new Skeleton[this.Chooser.Sensor.SkeletonStream.FrameSkeletonArrayLength];  
                    skeletonFrame.CopySkeletonDataTo(skeletonData);  
                     //把骨骼数据传给交互对象   
                    its.ProcessSkeleton(skeletonData, this.Chooser.Sensor.AccelerometerGetCurrentReading(), skeletonFrame.Timestamp);  
                }  
            }
        if (null == skeletonData || null == this.mapMethod)
        {
            return false;
        }
        foreach (var skeleton in skeletonData)
        {
            if (skeleton.TrackingState == SkeletonTrackingState.Tracked)
            {
                Joint j = skeleton.Joints[JointType.HandRight];
                if (j.Position.X != 0)
                {
                    outInteractionyou.rection = this.mapMethod(j.Position);
                }
                Joint y = skeleton.Joints[JointType.HandLeft];
                if (y.Position.X != 0)
                {
                    outInteractionzuo.rection = this.mapMethod(y.Position);
                }
            }
        }


        InteractionFrame frame = its.OpenNextFrame(0);
        if (frame != null)
           {
               if (this.UserInfos == null)
               {
                   //获得用户信息                          
                   this.UserInfos = new UserInfo[InteractionFrame.UserInfoArrayLength];
                   
               }
                frame.CopyInteractionDataTo(this.UserInfos);
               //  reInteraction yigefanhuizhi = new reInteraction();
                // UserInfo userInfo = this.UserInfos[0];
                 foreach (UserInfo userInfo in this.UserInfos)
                 {
                     foreach (InteractionHandPointer handPointer in userInfo.HandPointers)
                     {
                         
                         switch (handPointer.HandType)
                         {
                         //    case InteractionHandType.None:
                         //        outInteraction.HandType = "无";
                          //       outInteraction = actioncType(outInteraction, handPointer);
                          //       break;
                             case InteractionHandType.Left:
                                 outInteractionzuo.HandType = "左";
                                 outInteractionzuo = actioncType(outInteractionzuo, handPointer);
                                 break;
                             case InteractionHandType.Right:
                                 outInteractionyou.HandType = "右";
                                 outInteractionyou = actioncType(outInteractionyou, handPointer);
                                 break;
                          
                         }


                     }
                 }
               return true;
           }
        return false;  
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值