void ColorizeUser(nuitrack.UserFrame frame)
    {
        if (frame.Users.Length > 0)
        {
            msg = "User found";
        }
        else
        {
            msg = "User not found";
        }

        for (int i = 0; i < (cols * rows); i++)
        {
            Color32 currentColor = colorsList[frame[i]];

            int ptr = i * 4;
            outSegment[ptr]     = currentColor.a;
            outSegment[ptr + 1] = currentColor.r;
            outSegment[ptr + 2] = currentColor.g;
            outSegment[ptr + 3] = currentColor.b;
        }

        segmentTexture.LoadRawTextureData(outSegment);
        segmentTexture.Apply();

        segmentSprite = Sprite.Create(segmentTexture, imageRect, Vector3.one * 0.5f, 100f, 0, SpriteMeshType.FullRect);

        segmentOut.sprite = segmentSprite;

        gameColliders.UpdateFrame(frame);
    }
Esempio n. 2
0
    /*
     * Process the recieved frames and check the presence of the user in front of the sensor.
     * Declare the msg variable for displaying 'found' or 'not found'
     */
    void ColorizeUser(nuitrack.UserFrame frame)
    {
        if (frame.Users.Length > 0)
        {
            msg = "User found!";
        }
        else
        {
            msg = "User not found!";
        }

        for (int i = 0; i < (cols * rows); i++)
        {
            Color32 currentColor = colorsList[frame[i]];

            int ptr = i * 4;
            dataSegment[ptr]     = currentColor.a;
            dataSegment[ptr + 1] = currentColor.r;
            dataSegment[ptr + 2] = currentColor.g;
            dataSegment[ptr + 3] = currentColor.b;
        }

        //Pass an array for texture filling and apply
        segmentTexture.LoadRawTextureData(dataSegment);
        segmentTexture.Apply();
        //Apply texture to sprite
        segmentSprite = Sprite.Create(segmentTexture, imageRect, Vector3.one * 0.5f, 100f, 0, SpriteMeshType.FullRect);
        //Apply Sprite to Image
        segmentOut.sprite = segmentSprite;
        //Call to Colliders
        collider.UpdateFrame(frame);
    }
Esempio n. 3
0
 void ColorizeUser(nuitrack.UserFrame frame)
 {
     //float minZ = 100000;
     //float maxZ = 0;
     for (int i = 0; i < (cols * rows); i++)
     {
         outSegment[i] = 0;
         if (frame[i] > 0)
         {
             outSegment[i] = 1;
             //if (PointCloudGPU.Instance.particles[i].z < minZ)
             //    minZ = PointCloudGPU.Instance.particles[i].z;
             //else if (PointCloudGPU.Instance.particles[i].z > maxZ)
             //    maxZ = PointCloudGPU.Instance.particles[i].z;
         }
     }
     //minZArray.Add(minZ);
     //maxZArray.Add(maxZ);
     //if (minZArray.Count > samples)
     //{
     //    minZArray.RemoveAt(0);
     //    maxZArray.RemoveAt(0);
     //}
     //PointCloudGPU.Instance.matPointCloud.SetFloat("_MinZ", minZArray.Average());
     //PointCloudGPU.Instance.matPointCloud.SetFloat("_MaxZ", maxZArray.Average());
     segmentBuffer.SetData(outSegment);
 }
Esempio n. 4
0
    public static Texture2D ToTexture2D(this nuitrack.UserFrame frame, params Color32[] customListColors)
    {
        Color32[] currentColorList = customListColors ?? defaultColors;

        byte[] outSegment = new byte[frame.Cols * frame.Rows * 4];

        for (int i = 0; i < (frame.Cols * frame.Rows); i++)
        {
            Color32 currentColor = (frame[i] == 0) ? transparentColor : currentColorList[frame[i]];

            int ptr = i * 4;
            outSegment[ptr]     = currentColor.a;
            outSegment[ptr + 1] = currentColor.r;
            outSegment[ptr + 2] = currentColor.g;
            outSegment[ptr + 3] = currentColor.b;
        }

        Texture2D segmentTexture = new Texture2D(frame.Cols, frame.Rows, TextureFormat.ARGB32, false);

        segmentTexture.LoadRawTextureData(outSegment);
        segmentTexture.Apply();

        Resources.UnloadUnusedAssets();

        return(segmentTexture);
    }
