public BodyDetectionViewModel(ITrackedVideo headPoints = null, Dictionary <int, ISingleFrameResult> results = null, string file = "") { ThresholdValue = headPoints.ThresholdValue; Video = ModelResolver.Resolve <IVideo>(); VideoSettings = ModelResolver.Resolve <IVideoSettings>(); BlobDetector = new CvBlobDetector(); RBSK = MouseService.GetStandardMouseRules(); HeadPoints = results; FileLocation = file; OpenVideo(); }
public ITrackedVideo GetData() { ITrackedVideo trackedVideo = ModelResolver.Resolve <ITrackedVideo>(); trackedVideo.FileName = FileName; trackedVideo.Result = Result; trackedVideo.SmoothMotion = SmoothMotion; //trackedVideo.SmoothFactor = SmoothFactor; trackedVideo.FrameRate = FrameRate; trackedVideo.CentroidSize = CentroidSize; trackedVideo.PelvicArea1 = PelvicArea1; trackedVideo.PelvicArea2 = PelvicArea2; trackedVideo.PelvicArea3 = PelvicArea3; trackedVideo.PelvicArea4 = PelvicArea4; trackedVideo.UnitsToMilimeters = UnitsToMilimeters; trackedVideo.Message = Message; if (Results != null) { Dictionary <int, SingleFrameResultXml> headPoints = Results.GetData(); Dictionary <int, ISingleFrameResult> finalResults = new Dictionary <int, ISingleFrameResult>(); foreach (var entry in headPoints) { int key = entry.Key; SingleFrameResultXml currentEntry = entry.Value; if (currentEntry == null) { finalResults.Add(key, null); } else { finalResults.Add(key, currentEntry.GetData()); } } trackedVideo.Results = finalResults; } //if (WaistSizes != null) //{ // trackedVideo.WaistSizes = WaistSizes.GetData(); //} if (MotionTrack != null) { trackedVideo.MotionTrack = MotionTrack.Select(x => x.GetPoint()).ToArray(); } if (SmoothedMotionTrack != null) { trackedVideo.SmoothedMotionTrack = SmoothedMotionTrack.Select(x => x.GetPoint()).ToArray(); } if (OrientationTrack != null) { trackedVideo.OrientationTrack = OrientationTrack.Select(x => x.GetVector()).ToArray(); } if (Boundries != null) { trackedVideo.Boundries = Boundries.Select(x => x.GetBoundary()).ToArray(); } if (Events != null) { trackedVideo.Events = Events.Select(x => x.GetData()).ToArray(); } if (InteractingBoundries != null) { trackedVideo.InteractingBoundries = InteractingBoundries.GetData().ToDictionary(kvp => kvp.Key.GetBoundary(), kvp => kvp.Value.Select(x => x.GetData()).ToArray()); } trackedVideo.MinInteractionDistance = MinInteractionDistance; trackedVideo.GapDistance = GapDistance; trackedVideo.ThresholdValue = ThresholdValue; trackedVideo.ThresholdValue2 = ThresholdValue2; trackedVideo.StartFrame = StartFrame; trackedVideo.EndFrame = EndFrame; trackedVideo.UnitsToMilimeters = UnitsToMilimeters; trackedVideo.UpdateTrack(); return(trackedVideo); }
//private void Closing(object args) //{ // if (!Running) // { // return; // } // var result = MessageBox.Show("The program is currently running, are you sure you want to cancel it?", "Batch Running", MessageBoxButton.YesNo, MessageBoxImage.Question); // if (result == MessageBoxResult.Yes) // { // IEnumerable<SingleMouseViewModel> allMice = TgItemsSource.Concat(NtgItemsSource); // foreach (SingleMouseViewModel mouse in allMice) // { // mouse.Stop = true; // } // Running = false; // return; // } // CancelEventArgs cancelEventArgs = args as CancelEventArgs; // if (cancelEventArgs != null) // { // cancelEventArgs.Cancel = true; // } //} private void LoadOutputFolder() { IRepository repo = RepositoryResolver.Resolve <IRepository>(); string initialLocation = repo.GetValue <string>("OutputFolderLocation"); string folderLocation = FileBrowser.BrowseForFolder(initialLocation); if (string.IsNullOrWhiteSpace(folderLocation)) { return; } repo.SetValue("OutputFolderLocation", folderLocation); repo.Save(); string[] artFiles = Directory.GetFiles(folderLocation, "*.art"); foreach (string file in artFiles) //Parallel.ForEach(artFiles, file => { string videoFileName = Path.GetFileNameWithoutExtension(file); //if (videoFileName.Contains("091119-0038")) //{ // Console.WriteLine("h"); //} if (string.IsNullOrWhiteSpace(videoFileName)) { continue; //return; } //if (videoFileName.Contains("091218-0179")) //{ // Console.WriteLine("test"); //} //SingleMouseViewModel mouse = null; ////videoFileName = file.Replace(".art", ""); //bool testBreak = false; //foreach (var listMouse in TgItemsSource) //{ // foreach (var temp in listMouse.VideoFiles) // { // if (temp.VideoFileName.Contains(videoFileName)) // { // mouse = listMouse; // testBreak = true; // break; // } // } // if (testBreak) // { // break; // } //} SingleMouseViewModel mouse = TgItemsSource.FirstOrDefault(x => x.VideoFiles.FirstOrDefault(y => y.VideoFileName.Contains(videoFileName)) != null); if (mouse == null) { //Can't find mouse //return; continue; } ISingleFile singleFile = mouse.VideoFiles.First(x => x.VideoFileName.Contains(videoFileName)); XmlSerializer serializer = new XmlSerializer(typeof(TrackedVideoXml)); TrackedVideoXml trackedVideoXml; using (StreamReader reader = new StreamReader(file)) { trackedVideoXml = (TrackedVideoXml)serializer.Deserialize(reader); } ITrackedVideo trackedVideo = trackedVideoXml.GetData(); IMouseDataResult mouseDataResult = ModelResolver.Resolve <IMouseDataResult>(); if (trackedVideo.Result != SingleFileResult.Ok) { mouseDataResult.Message = trackedVideo.Message; mouseDataResult.VideoOutcome = trackedVideo.Result; if (mouse.Results == null) { mouse.Results = new Dictionary <ISingleFile, IMouseDataResult>(); } mouse.Results.Add(singleFile, mouseDataResult); mouse.ReviewCommand.RaiseCanExecuteChangedNotification(); mouse.UpdateProgress(singleFile, 1); continue; } var tempResults = trackedVideo.Results; Dictionary <int, ISingleFrameResult> results = new Dictionary <int, ISingleFrameResult>(); foreach (var kvp in tempResults) { ISingleFrameResult singleFrame = ModelResolver.Resolve <ISingleFrameResult>(); if (kvp.Value != null) { ISingleFrameResult tempResult = kvp.Value; singleFrame.HeadPoints = tempResult.HeadPoints; singleFrame.CentroidSize = tempResult.CentroidSize; singleFrame.PelvicArea = tempResult.PelvicArea; singleFrame.PelvicArea2 = tempResult.PelvicArea2; singleFrame.PelvicArea3 = tempResult.PelvicArea3; singleFrame.PelvicArea4 = tempResult.PelvicArea4; singleFrame.SmoothedHeadPoint = tempResult.SmoothedHeadPoint; singleFrame.Centroid = tempResult.Centroid; } results.Add(kvp.Key, singleFrame); } mouseDataResult.Name = mouse.Id; mouseDataResult.Results = results; mouseDataResult.Age = mouse.Age; mouseDataResult.Boundaries = trackedVideo.Boundries; mouseDataResult.VideoOutcome = SingleFileResult.Ok; mouseDataResult.GapDistance = trackedVideo.GapDistance; mouseDataResult.ThresholdValue = trackedVideo.ThresholdValue; mouseDataResult.ThresholdValue2 = trackedVideo.ThresholdValue2; mouseDataResult.StartFrame = trackedVideo.StartFrame; mouseDataResult.EndFrame = trackedVideo.EndFrame; mouseDataResult.SmoothMotion = trackedVideo.SmoothMotion; mouseDataResult.FrameRate = trackedVideo.FrameRate; mouseDataResult.UnitsToMilimeters = trackedVideo.UnitsToMilimeters; mouseDataResult.SmoothFactor = 0.68; mouseDataResult.GenerateResults(file); mouseDataResult.PelvicArea = trackedVideo.PelvicArea1; mouseDataResult.PelvicArea2 = trackedVideo.PelvicArea2; mouseDataResult.PelvicArea3 = trackedVideo.PelvicArea3; mouseDataResult.PelvicArea4 = trackedVideo.PelvicArea4; mouseDataResult.Type = mouse.Type; mouseDataResult.DataLoadComplete(); if (mouse.Results == null) { mouse.Results = new Dictionary <ISingleFile, IMouseDataResult>(); } mouse.UpdateProgress(singleFile, 1); mouse.Results.Add(singleFile, mouseDataResult); mouse.ReviewCommand.RaiseCanExecuteChangedNotification(); }//); ExportAllCommand.RaiseCanExecuteChangedNotification(); }
public void RunFiles(string outputLocation) { if (!string.IsNullOrWhiteSpace(outputLocation)) { if (!outputLocation.EndsWith("\\")) { outputLocation += "\\"; } } Rbsk = new ConcurrentBag <IRBSKVideo>(); ConcurrentDictionary <ISingleFile, IMouseDataResult> allResults = new ConcurrentDictionary <ISingleFile, IMouseDataResult>(); List <ISingleFile> files = VideoFiles; foreach (var file in files) { IMouseDataResult result = ModelResolver.Resolve <IMouseDataResult>(); 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, ".art"); } else { string fileName = Path.GetFileNameWithoutExtension(videoFile); fileName += ".art"; artFile = outputLocation + fileName; } ArtFile = artFile; if (File.Exists(artFile)) { XmlSerializer serializer = new XmlSerializer(typeof(TrackedVideoXml)); TrackedVideoXml trackedVideoXml; using (StreamReader reader = new StreamReader(artFile)) { trackedVideoXml = (TrackedVideoXml)serializer.Deserialize(reader); } ITrackedVideo trackedVideo = trackedVideoXml.GetData(); result.Boundaries = trackedVideo.Boundries; result.VideoOutcome = trackedVideo.Result; result.GapDistance = trackedVideo.GapDistance; 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 (IRBSKVideo rbskVideo = ModelResolver.Resolve <IRBSKVideo>()) 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; 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.ProgressUpdates += (s, e) => UpdateProgress(file, e.Progress); rbskVideo.Process(); if (Stop) { return; } result.GapDistance = rbskVideo.GapDistance; result.MinInteractionDistance = 15; result.ThresholdValue = rbskVideo.ThresholdValue; result.ThresholdValue2 = rbskVideo.ThresholdValue2; 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); } }); }