예제 #1
0
        public void updateEyePosition(EyePositionEventArgs e)
        {
            if (e.LeftEye.IsValid)
            {
                this.leftEyeX = e.LeftEye.X;
                this.leftEyeY = e.LeftEye.Y;
                this.leftEyeZ = e.LeftEye.Z;
            }

            if (e.RightEye.IsValid)
            {
                this.rightEyeX = e.RightEye.X;
                this.rightEyeY = e.RightEye.Y;
                this.rightEyeZ = e.RightEye.Z;
            }

            if (e.LeftEyeNormalized.IsValid)
            {
                this.leftEyeNormalizedX = e.LeftEyeNormalized.X;
                this.leftEyeNormalizedY = e.LeftEyeNormalized.Y;
                this.leftEyeNormalizedZ = e.LeftEyeNormalized.Z;
            }

            if (e.RightEyeNormalized.IsValid)
            {
                this.rightEyeNormalizedX = e.RightEyeNormalized.X;
                this.rightEyeNormalizedY = e.RightEyeNormalized.Y;
                this.rightEyeNormalizedZ = e.RightEyeNormalized.Z;
            }
            
        }
예제 #2
0
        private void EyeDataStreamOnNext(object sender, EyePositionEventArgs eyePositionEventArgs)
        {
            LastEyePositionEventArgs = eyePositionEventArgs;
            UpdateReason             = UpdateReason.EyeDataChanged;
            TrackStatus = TrackStatus.NoEyes;

            var rightEyePositionMm   = new Vector3((float)eyePositionEventArgs.RightEye.X, (float)eyePositionEventArgs.RightEye.Y, (float)eyePositionEventArgs.RightEye.Z);
            var leftEyePositionMm    = new Vector3((float)eyePositionEventArgs.LeftEye.X, (float)eyePositionEventArgs.LeftEye.Y, (float)eyePositionEventArgs.LeftEye.Z);
            var rightEyePositionNorm = new Vector3((float)eyePositionEventArgs.RightEyeNormalized.X, (float)eyePositionEventArgs.RightEyeNormalized.Y, (float)eyePositionEventArgs.RightEyeNormalized.Z);
            var leftEyePositionNorm  = new Vector3((float)eyePositionEventArgs.LeftEyeNormalized.X, (float)eyePositionEventArgs.LeftEyeNormalized.Y, (float)eyePositionEventArgs.LeftEyeNormalized.Z);

            if (eyePositionEventArgs.LeftEye.IsValid && eyePositionEventArgs.RightEye.IsValid)
            {
                TrackStatus   = TrackStatus.BothEyes;
                eyeOffsetMm   = rightEyePositionMm - leftEyePositionMm;
                eyeOffsetNorm = rightEyePositionNorm - leftEyePositionNorm;
            }
            else if (eyePositionEventArgs.LeftEye.IsValid)
            {
                TrackStatus = TrackStatus.OnlyLeftEye;
            }
            else if (eyePositionEventArgs.RightEye.IsValid)
            {
                TrackStatus = TrackStatus.OnlyRightEye;
            }

            switch (TrackStatus)
            {
            case TrackStatus.BothEyes:
                targetAverageHeadPositionMm   = (rightEyePositionMm + leftEyePositionMm) / 2f;
                targetAverageHeadPositionNorm = (rightEyePositionNorm + leftEyePositionNorm) / 2f;
                break;

            case TrackStatus.OnlyLeftEye:
                targetAverageHeadPositionMm   = leftEyePositionMm + eyeOffsetMm / 2f;
                targetAverageHeadPositionNorm = leftEyePositionNorm + eyeOffsetNorm / 2f;
                break;

            case TrackStatus.OnlyRightEye:
                targetAverageHeadPositionMm   = rightEyePositionMm - eyeOffsetMm / 2f;
                targetAverageHeadPositionNorm = rightEyePositionNorm - eyeOffsetNorm / 2f;
                break;

            case TrackStatus.NoEyes:
            default:
                //Don't update D:
                break;
            }

            targetRoll = (float)Math.Atan2(eyeOffsetMm.Y, eyeOffsetMm.X);
            targetYaw  = -(float)Math.Atan2(eyeOffsetMm.Z, eyeOffsetMm.X);

            Roll = Lerp(Roll, targetRoll, 0.6f);
            Yaw  = Lerp(Yaw, targetYaw, 0.6f);

            AverageHeadPositionMm   = Lerp(AverageHeadPositionMm, targetAverageHeadPositionMm, 0.6f);
            AverageHeadPositionNorm = Lerp(AverageHeadPositionNorm, targetAverageHeadPositionNorm, 0.6f);

            OnUpdate();
        }
예제 #3
0
        public void updateEyePosition(EyePositionEventArgs e)
        {
            if (e.LeftEye.IsValid)
            {
                this.leftEyeX = e.LeftEye.X;
                this.leftEyeY = e.LeftEye.Y;
                this.leftEyeZ = e.LeftEye.Z;
            }

            if (e.RightEye.IsValid)
            {
                this.rightEyeX = e.RightEye.X;
                this.rightEyeY = e.RightEye.Y;
                this.rightEyeZ = e.RightEye.Z;
            }

            if (e.LeftEyeNormalized.IsValid)
            {
                this.leftEyeNormalizedX = e.LeftEyeNormalized.X;
                this.leftEyeNormalizedY = e.LeftEyeNormalized.Y;
                this.leftEyeNormalizedZ = e.LeftEyeNormalized.Z;
            }

            if (e.RightEyeNormalized.IsValid)
            {
                this.rightEyeNormalizedX = e.RightEyeNormalized.X;
                this.rightEyeNormalizedY = e.RightEyeNormalized.Y;
                this.rightEyeNormalizedZ = e.RightEyeNormalized.Z;
            }
        }