Esempio n. 5
0
    void DrawUserSegment(nuitrack.UserFrame frame)
    {
        if (frame.Users.Length <= 0)
        {
            return;
        }

        for (int i = 0; i < (frameWidth * frameHeight); i++)
        {
            int ptr = i * 3; // RGB24
            if (frame[i] == 0)
            {
                maskedFrame[ptr]     = colorFrame[ptr];
                maskedFrame[ptr + 1] = colorFrame[ptr + 1];
                maskedFrame[ptr + 2] = colorFrame[ptr + 2];
            }
            else
            {
                maskedFrame[ptr]     = maskColor.r;
                maskedFrame[ptr + 1] = maskColor.g;
                maskedFrame[ptr + 2] = maskColor.b;
            }
        }

        frameTexture.LoadRawTextureData(maskedFrame);
        frameTexture.Apply();
    }
    void Update()
    {
        bool haveNewFrame = false;

        if (!nuitrackModules.nuitrackInitialized)
        {
            return;
        }

        if ((nuitrackModules.DepthFrame != null) && active)
        {
            if (depthFrame != null)
            {
                haveNewFrame = (depthFrame != nuitrackModules.DepthFrame);
            }
            depthFrame = nuitrackModules.DepthFrame;
            colorFrame = nuitrackModules.ColorFrame;
            userFrame  = nuitrackModules.UserFrame;
            if (haveNewFrame)
            {
                ProcessFrame(depthFrame, colorFrame, userFrame);
            }
        }
        else
        {
            HideVisualization();
        }
    }
Esempio n. 7
0
    void NuitrackManager_onUserTrackerUpdate(nuitrack.UserFrame frame)
    {
        if (renderTexture == null || renderTexture.width != frame.Cols || renderTexture.height != frame.Rows)
        {
            renderTexture = new RenderTexture(frame.Cols, frame.Rows, 0, RenderTextureFormat.ARGB32);
            renderTexture.enableRandomWrite = true;
            renderTexture.Create();

            rawImage.texture = renderTexture;

            segment2Texture.SetInt("textureWidth", renderTexture.width);
            segment2Texture.SetTexture(kernelIndex, "Result", renderTexture);

            /*
             * We put the source data in the buffer, but the buffer does not support types
             * that take up less than 4 bytes(instead of ushot(Int16), we specify uint(Int32)).
             *
             * For optimization, we specify a length half the original length,
             * since the data is correctly projected into memory
             * (sizeof(ushot) * sourceDataBuffer / 2 == sizeof(uint) * sourceDataBuffer / 2)
             */

            sourceDataBuffer = new ComputeBuffer(frame.DataSize / 2, sizeof(uint));
            segmentDataArray = new byte[frame.DataSize];
        }

        Marshal.Copy(frame.Data, segmentDataArray, 0, frame.DataSize);
        sourceDataBuffer.SetData(segmentDataArray);

        segment2Texture.SetBuffer(kernelIndex, "UserIndexes", sourceDataBuffer);
        segment2Texture.Dispatch(kernelIndex, renderTexture.width / (int)x, renderTexture.height / (int)y, (int)z);
    }
        void Update()
        {
            if (!NuitrackManager.Instance.nuitrackInitialized)
            {
                return;
            }

            if ((NuitrackManager.DepthFrame != null) && active)
            {
                nuitrack.DepthFrame depthFrame = NuitrackManager.DepthFrame;
                nuitrack.ColorFrame colorFrame = NuitrackManager.ColorFrame;
                nuitrack.UserFrame  userFrame  = NuitrackManager.UserFrame;

                bool haveNewFrame = (lastFrameTimestamp != depthFrame.Timestamp);
                if (haveNewFrame)
                {
                    ProcessFrame(depthFrame, colorFrame, userFrame);
                    lastFrameTimestamp = depthFrame.Timestamp;
                }
            }
            else
            {
                HideVisualization();
            }
        }
Esempio n. 9
0
 void HandleOnUserTrackerUpdateEvent(nuitrack.UserFrame frame)
 {
     userFrame = frame;
     if (onUserTrackerUpdate != null)
     {
         onUserTrackerUpdate(userFrame);
     }
 }
