void initialize() { IsFaceModelCollectCompleted = false; FaceCaptureStatus = ""; FaceVertices = new List <CameraSpacePoint>(); sensor = KinectSensor.GetDefault(); if (sensor == null) { return; } sensor.Open(); bodySource = sensor.BodyFrameSource; bodyReader = bodySource.OpenReader(); hdFaceFrameSource = HighDefinitionFaceFrameSource.Create(sensor); hdFaceFrameReader = hdFaceFrameSource.OpenReader(); faceModel = FaceModel.Create(); faceAlignment = FaceAlignment.Create(); FaceModelBuilderAttributes attributes = FaceModelBuilderAttributes.None; faceModelBuilder = hdFaceFrameSource.OpenModelBuilder(attributes); faceModelBuilder.CollectFaceDataAsync(collectFaceModelCompleted, collectFaceModelFailed); }
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { if (faceModelBuilder != null) { faceModelBuilder.Dispose(); faceModelBuilder = null; } if (hdFaceFrameReader != null) { hdFaceFrameReader.Dispose(); hdFaceFrameReader = null; } if (bodyFrameReader != null) { bodyFrameReader.Dispose(); bodyFrameReader = null; } if (faceModel != null) { faceModel.Dispose(); faceModel = null; } if (kinect != null) { kinect.Close(); kinect = null; } }
/// <summary> /// Cancel the current face capture operation /// </summary> private void StopCollecting() { if (this.faceModelBuilder != null) { this.faceModelBuilder.Dispose(); this.faceModelBuilder = null; } }
void collectFaceModelCompleted(FaceModelData faceModelData) { print("Model created!"); faceModel = faceModelData.ProduceFaceModel(); faceModelBuilder.Dispose(); faceModelBuilder = null; IsFaceModelCollectCompleted = true; }
/// <summary> /// Cancel the current face capture operation /// </summary> private void StopFaceCapture() { if (this.faceModelBuilder != null) { this.faceModelBuilder.Dispose(); this.faceModelBuilder = null; } }
private void HdFaceBuilder_CollectionCompleted(object sender, FaceModelBuilderCollectionCompletedEventArgs e) { var modelData = e.ModelData; this.faceModel = modelData.ProduceFaceModel(); this.faceModelBuilder.Dispose(); this.faceModelBuilder = null; }
void faceModelBuilder_CollectionCompleted(object sender, FaceModelBuilderCollectionCompletedEventArgs e) { var modelData = e.ModelData; faceModel = modelData.ProduceFaceModel(); produced = true; faceModelBuilder.Dispose(); faceModelBuilder = null; }
public override void StopSensor() { if (_faceModelBuilder != null) { _faceModelBuilder.Dispose(); _faceModelBuilder = null; } base.StopSensor(); }
public void StartCollecting() { this.StopCollecting(); this.faceModelBuilder = this.highDefinitionFaceFrameSource.OpenModelBuilder(FaceModelBuilderAttributes.None); this.faceModelBuilder.BeginFaceDataCollection(); this.faceModelBuilder.CollectionCompleted += this.HdFaceBuilder_CollectionCompleted; }
/// <summary> /// This event fires when the face capture operation is completed /// </summary> /// <param name="sender">object sending the event</param> /// <param name="e">event arguments</param> private void HdFaceBuilder_CollectionCompleted(object sender, FaceModelBuilderCollectionCompletedEventArgs e) { var modelData = e.ModelData; this.currentFaceModel = modelData.ProduceFaceModel(); this.faceModelBuilder.Dispose(); this.faceModelBuilder = null; this.CurrentBuilderStatus = "Capture Complete"; }
/// <summary> /// Disposes the face model builder /// </summary> private void DisposeFaceModelBuilder() { var localFmb = this.fmb; this.fmb = null; if (localFmb != null) { localFmb.CollectionCompleted -= this.FaceModelBuilderCollectionCompleted; localFmb.Dispose(); } }
/// <summary> /// Start a face capture operation /// </summary> private void StartCapture() { this.StopFaceCapture(); this.faceModelBuilder = null; this.faceModelBuilder = this.highDefinitionFaceFrameSource.OpenModelBuilder(FaceModelBuilderAttributes.None); this.faceModelBuilder.BeginFaceDataCollection(); this.faceModelBuilder.CollectionCompleted += this.HdFaceBuilder_CollectionCompleted; }
public void Evaluate(int SpreadMax) { if (first) { var vertices = this.faceModel.CalculateVerticesForAlignment(this.faceAlignment); this.FOutVertices.SliceCount = vertices.Count; this.FOutIndices.SliceCount = this.faceModel.TriangleIndices.Count; this.FOutIndices.AssignFrom(this.faceModel.TriangleIndices); this.first = false; } if (this.FInvalidateConnect) { if (this.FInRuntime.PluginIO.IsConnected) { //Cache runtime node this.runtime = this.FInRuntime[0]; this.runtime.SkeletonFrameReady += SkeletonReady; if (runtime != null) { for (int i = 0; i < this.faceFrameSources.Length; i++) { this.faceFrameSources[i] = new HighDefinitionFaceFrameSource(this.runtime.Runtime); this.faceFrameReaders[i] = this.faceFrameSources[i].OpenReader(); this.faceFrameReaders[i].FrameArrived += this.faceReader_FrameArrived; } this.faceModelBuilder = this.faceFrameSources[0].OpenModelBuilder(FaceModelBuilderAttributes.None); this.faceModelBuilder.BeginFaceDataCollection(); this.faceModelBuilder.CollectionCompleted += this.HdFaceBuilder_CollectionCompleted; } } else { this.runtime.SkeletonFrameReady -= SkeletonReady; for (int i = 0; i < this.faceFrameSources.Length; i++) { this.faceFrameReaders[i].FrameArrived -= this.faceReader_FrameArrived; this.faceFrameReaders[i].Dispose(); //this.faceFrameSources[i].Dispose(); } } this.FInvalidateConnect = false; } this.FOutVertices.Flush(true); }
/// <summary> /// センサーから骨格データを受け取り処理します /// </summary> private void OnMultiSourceFrameArrived(object sender, MultiSourceFrameArrivedEventArgs e) { var frame = e.FrameReference.AcquireFrame(); if (frame == null) { return; } // BodyFrameに関してフレームを取得する using (var bodyFrame = frame.BodyFrameReference.AcquireFrame()) { if (bodyFrame != null) { if (bodies == null) { bodies = new Body[bodyFrame.BodyCount]; } // 骨格データを格納 bodyFrame.GetAndRefreshBodyData(bodies); // FaceTrackingが開始されていないか確認 if (!this.hdFaceFrameSource.IsTrackingIdValid) { // トラッキング先の骨格を選択 var target = (from body in this.bodies where body.IsTracked select body).FirstOrDefault(); if (target != null) { // 検出されたBodyに対してFaceTrackingを行うよう、FaceFrameSourceを設定 hdFaceFrameSource.TrackingId = target.TrackingId; // FaceModelBuilderを初期化 if (this.faceModelBuilder != null) { this.faceModelBuilder.Dispose(); this.faceModelBuilder = null; } this.faceModelBuilder = this.hdFaceFrameSource.OpenModelBuilder(DefaultAttributes); // FaceModelBuilderがモデルの構築を完了した時に発生するイベント this.faceModelBuilder.CollectionCompleted += this.OnModelBuilderCollectionCompleted; // FaceModelBuilderの状態を報告するイベント this.faceModelBuilder.CaptureStatusChanged += faceModelBuilder_CaptureStatusChanged; this.faceModelBuilder.CollectionStatusChanged += faceModelBuilder_CollectionStatusChanged; // キャプチャの開始 this.faceModelBuilder.BeginFaceDataCollection(); } } } } }
// This event fires when the face capture operation is completed private void HdFaceBuilder_CollectionCompleted( object sender, FaceModelBuilderCollectionCompletedEventArgs e ) { var modelData = e.ModelData; _currentFaceModel = modelData.ProduceFaceModel(); _faceModelBuilder.Dispose(); _faceModelBuilder = null; _currentBuilderStatus = "Capture Complete"; _currentCollectionStatus = string.Empty; }
/// <summary> /// Cancel the current face capture operation /// </summary> private void StopFaceCapture() { if (this.currentModelCollectionOperation != null) { this.currentModelCollectionOperation.Cancel(); this.currentModelCollectionOperation = null; } if (this.faceModelBuilder != null) { this.faceModelBuilder.CollectionStatusChanged -= this.FaceModelBuilder_CollectionStatusChanged; this.faceModelBuilder.CaptureStatusChanged -= this.FaceModelBuilder_CaptureStatusChanged; this.faceModelBuilder.Dispose(); this.faceModelBuilder = null; } }
public override bool StartSensor() { _bodySource = _kinect.BodyFrameSource; _bodyReader = _bodySource.OpenReader(); _bodyReader.FrameArrived += BodyReader_FrameArrived; _hdFaceFrameSource = new HighDefinitionFaceFrameSource(_kinect); _hdFaceFrameSource.TrackingIdLost += HdFaceSource_TrackingIdLost; _hdFaceFrameReader = _hdFaceFrameSource.OpenReader(); _hdFaceFrameReader.FrameArrived += HdFaceReader_FrameArrived; _currentFaceModel = new FaceModel(); _currentFaceAlignment = new FaceAlignment(); InitializeMesh(); UpdateMesh(); // Text style for our jig _style = new TextStyle(); _style.Font = new FontDescriptor("standard.shx", false, false, 0, 0); _style.TextSize = 10; var res = base.StartSensor(); if (res) { if (_faceModelBuilder != null) { _faceModelBuilder.Dispose(); } _faceModelBuilder = _hdFaceFrameSource.OpenModelBuilder( FaceModelBuilderAttributes.None ); _faceModelBuilder.BeginFaceDataCollection(); _faceModelBuilder.CollectionCompleted += HdFaceBuilder_CollectionCompleted; } return(res); }
private void HdFaceSource_TrackingIdLost(object sender, TrackingIdLostEventArgs e) { var lostTrackingID = e.TrackingId; if (currentTrackingId == lostTrackingID) { currentTrackingId = 0; currentTrackedBody = null; if (faceModelBuilder != null) { faceModelBuilder.Dispose(); faceModelBuilder = null; } highDefinitionFaceFrameSource.TrackingId = 0; } }
/// <summary> /// This event fires when the face capture operation is completed /// </summary> /// <param name="sender">object sending the event</param> /// <param name="e">event arguments</param> private void HdFaceBuilder_CollectionCompleted(object sender, FaceModelBuilderCollectionCompletedEventArgs e) { Log.LogMessage("FaceTracking complete"); if (OnAskIfCaptured != null) { OnAskIfCaptured(true, true, true, true, true); } var modelData = e.ModelData; this.currentFaceModel = modelData.ProduceFaceModel(); this.faceModelBuilder.Dispose(); this.faceModelBuilder = null; //The kinect is done preparing here. }
// This event is fired when a tracking is lost for a // body tracked by HDFace Tracker private void HdFaceSource_TrackingIdLost( object sender, TrackingIdLostEventArgs e ) { var lostTrackingID = e.TrackingId; if (_currentTrackingId == lostTrackingID) { _currentTrackingId = 0; _currentTrackedBody = null; if (_faceModelBuilder != null) { _faceModelBuilder.Dispose(); _faceModelBuilder = null; } _hdFaceFrameSource.TrackingId = 0; } }
/// <summary> /// FaceModelBuilderがモデルの構築を完了したときのイベントを処理します /// </summary> private void OnModelBuilderCollectionCompleted(object sender, FaceModelBuilderCollectionCompletedEventArgs e) { var modelData = e.ModelData; this.faceModel = modelData.ProduceFaceModel(); // MeshをUpdate UpdateMesh(); // SkinColorとHairColorの値も更新 this.SkinColor = UIntToColor(this.faceModel.SkinColor); this.HairColor = UIntToColor(this.faceModel.HairColor); // 更新を行う this.FaceModelBuilderStatus = GetCollectionStatus(((FaceModelBuilder)sender).CollectionStatus); this.FaceModelCaptureStatus = ((FaceModelBuilder)sender).CaptureStatus.ToString(); this.faceModelBuilder.Dispose(); this.faceModelBuilder = null; }
public void InitializeKinect() { m_sensor = KinectSensor.GetDefault(); m_bodyReader = m_sensor.BodyFrameSource.OpenReader(); m_bodyReader.FrameArrived += m_bodyReader_FrameArrived; m_hdFaceSource = new HighDefinitionFaceFrameSource(m_sensor); m_hdFaceReader = m_hdFaceSource.OpenReader(); m_hdFaceReader.FrameArrived += m_hdFaceReader_FrameArrived; m_faceModel = new FaceModel(); m_faceBuilder = m_hdFaceReader.HighDefinitionFaceFrameSource.OpenModelBuilder(FaceModelBuilderAttributes.HairColor | FaceModelBuilderAttributes.SkinColor); m_faceBuilder.CollectionCompleted += m_faceBuilder_CollectionCompleted; m_faceBuilder.CaptureStatusChanged += m_faceBuilder_CaptureStatusChanged; m_faceBuilder.CollectionStatusChanged += m_faceBuilder_CollectionStatusChanged; m_faceAlignment = new FaceAlignment(); m_trackedBodyId = 0; m_faceBuilderStarted = false; m_faceBuildComplete = false; m_sensor.Open(); }
public Face(KinectSensor sensor, BodyFrameReader bodyReader) { var bodySource = sensor.BodyFrameSource; bodyReader.FrameArrived += BodyReader_FrameArrived; highDefinitionFaceFrameSource = new HighDefinitionFaceFrameSource(sensor); highDefinitionFaceFrameSource.TrackingIdLost += HdFaceSource_TrackingIdLost; highDefinitionFaceFrameReader = highDefinitionFaceFrameSource.OpenReader(); highDefinitionFaceFrameReader.FrameArrived += HdFaceReader_FrameArrived; currentFaceModel = new FaceModel(); currentFaceAlignment = new FaceAlignment(); UpdateMesh(); faceModelBuilder = highDefinitionFaceFrameSource.OpenModelBuilder(FaceModelBuilderAttributes.None); faceModelBuilder.BeginFaceDataCollection(); faceModelBuilder.CollectionCompleted += HdFaceBuilder_CollectionCompleted; }
private void InitializeHDFace() { hdFaceFrameSource = new HighDefinitionFaceFrameSource(kinect); if (hdFaceFrameSource == null) { throw new Exception("Cannot create HD Face Frame Source"); } hdFaceFrameReader = hdFaceFrameSource.OpenReader(); hdFaceFrameReader.FrameArrived += hdFaceFrameReader_FrameArrived; faceModel = new FaceModel(); faceAlignment = new FaceAlignment(); FaceModelBuilderAttributes attributes = FaceModelBuilderAttributes.None; faceModelBuilder = hdFaceFrameSource.OpenModelBuilder(attributes); if (faceModelBuilder == null) { throw new Exception("Cannot open Face Model Builder"); } faceModelBuilder.BeginFaceDataCollection(); faceModelBuilder.CollectionCompleted += faceModelBuilder_CollectionCompleted; }
/// <summary> /// Start a face capture operation /// </summary> private void StartCapture() { if (this.currentModelCollectionOperation != null) { this.StopFaceCapture(); } this.faceModelBuilder = this.highDefinitionFaceFrameSource.OpenModelBuilder(FaceModelBuilderAttributes.None); this.faceModelBuilder.CollectionStatusChanged += this.FaceModelBuilder_CollectionStatusChanged; this.faceModelBuilder.CaptureStatusChanged += this.FaceModelBuilder_CaptureStatusChanged; this.currentModelCollectionOperation = this.faceModelBuilder.CollectFaceDataAsync(); this.currentModelCollectionOperation.Completed = new AsyncOperationCompletedHandler <FaceModelData>((IAsyncOperation <FaceModelData> asyncOp, AsyncStatus status) => { if (status == AsyncStatus.Completed) { using (var modelData = asyncOp.GetResults()) { this.currentFaceModel = modelData.ProduceFaceModel(); } this.StopFaceCapture(); currentCaptureStatusString = "Capture Complete"; currentCollectionStatusString = ""; } else if (status == AsyncStatus.Error) { this.StopFaceCapture(); currentCaptureStatusString = "Error collecting face data!"; currentCollectionStatusString = ""; } else { this.StopFaceCapture(); currentCaptureStatusString = "Collecting face data incomplete!"; currentCollectionStatusString = ""; } }); }
/// <summary> /// Handles face frame updates /// </summary> private void FaceFrameArrived(object sender, HighDefinitionFaceFrameArrivedEventArgs e) { ulong?newTrackingId = null; using (var frame = e.FrameReference.AcquireFrame()) { if (frame != null) { if (frame.IsTrackingIdValid && frame.IsFaceTracked) { frame.GetAndRefreshFaceAlignmentResult(this.faceAlignment); this.faceModel = frame.FaceModel; newTrackingId = frame.TrackingId; } } } if (this.Processors.Any(x => x.RequiresFaceModelBuilder) && newTrackingId.HasValue && this.currentTrackingId != newTrackingId) { lock (this.processFaceModelMutex) { this.currentTrackingId = newTrackingId; this.faceModel = null; this.constructedFaceModel = null; this.DisposeFaceModelBuilder(); this.fmb = this.faceSource.OpenModelBuilder(FaceModelBuilderAttributes.HairColor | FaceModelBuilderAttributes.SkinColor); this.fmb.BeginFaceDataCollection(); this.fmb.CollectionCompleted += this.FaceModelBuilderCollectionCompleted; } } lock (this) { this.faceReady = true; this.StartWorkerIfReady(); } }