예제 #4
0
 private void EyeXHost_EyePositionDataStream(object sender, EyePositionEventArgs args)
 {
     RunOnMainThread(() =>
     {
         LeftEyePositionNormalized  = args.LeftEyeNormalized;
         RightEyePositionNormalized = args.RightEyeNormalized;
     });
 }
예제 #5
0
 private void GetEyePos(object sender, EyePositionEventArgs e)
 {
     if (e.LeftEyeNormalized.X != 0 || e.LeftEyeNormalized.Y != 0 || e.LeftEyeNormalized.Z != 0 || e.RightEyeNormalized.X != 0 || e.RightEyeNormalized.Y != 0 || e.RightEyeNormalized.Z != 0)
     {
         leftEyePosX  = e.LeftEyeNormalized.X;
         leftEyePosY  = e.LeftEyeNormalized.Y;
         leftEyePosZ  = e.LeftEyeNormalized.Z;
         rightEyePosX = e.RightEyeNormalized.X;
         rightEyePosY = e.RightEyeNormalized.Y;
         rightEyePosZ = e.RightEyeNormalized.Z;
         EyePosX      = (leftEyePosX + rightEyePosX) / 2;
         EyePosY      = (leftEyePosY + rightEyePosY) / 2;
         EyePosZ      = (leftEyePosZ + rightEyePosZ) / 2;
     }
 }
예제 #6
0
        private void RecordEyePosition(object s, EyePositionEventArgs e)
        {
            Func <EyePosition, EyePosition> cloneEyePosition = ep =>
                                                               new EyePosition(ep.IsValid, ep.X, ep.Y, ep.Z);

            if (isEyePositionDataRecording)
            {
                eyePositions.Enqueue(new EyePositionEventArgs(
                                         cloneEyePosition(e.LeftEye),
                                         cloneEyePosition(e.LeftEyeNormalized),
                                         cloneEyePosition(e.RightEye),
                                         cloneEyePosition(e.RightEyeNormalized),
                                         e.Timestamp
                                         ));
            }
        }
예제 #7
0
 private void EyePositionDataStream_Next(object sender, EyePositionEventArgs e)
 {
     lock (eyePosition)
         eyePosition = e;
 }
예제 #8
0
 private void eyePositionNext(object sender, EyePositionEventArgs e)
 {
     blinkProcessor.receiveEyePosition(e.LeftEye, e.RightEye);
 }
예제 #9
0
 void 眼球位置_XY情報格納(object s, EyePositionEventArgs e)
 {
     //double[] left = { e.LeftEyeNormalized.X, e.LeftEyeNormalized.Y, e.LeftEyeNormalized.Z};
     //double[] right = { e.RightEyeNormalized.X, e.RightEyeNormalized.Y, e.RightEyeNormalized.Z };
     const int limit = 3;
     if (e.LeftEyeNormalized.X == 0)
     {
         l_counter++;
         if (l_counter > limit) POS_L.Add(new int[]{0,0});//limit回連続で0が来たら
     }
     else
     {
         POS_L.Add(new int[] { (int)(pos_max - e.LeftEyeNormalized.X * pos_max), (int)(pos_max - e.LeftEyeNormalized.Y * pos_max) });//x座標だけでいい気がしてきた
         l_counter = 0;
     }
     if (e.RightEyeNormalized.X == 0)
     {
         r_counter++;
         if (r_counter > limit) POS_R.Add(new int[] { pos_max, pos_max });
     }
     else
     {
         POS_R.Add(new int[]{(int)(pos_max - e.RightEyeNormalized.X * pos_max),(int)(pos_max - e.RightEyeNormalized.Y * pos_max)});
         r_counter = 0;
     }
 }
예제 #10
0
 private void eyePosEvent(object sender, EyePositionEventArgs e)
 {
     //Console.WriteLine(e.Timestamp + ";" + e.LeftEye.IsValid + ";" + e.RightEye.IsValid);
     linesEyePosition.Add(DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss.FFF") + ";" + e.Timestamp + ";" + e.LeftEye.IsValid + ";" + e.LeftEye.X + ";" + e.LeftEye.Y + ";" + e.LeftEye.Z + ";" +
                          e.RightEye.IsValid + ";" + e.RightEye.X + ";" + e.RightEye.Y + ";" + e.RightEye.Z);
 }
예제 #11
0
파일: Form1.cs 프로젝트: moyoron64/eyeX
        //アイポジションの座標の更新
        private void OutputEyePosition(object sender, EyePositionEventArgs e)
        {
            //両方の目の位置が把握できているときに傾きをだす
            if ((int)e.LeftEye.X != 0 && (int)e.LeftEye.Y != 0 && (int)e.RightEye.X != 0 && (int)e.RightEye.Y != 0)
            {
                getDgree(e.LeftEye.X, e.LeftEye.Y, e.RightEye.X, e.RightEye.Y);
            }
            
            //瞬きの回数を確認する
            checkBlink(e.LeftEye.X, e.LeftEye.Y);
            //Console.WriteLine(BlinkCount);

            if (e.LeftEye.Z != 0)
            {
                distance = (double)e.LeftEye.Z;
                distanceStock[distanceStockCount] = distance;
                distanceStockCount++;

                if (distanceStockCount >= 600)
                {
                    distanceStockCount = 0;
                    dangerDistance = distanceStock.PopulationVariance();
                }

            }
            
        }
예제 #12
0
 private void InvokeEyePositionEvent(object s, EyePositionEventArgs e)
 {
     EyePositionEvent.Invoke(s, e);
 }