Esempio n. 10
0
 void HandleOnUserTrackerUpdateEvent(nuitrack.UserFrame frame)
 {
     if (userFrame != null)
     {
         userFrame.Dispose();
     }
     userFrame = (nuitrack.UserFrame)frame.Clone();
     onUserTrackerUpdate?.Invoke(userFrame);
 }
    private void HandleOnUserTrackerUpdateEvent(nuitrack.UserFrame frame)
    {
        userFrame = frame;

        if (bMultiSource && userFrame != null)
        {
            bMultiFrameBodyIndex = true;
            SyncAllFrames();
        }
    }
Esempio n. 12
0
    public void CloseUserGen()
    {
        try
        {
            if (depthSensor != null)
            {
                depthSensor.OnUpdateEvent -= HandleOnDepthSensorUpdateEvent;
            }
            if (colorSensor != null)
            {
                colorSensor.OnUpdateEvent -= HandleOnColorSensorUpdateEvent;
            }
            if (userTracker != null)
            {
                userTracker.OnUpdateEvent -= HandleOnUserTrackerUpdateEvent;
            }
            if (skeletonTracker != null)
            {
                skeletonTracker.OnSkeletonUpdateEvent -= HandleOnSkeletonUpdateEvent;
            }
            if (gestureRecognizer != null)
            {
                gestureRecognizer.OnNewGesturesEvent -= OnNewGestures;
            }
            if (handTracker != null)
            {
                handTracker.OnUpdateEvent -= HandleOnHandsUpdateEvent;
            }

            depthFrame      = null;
            colorFrame      = null;
            userFrame       = null;
            skeletonData    = null;
            handTrackerData = null;

            depthSensor       = null;
            colorSensor       = null;
            userTracker       = null;
            skeletonTracker   = null;
            gestureRecognizer = null;
            handTracker       = null;

            nuitrack.Nuitrack.Release();
            Debug.Log("CloseUserGen");
            nuitrackInitialized = false;
        }
        catch (System.Exception ex)
        {
            Debug.LogError(ex.ToString());
        }
    }
Esempio n. 13
0
    void ProcessFrame(nuitrack.DepthFrame depthFrame, nuitrack.UserFrame userFrame)
    {
        Color pointColor;

        for (int i = 0, pointIndex = 0; i < depthFrame.Rows; i += frameStep)
        {
            for (int j = 0; j < depthFrame.Cols; j += frameStep, ++pointIndex)
            {
                nuitrack.Vector3 p      = depthSensor.ConvertProjToRealCoords(j, i, depthFrame[i, j]);
                uint             userId = userFrame[i * userFrame.Rows / depthFrame.Rows,
                                                    j *userFrame.Cols / depthFrame.Cols];
                pointColor = userCols[userId % userCols.Length];
                VerticesUpdate(pointIndex, new Vector3(p.X * 0.001f, p.Y * 0.001f, p.Z * 0.001f), pointColor);
            }
        }
        MeshesUpdate();
    }
    public void CloseUserGen()
    {
        if (depthSensor != null)
        {
            depthSensor.OnUpdateEvent -= HandleOnDepthSensorUpdateEvent;
        }
        if (colorSensor != null)
        {
            colorSensor.OnUpdateEvent -= HandleOnColorSensorUpdateEvent;
        }
        if (userTracker != null)
        {
            userTracker.OnUpdateEvent -= HandleOnUserTrackerUpdateEvent;
        }
        if (skeletonTracker != null)
        {
            skeletonTracker.OnSkeletonUpdateEvent -= HandleOnSkeletonUpdateEvent;
        }
        if (gestureRecognizer != null)
        {
            gestureRecognizer.OnNewGesturesEvent -= OnNewGestures;
        }
        if (handTracker != null)
        {
            handTracker.OnUpdateEvent -= HandleOnHandsUpdateEvent;
        }
        //		Debug.Log ("preRelease");
        nuitrack.Nuitrack.Release();
        //		Debug.Log ("postRelease");

        depthSensor       = null;
        colorSensor       = null;
        userTracker       = null;
        skeletonTracker   = null;
        gestureRecognizer = null;
        handTracker       = null;

        depthFrame      = null;
        colorFrame      = null;
        userFrame       = null;
        skeletonData    = null;
        handTrackerData = null;
    }
    void HandleOnUserTrackerUpdateEvent(nuitrack.UserFrame frame)
    {
        if (UserFrame != null)
        {
            UserFrame.Dispose();
        }
        UserFrame = (nuitrack.UserFrame)frame.Clone();

        try
        {
            onUserTrackerUpdate?.Invoke(UserFrame);
        }
        catch (Exception ex)
        {
            Debug.LogException(ex);
        }

        Floor = new Plane(UserFrame.FloorNormal.ToVector3().normalized, UserFrame.Floor.ToVector3() * 0.001f);
    }
    public void UpdateFrame(nuitrack.UserFrame frame)
    {
        for (int c = 0; c < cols; c++)
        {
            for (int r = 0; r < rows; r++)
            {
                ushort userId = frame[(int)(r / colliderDetails), (int)(c / colliderDetails)];

                if (userId == 0)
                {
                    colliderObjects[c, r].SetActive(false);
                }
                else
                {
                    colliderObjects[c, r].SetActive(true);
                }
            }
        }
    }
