private void GeneratePreview() { IVideoSettings videoSettings = ModelResolver.Resolve <IVideoSettings>(); videoSettings.FileName = SelectedMouse.VideoFileName; videoSettings.ThresholdValue = BinaryThreshold; videoSettings.Roi = ROI; Image <Gray, Byte> binaryBackground; IEnumerable <IBoundaryBase> boundaries; videoSettings.GeneratePreview(Video, out binaryBackground, out boundaries); BinaryBackground = binaryBackground; VideoSettings = videoSettings; PreviewGenerated = true; }
private void ReRunVideo(string fileName) { ProgressView view = new ProgressView(); ProgressViewModel viewModel = new ProgressViewModel(); view.DataContext = viewModel; viewModel.CancelPressed += (sender, args) => { CancelReRun(); }; viewModel.WindowAboutToClose += (sender, args) => { if (RbskVideo != null) { RbskVideo.Paused = true; } }; viewModel.WindowClosingCancelled += (sender, args) => { if (RbskVideo != null) { RbskVideo.Paused = false; } }; CancelTask = false; Task.Factory.StartNew(() => { IMouseDataResult result = Model.Results[SelectedVideo.Model]; try { IVideoSettings videoSettings = ModelResolver.Resolve <IVideoSettings>(); using (IRBSKVideo rbskVideo = ModelResolver.Resolve <IRBSKVideo>()) using (IVideo video = ModelResolver.Resolve <IVideo>()) { RbskVideo = rbskVideo; video.SetVideo(fileName); if (video.FrameCount < 100) { result.VideoOutcome = SingleFileResult.FrameCountTooLow; result.Message = "Exception: " + SelectedVideo.VideoFileName + " - Frame count too low"; //allResults.TryAdd(file, result); viewModel.ProgressValue = 1; //continue; return; } videoSettings.FileName = SelectedVideo.VideoFileName; videoSettings.ThresholdValue = BinaryThreshold; video.SetFrame(0); Image <Gray, Byte> binaryBackground; IEnumerable <IBoundaryBase> boundaries; videoSettings.GeneratePreview(video, out binaryBackground, out boundaries); result.Boundaries = boundaries.ToArray(); rbskVideo.GapDistance = GapDistance; rbskVideo.ThresholdValue = BinaryThreshold; rbskVideo.Video = video; rbskVideo.BackgroundImage = binaryBackground; rbskVideo.ProgressUpdates += (s, e) => { double progress = e.Progress; if (progress >= 1) { progress = 0.999; } Application.Current.Dispatcher.Invoke(() => { viewModel.ProgressValue = progress; }); }; rbskVideo.Process(); RbskVideo = null; //if (Stop) //{ // state.Stop(); // return; //} if (CancelTask) { return; } result.Results = rbskVideo.HeadPoints; result.GenerateResults(); result.VideoOutcome = SingleFileResult.Ok; //allResults.TryAdd(SelectedVideo, result); } Application.Current.Dispatcher.Invoke(() => { result.ResetFrames(); Results[SelectedVideo.Model] = result; CurrentResult = result; SliderValueChanged(); SaveCommand.RaiseCanExecuteChangedNotification(); viewModel.ProgressValue = 1; SelectedVideoChanged(); }); } catch (Exception e) { result.VideoOutcome = SingleFileResult.Error; result.Message = "Exception: " + SelectedVideo.VideoFileName + " - " + e.Message; //allResults.TryAdd(SelectedVideo, result); Application.Current.Dispatcher.Invoke(() => { viewModel.ProgressValue = 1; }); RbskVideo = null; } }); view.ShowDialog(); }
public void RunFiles(string outputLocation) { if (!string.IsNullOrWhiteSpace(outputLocation)) { if (!outputLocation.EndsWith("\\")) { outputLocation += "\\"; } } Rbsk = new ConcurrentBag <IRBSKVideo2>(); ConcurrentDictionary <ISingleFile, IMouseDataExtendedResult> allResults = new ConcurrentDictionary <ISingleFile, IMouseDataExtendedResult>(); List <ISingleFile> files = VideoFiles; foreach (var file in files) { IMouseDataExtendedResult result = ModelResolver.Resolve <IMouseDataExtendedResult>(); result.Name = file.VideoFileName; result.Type = Type; ISaveArtFile save = ModelResolver.Resolve <ISaveArtFile>(); string artFile; string videoFile = file.VideoFileName; if (string.IsNullOrWhiteSpace(outputLocation)) { string extension = Path.GetExtension(videoFile); artFile = videoFile.Replace(extension, ".arwt"); } else { string fileName = Path.GetFileNameWithoutExtension(videoFile); fileName += ".arwt"; artFile = outputLocation + fileName; } ArtFile = artFile; if (File.Exists(artFile)) { XmlSerializer serializer = new XmlSerializer(typeof(TrackedVideoWithSettingsXml)); TrackedVideoWithSettingsXml trackedVideoXml; try { using (StreamReader reader = new StreamReader(artFile)) { trackedVideoXml = (TrackedVideoWithSettingsXml)serializer.Deserialize(reader); } } catch (Exception) { using (StreamReader reader = new StreamReader(artFile)) { XmlSerializer serializer2 = new XmlSerializer(typeof(TrackedVideoXml)); trackedVideoXml = new TrackedVideoWithSettingsXml((TrackedVideoXml)serializer2.Deserialize(reader)); } } ITrackedVideo trackedVideo = trackedVideoXml.GetData(); result.Boundaries = trackedVideo.Boundries; result.VideoOutcome = trackedVideo.Result; result.GapDistance = trackedVideo.GapDistance; result.WhiskerSettings = trackedVideo.WhiskerSettings; result.ThresholdValue = trackedVideo.ThresholdValue; result.ThresholdValue2 = trackedVideo.ThresholdValue2; result.StartFrame = trackedVideo.StartFrame; result.EndFrame = trackedVideo.EndFrame; result.SmoothMotion = trackedVideo.SmoothMotion; result.FrameRate = trackedVideo.FrameRate; result.UnitsToMilimeters = trackedVideo.UnitsToMilimeters; result.SmoothFactor = 0.68; result.GenerateResults(artFile); result.PelvicArea = trackedVideo.PelvicArea1; result.PelvicArea2 = trackedVideo.PelvicArea2; result.PelvicArea3 = trackedVideo.PelvicArea3; result.PelvicArea4 = trackedVideo.PelvicArea4; result.Results = trackedVideo.Results; result.GenerateResults(); result.DataLoadComplete(); allResults.TryAdd(file, result); UpdateProgress(file, 1); continue; } try { IVideoSettings videoSettings = ModelResolver.Resolve <IVideoSettings>(); using (IRBSKVideo2 rbskVideo = ModelResolver.Resolve <IRBSKVideo2>()) using (IVideo video = ModelResolver.Resolve <IVideo>()) { Rbsk.Add(rbskVideo); video.SetVideo(file.VideoFileName); if (video.FrameCount <= 100) { result.VideoOutcome = SingleFileResult.FrameCountTooLow; result.Message = "Exception: " + file.VideoFileName + " - Frame count too low"; allResults.TryAdd(file, result); UpdateProgress(file, 1); save.SaveFile(artFile, videoFile, result); continue; } result.FrameRate = video.FrameRate; video.SetFrame(0); videoSettings.FileName = file.VideoFileName; videoSettings.ThresholdValue = ThresholdValue; videoSettings.Roi = ROI; Image <Gray, Byte> binaryBackground; IEnumerable <IBoundaryBase> boundaries; videoSettings.GeneratePreview(video, out binaryBackground, out boundaries); result.Boundaries = boundaries.ToArray(); rbskVideo.Video = video; rbskVideo.GapDistance = GapDistance; rbskVideo.BackgroundImage = binaryBackground; rbskVideo.ThresholdValue = ThresholdValue; rbskVideo.ThresholdValue2 = ThresholdValue2; rbskVideo.Roi = ROI; rbskVideo.WhiskerSettings = WhiskerSettings; rbskVideo.FindWhiskers = true; rbskVideo.ProgressUpdates += (s, e) => UpdateProgress(file, e.Progress); rbskVideo.Process(); if (Stop) { return; } result.GapDistance = rbskVideo.GapDistance; result.WhiskerSettings = rbskVideo.WhiskerSettings; result.MinInteractionDistance = 15; result.ThresholdValue = rbskVideo.ThresholdValue; result.ThresholdValue2 = rbskVideo.ThresholdValue2; result.WhiskerSettings = WhiskerSettings; result.Results = rbskVideo.HeadPoints; result.ResetFrames(); //result.FrameRate = FrameRate; result.SmoothMotion = SmoothMotion; result.GenerateResults(); result.VideoOutcome = SingleFileResult.Ok; result.DataLoadComplete(); allResults.TryAdd(file, result); save.SaveFile(artFile, videoFile, result); } } catch (Exception e) { Console.WriteLine(e.StackTrace); Console.WriteLine(e.Message); result.VideoOutcome = SingleFileResult.Error; result.Message = "Exception: " + file.VideoFileName + " - " + e.Message + " - " + e.StackTrace; result.DataLoadComplete(); allResults.TryAdd(file, result); UpdateProgress(file, 1); save.SaveFile(artFile, videoFile, result); } if (Cancel) { break; } if (Stop) { return; } } if (Stop) { return; } Application.Current.Dispatcher.Invoke(() => { try { Results = allResults.ToDictionary(x => x.Key, x => x.Value); } catch (Exception e) { Console.WriteLine("Error in single mouse viewmodel!!! " + e.InnerException); } }); }