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; } }
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(); }
private void EyeXHost_EyePositionDataStream(object sender, EyePositionEventArgs args) { RunOnMainThread(() => { LeftEyePositionNormalized = args.LeftEyeNormalized; RightEyePositionNormalized = args.RightEyeNormalized; }); }
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; } }
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 )); } }
private void EyePositionDataStream_Next(object sender, EyePositionEventArgs e) { lock (eyePosition) eyePosition = e; }
private void eyePositionNext(object sender, EyePositionEventArgs e) { blinkProcessor.receiveEyePosition(e.LeftEye, e.RightEye); }
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; } }
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); }
//アイポジションの座標の更新 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(); } } }
private void InvokeEyePositionEvent(object s, EyePositionEventArgs e) { EyePositionEvent.Invoke(s, e); }