Esempio n. 17
0
 /*
  * If a user is in the frame, the game objects for displaying are activated
  * otherwise they are hidden
  */
 public void UpdateFrame(nuitrack.UserFrame frame) //update the frame
 {
     for (int x = 0; x < cols; x++)
     {
         for (int y = 0; y < rows; y++)
         {
             ushort userID = frame[(int)(x / colliderDetails), (int)(y / colliderDetails)]; //Request a user id according to colliderDetails
             //Not found
             if (userID == 0)
             {
                 colliderObjects[x, y].SetActive(false);
             }
             //Found
             else
             {
                 colliderObjects[x, y].SetActive(true);
             }
         }
     }
 }
Esempio n. 18
0
 void OnUserTrackerUpdate(nuitrack.UserFrame frame)
 {
     userFrame = frame;
 }
    public void CloseSensor(KinectInterop.SensorData sensorData)
    {
        if (colorWebCam)
        {
            colorWebCam.Stop();
            colorWebCam = null;
        }

        if (coordMapper != null)
        {
            coordMapper.CleanUp();
            coordMapper = null;
        }

        if (colorSensor != null)
        {
            colorSensor.OnUpdateEvent -= HandleOnColorSensorUpdateEvent;
            colorSensor = null;
            colorFrame  = null;
        }

        if (depthSensor != null)
        {
            depthSensor.OnUpdateEvent -= HandleOnDepthSensorUpdateEvent;
            depthSensor = null;
            depthFrame  = null;
        }

        if (userTracker != null)
        {
            userTracker.OnUpdateEvent -= HandleOnUserTrackerUpdateEvent;
            userTracker = null;
            userFrame   = null;
        }

        if (skeletonTracker != null)
        {
            skeletonTracker.OnSkeletonUpdateEvent -= HandleOnSkeletonUpdateEvent;
            skeletonTracker = null;
            skeletonData    = null;
        }

        if (handTracker != null)
        {
            handTracker.OnUpdateEvent -= HandleOnHandsUpdateEvent;
            handTracker     = null;
            handTrackerData = null;
        }

        if (gestureRecognizer != null)
        {
            gestureRecognizer.OnNewGesturesEvent -= OnNewGestures;
            gestureRecognizer = null;
        }

        if (bNuitrackInited)
        {
            bNuitrackInited = false;

            nuitrack.Nuitrack.onIssueUpdateEvent -= OnIssuesUpdate;
            NuitrackTerm();
        }

        Debug.Log("Nuitrack sensor closed");
    }
Esempio n. 20
0
    void ChangeModulsState(bool skel, bool hand, bool depth, bool color, bool gest, bool user)
    {
//		Debug.Log ("" + skel + hand + depth + gest + user);
        if (skeletonTracker == null)
        {
            return;
        }
        if (prevSkel != skel)
        {
            skeletonData = null;
            prevSkel     = skel;
            if (skel)
            {
                skeletonTracker.OnSkeletonUpdateEvent += HandleOnSkeletonUpdateEvent;
            }
            else
            {
                skeletonTracker.OnSkeletonUpdateEvent -= HandleOnSkeletonUpdateEvent;
            }
        }
        if (prevHand != hand)
        {
            handTrackerData = null;
            prevHand        = hand;
            if (hand)
            {
                handTracker.OnUpdateEvent += HandleOnHandsUpdateEvent;
            }
            else
            {
                handTracker.OnUpdateEvent -= HandleOnHandsUpdateEvent;
            }
        }
        if (prevGest != gest)
        {
            prevGest = gest;
            if (gest)
            {
                gestureRecognizer.OnNewGesturesEvent += OnNewGestures;
            }
            else
            {
                gestureRecognizer.OnNewGesturesEvent -= OnNewGestures;
            }
        }
        if (prevDepth != depth)
        {
            depthFrame = null;
            prevDepth  = depth;
            if (depth)
            {
                depthSensor.OnUpdateEvent += HandleOnDepthSensorUpdateEvent;
            }
            else
            {
                depthSensor.OnUpdateEvent -= HandleOnDepthSensorUpdateEvent;
            }
        }
        if (prevColor != color)
        {
            colorFrame = null;
            prevColor  = color;
            if (color)
            {
                colorSensor.OnUpdateEvent += HandleOnColorSensorUpdateEvent;
            }
            else
            {
                colorSensor.OnUpdateEvent -= HandleOnColorSensorUpdateEvent;
            }
        }
        if (prevUser != user)
        {
            userFrame = null;
            prevUser  = user;
            if (user)
            {
                userTracker.OnUpdateEvent += HandleOnUserTrackerUpdateEvent;
            }
            else
            {
                userTracker.OnUpdateEvent -= HandleOnUserTrackerUpdateEvent;
            }
        }
    }
    private void InitTrackers(bool depthOn, bool colorOn, bool userOn, bool skeletonOn, bool handsOn, bool gesturesOn)
    {
        if (!nuitrackInitialized)
        {
            nuitrack.Nuitrack.Init();
            Debug.Log("init ok");
            depthSensorInit       = nuitrack.DepthSensor.Create();
            colorSensorInit       = nuitrack.ColorSensor.Create();
            userTrackerInit       = nuitrack.UserTracker.Create();
            skeletonTrackerInit   = nuitrack.SkeletonTracker.Create();
            handTrackerInit       = nuitrack.HandTracker.Create();
            gestureRecognizerInit = nuitrack.GestureRecognizer.Create();

            nuitrack.Nuitrack.Run();
            Debug.Log("run ok");
            nuitrackInitialized = true;
        }

        depthFrame      = null;
        colorFrame      = null;
        userFrame       = null;
        skeletonData    = null;
        handTrackerData = null;
        gesturesData    = null;
        //
        //      depthSensor = null;
        //      userTracker = null;
        //      skeletonTracker = null;
        //      handTracker = null;
        //      gestureRecognizer = null;

        //if (issuesProcessor != null) Destroy(issuesProcessor);

        if (prevDepth != depthOn)
        {
            prevDepth = depthOn;
            if (depthOn)
            {
                depthSensor = depthSensorInit;
                depthSensorInit.OnUpdateEvent += DepthUpdate;
            }
            else
            {
                depthSensorInit.OnUpdateEvent -= DepthUpdate;
                depthSensor = null;
            }
        }

        if (prevColor != colorOn)
        {
            prevColor = colorOn;
            if (colorOn)
            {
                colorSensor = colorSensorInit;
                colorSensorInit.OnUpdateEvent += ColorUpdate;
            }
            else
            {
                colorSensorInit.OnUpdateEvent -= ColorUpdate;
                colorSensor = null;
            }
        }

        if (prevUser != userOn)
        {
            prevUser = userOn;
            if (userOn)
            {
                userTracker = userTrackerInit;
                userTrackerInit.OnUpdateEvent += UserUpdate;
            }

            else
            {
                userTrackerInit.OnUpdateEvent -= UserUpdate;
                userTracker = null;
            }
        }

        if (skeletonOn != prevSkel)
        {
            prevSkel = skeletonOn;
            if (skeletonOn)
            {
                skeletonTracker = skeletonTrackerInit;
                skeletonTrackerInit.OnSkeletonUpdateEvent += SkeletonsUpdate;
            }
            else
            {
                skeletonTrackerInit.OnSkeletonUpdateEvent -= SkeletonsUpdate;
                skeletonTracker = null;
            }
        }

        if (prevHand != handsOn)
        {
            prevHand = handsOn;
            if (handsOn)
            {
                handTracker = handTrackerInit;
                handTrackerInit.OnUpdateEvent += HandTrackerUpdate;
            }
            else
            {
                handTrackerInit.OnUpdateEvent -= HandTrackerUpdate;
                handTracker = null;
            }
        }

        if (prevGesture != gesturesOn)
        {
            prevGesture = gesturesOn;
            if (gesturesOn)
            {
                gestureRecognizer = gestureRecognizerInit;
                gestureRecognizerInit.OnNewGesturesEvent += GesturesUpdate;
            }
            else
            {
                gestureRecognizerInit.OnNewGesturesEvent -= GesturesUpdate;
                gestureRecognizer = null;
            }
        }

        StopThread();
    }
    void ProcessFrame(nuitrack.DepthFrame depthFrame, nuitrack.ColorFrame colorFrame, nuitrack.UserFrame userFrame)
    {
        for (int i = 0; i < parts; i++)
        {
            if (!visualizationParts[i].activeSelf)
            {
                visualizationParts[i].SetActive(true);
            }
        }

        Color pointColor = Color.white;

        if (userFrame != null)
        {
            if (issuesProcessor.userIssues != null)
            {
                for (int i = 1; i < userCurrentCols.Length; i++)
                {
                    if (issuesProcessor.userIssues.ContainsKey(i))
                    {
                        userCurrentCols[i] =
                            (issuesProcessor.userIssues[i].isOccluded ||
                             issuesProcessor.userIssues[i].onBorderLeft ||
                             issuesProcessor.userIssues[i].onBorderRight ||
                             issuesProcessor.userIssues[i].onBorderTop) ?
                            occludedUserCols[i] : userCols[i];
                    }
                }
            }
        }

        for (int i = 0, pointIndex = 0, rgbOffset = 0; i < depthFrame.Rows; i += frameStep)
        {
            for (int j = 0; j < depthFrame.Cols; j += frameStep, ++pointIndex, rgbOffset += 3)
            {
                depthColors[pointIndex].r = depthFrame[i, j] / 16384f;

                uint userId = 0u;
                if (userFrame != null)
                {
                    userId = userFrame[i * userFrame.Rows / depthFrame.Rows,
                                       j *userFrame.Cols / depthFrame.Cols];
                }

                #region RGB coloring
                //int rgbOffset = 3 * (i * depthFrame.Cols + j);
                Color rgbCol = defaultColor;
                if (colorFrame != null)
                {
                    rgbCol = new Color32(colorFrame[i, j].Red, colorFrame[i, j].Green, colorFrame[i, j].Blue, 255);
                }
                //new Color32(depthFrame.rgb[rgbOffset + 2], depthFrame.rgb[rgbOffset + 1], depthFrame.rgb[rgbOffset + 0], 255);
                pointColor = rgbCol;// * userCurrentCols[userId];
                if (userId == 0)
                {
                    pointColor *= userCols[0];
                }
                Color segmColor = userCurrentCols[userId];
                //Debug.Log(j.ToString() + ", " + i.ToString() + " : " + rgbCol);
                #endregion
                //        pointColor = userCurrentCols[userId]; //user segmentation coloring

                rgbColors[pointIndex]  = pointColor;
                segmColors[pointIndex] = segmColor;
            }
        }
        depthTexture.SetPixels(depthColors);
        rgbTexture.SetPixels(rgbColors);
        segmentationTexture.SetPixels(segmColors);

        depthTexture.Apply();
        rgbTexture.Apply();
        segmentationTexture.Apply();
    }
    void ProcessFrame(nuitrack.DepthFrame depthFrame, nuitrack.ColorFrame colorFrame, nuitrack.UserFrame userFrame)
    {
        for (int i = 0; i < visualizationParts.Length; i++)
        {
            if (!visualizationParts[i].activeSelf)
            {
                visualizationParts[i].SetActive(true);
            }
        }

        System.DateTime t1 = System.DateTime.Now;
        for (int i = 0, pointIndex = 0, rgbOffset = 0; i < depthFrame.Rows; i++)
        {
            for (int j = 0; j < depthFrame.Cols; j++, ++pointIndex, rgbOffset += 3)
            {
                int userId = 0;
                if (userFrame != null)
                {
                    userId = userFrame[i, j];
                }
                Color rgbCol = defaultColor;
                if (colorFrame != null)
                {
                    rgbCol = new Color32(colorFrame[i, j].Red, colorFrame[i, j].Green, colorFrame[i, j].Blue, 255);
                }
                //new Color32(depthFrame.rgb[rgbOffset + 2], depthFrame.rgb[rgbOffset + 1], depthFrame.rgb[rgbOffset + 0], 255);
                Color segmColor = userCols[userId];

                depthColors[pointIndex].r = depthFrame[i, j] / 16384f;
                rgbColors[pointIndex]     = rgbCol;
                segmColors[pointIndex]    = segmColor;
            }
        }
        System.DateTime t2 = System.DateTime.Now;

        depthTexture.SetPixels(depthColors);
        rgbTexture.SetPixels(rgbColors);
        segmentationTexture.SetPixels(segmColors);

        System.DateTime t3 = System.DateTime.Now;

        depthTexture.Apply();
        rgbTexture.Apply();
        segmentationTexture.Apply();

        System.DateTime t4 = System.DateTime.Now;

        //Debug.Log(
        //  "Loop time : " + (t2 - t1).TotalMilliseconds.ToString() +
        //  "; Set pixels: " + (t3 - t2).TotalMilliseconds.ToString() +
        //  "; Texture.Apply: " + (t4 - t3).TotalMilliseconds.ToString()
        //);
    }
Esempio n. 24
0
    public void ChangeModules(bool depthOn, bool colorOn, bool userOn, bool skeletonOn, bool handsOn, bool gesturesOn)
    {
        try
        {
            //      if (depthSensor != null) depthSensor.OnUpdateEvent -= DepthUpdate;
            //      if (userTracker != null) userTracker.OnUpdateEvent -= UserUpdate;
            //      if (skeletonTracker != null) skeletonTracker.OnSkeletonUpdateEvent -= SkeletonsUpdate;
            //      if (handTracker != null) handTracker.OnUpdateEvent -= HandTrackerUpdate;
            //      if (gestureRecognizer != null) gestureRecognizer.OnNewGesturesEvent -= GesturesUpdate;

            //*
            if (!nuitrackInitialized)
            {
            #if UNITY_IOS
                nuitrack.Nuitrack.Init("", nuitrack.Nuitrack.NuitrackMode.DEBUG);
            #else
                nuitrack.Nuitrack.Init();
            #endif
                Debug.Log("init ok");
                depthSensorInit       = nuitrack.DepthSensor.Create();
                colorSensorInit       = nuitrack.ColorSensor.Create();
                userTrackerInit       = nuitrack.UserTracker.Create();
                skeletonTrackerInit   = nuitrack.SkeletonTracker.Create();
                handTrackerInit       = nuitrack.HandTracker.Create();
                gestureRecognizerInit = nuitrack.GestureRecognizer.Create();

                nuitrack.Nuitrack.Run();
                Debug.Log("run ok");
                nuitrackInitialized = true;
            }
//			*/

            depthFrame      = null;
            colorFrame      = null;
            userFrame       = null;
            skeletonData    = null;
            handTrackerData = null;
            gesturesData    = null;
            //
            //      depthSensor = null;
            //      userTracker = null;
            //      skeletonTracker = null;
            //      handTracker = null;
            //      gestureRecognizer = null;

            //if (issuesProcessor != null) Destroy(issuesProcessor);

            if (prevDepth != depthOn)
            {
                prevDepth = depthOn;
                if (depthOn)
                {
                    depthSensor = depthSensorInit;
                    depthSensorInit.OnUpdateEvent += DepthUpdate;
                }
                else
                {
                    depthSensorInit.OnUpdateEvent -= DepthUpdate;
                    depthSensor = null;
                }
            }

            if (prevColor != colorOn)
            {
                prevColor = colorOn;
                if (colorOn)
                {
                    colorSensor = colorSensorInit;
                    colorSensorInit.OnUpdateEvent += ColorUpdate;
                }
                else
                {
                    colorSensorInit.OnUpdateEvent -= ColorUpdate;
                    colorSensor = null;
                }
            }

            if (prevUser != userOn)
            {
                prevUser = userOn;
                if (userOn)
                {
                    userTracker = userTrackerInit;
                    userTrackerInit.OnUpdateEvent += UserUpdate;
                }

                else
                {
                    userTrackerInit.OnUpdateEvent -= UserUpdate;
                    userTracker = null;
                }
            }

            if (skeletonOn != prevSkel)
            {
                prevSkel = skeletonOn;
                if (skeletonOn)
                {
                    skeletonTracker = skeletonTrackerInit;
                    skeletonTrackerInit.OnSkeletonUpdateEvent += SkeletonsUpdate;
                }
                else
                {
                    skeletonTrackerInit.OnSkeletonUpdateEvent -= SkeletonsUpdate;
                    skeletonTracker = null;
                }
            }

            if (prevHand != handsOn)
            {
                prevHand = handsOn;
                if (handsOn)
                {
                    handTracker = handTrackerInit;
                    handTrackerInit.OnUpdateEvent += HandTrackerUpdate;
                }
                else
                {
                    handTrackerInit.OnUpdateEvent -= HandTrackerUpdate;
                    handTracker = null;
                }
            }

            if (prevGesture != gesturesOn)
            {
                prevGesture = gesturesOn;
                if (gesturesOn)
                {
                    gestureRecognizer = gestureRecognizerInit;
                    gestureRecognizerInit.OnNewGesturesEvent += GesturesUpdate;
                }
                else
                {
                    gestureRecognizerInit.OnNewGesturesEvent -= GesturesUpdate;
                    gestureRecognizer = null;
                }
            }
            //issuesProcessor = (GameObject)Instantiate(issuesProcessorPrefab);
        }
        catch (Exception ex)
        {
            exceptionsLogger.AddEntry(ex.ToString());
        }
    }
Esempio n. 25
0
 void UserUpdate(nuitrack.UserFrame _userFrame)
 {
     ProcessFrame(depthFrame, _userFrame);
 }
Esempio n. 26
0
        void ProcessFrame(nuitrack.DepthFrame depthFrame, nuitrack.ColorFrame colorFrame, nuitrack.UserFrame userFrame)
        {
            for (int i = 0; i < parts; i++)
            {
                if (!visualizationParts[i].activeSelf)
                {
                    visualizationParts[i].SetActive(true);
                }
            }

            if (userFrame != null)
            {
                if (issuesProcessor.userIssues != null)
                {
                    for (int i = 1; i < userCurrentCols.Length; i++)
                    {
                        if (issuesProcessor.userIssues.ContainsKey(i))
                        {
                            userCurrentCols[i] =
                                (issuesProcessor.userIssues[i].isOccluded ||
                                 issuesProcessor.userIssues[i].onBorderLeft ||
                                 issuesProcessor.userIssues[i].onBorderRight ||
                                 issuesProcessor.userIssues[i].onBorderTop) ?
                                occludedUserCols[i] : userCols[i];
                        }
                    }
                }
            }

            if (colorFrame == null)
            {
                rgbTexture = depthFrame.ToRenderTexture();
            }
            else
            {
                rgbTexture = colorFrame.ToRenderTexture();
            }

            depthTexture        = depthFrame.ToRenderTexture(depthGradient, depthCache);
            segmentationTexture = userFrame.ToRenderTexture(userCurrentCols, textureCache);

            if (!showBackground)
            {
                FrameUtils.TextureUtils.Cut(rgbTexture, segmentationTexture, ref rgbRenderTexture);
                visMat.SetTexture("_RGBTex", rgbRenderTexture);
            }
            else
            {
                visMat.SetTexture("_RGBTex", rgbTexture);
            }

            visMat.SetFloat("_maxSensorDepth", FrameUtils.DepthToTexture.MaxSensorDepth);
            visMat.SetTexture("_DepthTex", depthTexture);
            visMat.SetTexture("_SegmentationTex", segmentationTexture);
        }
Esempio n. 27
0
 void UserUpdate(nuitrack.UserFrame _userFrame)
 {
     userFrame = _userFrame;
 }
        void ProcessFrame(nuitrack.DepthFrame depthFrame, nuitrack.ColorFrame colorFrame, nuitrack.UserFrame userFrame)
        {
            for (int i = 0; i < visualizationParts.Length; i++)
            {
                if (!visualizationParts[i].activeSelf)
                {
                    visualizationParts[i].SetActive(true);
                }
            }

            if (colorFrame == null)
            {
                rgbTexture = depthFrame.ToRenderTexture();
            }
            else
            {
                rgbTexture = colorFrame.ToRenderTexture();
            }

            if (!showBackground)
            {
                FrameUtils.TextureUtils.Cut(rgbTexture, segmentationTexture, ref rgbRenderTexture);
                meshMat.SetTexture("_RGBTex", rgbRenderTexture);
            }
            else
            {
                meshMat.SetTexture("_RGBTex", rgbTexture);
            }

            depthTexture        = depthFrame.ToRenderTexture(depthGradient, depthCache);
            segmentationTexture = userFrame.ToRenderTexture(userCols, textureCache);

            meshMat.SetTexture("_DepthTex", depthTexture);
            meshMat.SetTexture("_SegmentationTex", segmentationTexture);


            meshMat.SetFloat("_maxSensorDepth", FrameUtils.DepthToTexture.MaxSensorDepth);
        }