public void UpdateFramesRepo() { this.WhenAnyValue(x => x.SelectedIndex) .Skip(1) .Subscribe(x => { if (Status.Status == Enums.Status.Ready) { Status = new AppStatusInfo { Status = Enums.Status.Ready, StringStatus = $"{Enums.Status.Ready.ToString()} | {Frames[SelectedIndex].Patch}" } } ; SwitchBoundBoxesVisibilityToTrue(); if (Frames[SelectedIndex].IsFavorite) { FavoritesStateString = "Remove from favorites"; } else { FavoritesStateString = "Add to favorites"; } UpdateUi(); }); }
public async void SignIn() { var patch = AppDomain.CurrentDomain.BaseDirectory + "user_info"; if (File.Exists(patch)) { if (Status.Status == Enums.Status.Unauthenticated) { Status = new AppStatusInfo() { Status = Enums.Status.Ready }; return; } } var result = await Views.SignInWindow.Show(null); if (Status.Status == Enums.Status.Unauthenticated && result.IsSignIn) { Status = new AppStatusInfo() { Status = Enums.Status.Ready } } ; }
private async void SaveAllImagesWithObjects() { try { if (Frames == null || Frames.Count < 1) { Status = new AppStatusInfo() { Status = Enums.Status.Ready }; return; } Status = new AppStatusInfo() { Status = Enums.Status.Working }; var openDig = new OpenFolderDialog() { Title = "Choose a directory to save images with objects" }; var dirName = await openDig.ShowAsync(new Window()); if (string.IsNullOrEmpty(dirName) || !Directory.Exists(dirName)) { Status = new AppStatusInfo() { Status = Enums.Status.Ready }; return; } foreach (var frame in Frames) { if (frame.Rectangles == null || frame.Rectangles.Count <= 0) { continue; } File.Copy(frame.Patch, Path.Combine(dirName, Path.GetFileName(frame.Patch))); } Console.WriteLine($"Saved to {dirName}"); Status = new AppStatusInfo() { Status = Enums.Status.Ready, StringStatus = $"Success | saved to {dirName}" }; } catch (Exception ex) { Status = new AppStatusInfo() { Status = Enums.Status.Error, StringStatus = $"Error | {ex.Message.Replace('\n', ' ')}" }; } }
public async void SignUp() { var result = await SignUpWindow.Show(null); if (Status.Status == Enums.Status.Unauthenticated && result.IsSignIn) { Status = new AppStatusInfo { Status = Enums.Status.Ready } } ; }
private async void OpenFile() { Status = new AppStatusInfo() { Status = Enums.Status.Working }; try { var openDig = new OpenFolderDialog() { Title = "Choose a directory with images" }; var dirName = await openDig.ShowAsync(new Window()); if (string.IsNullOrEmpty(dirName) || !Directory.Exists(dirName)) { Status = new AppStatusInfo() { Status = Enums.Status.Ready }; return; } var fileNames = Directory.GetFiles(dirName); _frameLoadProgressIndex = 0; Frames = new List <Frame>(); foreach (var fileName in fileNames) { var frame = new Frame(); frame.OnLoad += FrameLoadingProgressUpdate; frame.Load(fileName, Enums.ImageLoadMode.Miniature); Frames.Add(frame); } Frames = new List <Frame>(Frames); if (SelectedIndex < 0) { SelectedIndex = 0; } } catch (Exception ex) { Status = new AppStatusInfo() { Status = Enums.Status.Error, StringStatus = $"Error | {ex.Message.Replace('\n', ' ')}" }; } }
public static ISolidColorBrush GetColor(this AppStatusInfo appStatusInfo) { switch (appStatusInfo.Status) { case Enums.Status.Ready: return(new SolidColorBrush(Color.FromRgb(0, 128, 255))); case Enums.Status.Success: return(new SolidColorBrush(Color.FromRgb(0, 135, 60))); case Enums.Status.Working: return(new SolidColorBrush(Color.FromRgb(226, 90, 0))); case Enums.Status.Error: return(new SolidColorBrush(Color.FromRgb(216, 14, 0))); case Enums.Status.Unauthenticated: return(new SolidColorBrush(Color.FromRgb(120, 0, 120))); default: throw new Exception($"Invalid app status {appStatusInfo.Status.ToString()}"); } }
public MainWindowViewModel() { var canGoNext = this .WhenAnyValue(x => x.SelectedIndex) .Select(index => index < Frames.Count - 1); // The bound button will stay disabled, when // there is no more frames left. NextImageCommand = ReactiveCommand.Create( () => { SelectedIndex++; }, canGoNext); var canGoBack = this .WhenAnyValue(x => x.SelectedIndex) .Select(index => index > 0); // The bound button will stay disabled, when // there are no frames before the current one. PrevImageCommand = ReactiveCommand.Create( () => { SelectedIndex--; }, canGoBack); // Add here newer commands IncreaseCanvasCommand = ReactiveCommand.Create(IncreaseCanvas); ShrinkCanvasCommand = ReactiveCommand.Create(ShrinkCanvas); PredictAllCommand = ReactiveCommand.Create(PredictAll); OpenFileCommand = ReactiveCommand.Create(OpenFile); SaveAllCommand = ReactiveCommand.Create(SaveAll); this.WhenAnyValue(x => x.SelectedIndex) .Skip(1) .Subscribe(x => { if (Status.Status == Enums.Status.Ready) { Status = new AppStatusInfo { Status = Enums.Status.Ready, StringStatus = $"{Enums.Status.Ready.ToString()} | {Frames[SelectedIndex].Patch}" } } ; UpdateUi(); }); }
public void UpdateFramesRepo() { this.WhenAnyValue(x => x.SelectedIndex) .Skip(1) .Subscribe(x => { if (Status.Status == Enums.Status.Ready) { Status = new AppStatusInfo { Status = Enums.Status.Ready, StringStatus = $"{Enums.Status.Ready.ToString()} | {Frames[SelectedIndex].Patch}" } } ; UpdateUi(); }); }
private async void UpdateModel() { Status = new AppStatusInfo() { Status = Enums.Status.Working, StringStatus = $"Working | updating model..." }; if (_model == null) { _model = new NeuroModel(); } await _model.UpdateModel(); Status = new AppStatusInfo() { Status = Enums.Status.Ready }; }
private async void UpdateModel() { Status = new AppStatusInfo { Status = Enums.Status.Working, StringStatus = "Working | updating model..." }; if (_model == null) { _model = AvaloniaLocator.Current.GetService <INeuroModel>(); } await _model.UpdateModel(); Status = new AppStatusInfo { Status = Enums.Status.Ready }; }
private void FrameLoadingProgressUpdate() { _frameLoadProgressIndex++; if (_frameLoadProgressIndex < Frames.Count) { Status = new AppStatusInfo() { Status = Enums.Status.Working, StringStatus = $"Working | loading images: {_frameLoadProgressIndex} / {Frames.Count}" } } ; else { Status = new AppStatusInfo() { Status = Enums.Status.Ready }; } }
private async void SaveFavoritesImages() { try { if (Frames == null || Frames.Count < 1) { Status = new AppStatusInfo { Status = Enums.Status.Ready }; return; } Status = new AppStatusInfo { Status = Enums.Status.Working }; var annotations = new List <Annotation>(); var annotationWriter = new AvaloniaAnnotationFileWriter(_window); foreach (var frame in Frames) { if (!frame.IsFavorite) { continue; } var annotation = new Annotation { Filename = Path.GetFileName(frame.Path), Folder = Path.GetFullPath(Path.GetDirectoryName(frame.Path)), Segmented = 0, Size = new Size { Depth = 3, Height = frame.Height, Width = frame.Width } }; if (frame.Rectangles == null) { frame.Rectangles = new List <BoundBox>(); } var frameRectangles = frame.Rectangles as BoundBox[] ?? frame.Rectangles.ToArray(); foreach (var rectangle in frameRectangles) { annotation.Objects.Add(new Object { Name = "Pedestrian", Box = new Box { Xmax = rectangle.XBase + rectangle.WidthBase, Ymax = rectangle.YBase + rectangle.HeightBase, Xmin = rectangle.XBase, Ymin = rectangle.YBase } }); } annotations.Add(annotation); if (!frameRectangles.Any()) { frame.Rectangles = null; } } await annotationWriter.WriteMany(annotations); Status = new AppStatusInfo { Status = Enums.Status.Ready, StringStatus = $"Success | saved" }; } catch (Exception ex) { Console.WriteLine(ex); Status = new AppStatusInfo { Status = Enums.Status.Error, StringStatus = $"Error | {ex.Message.Replace('\n', ' ')}" }; } }
private async void OpenFile() { Status = new AppStatusInfo() { Status = Enums.Status.Working }; try { var openDig = new OpenFolderDialog() { Title = "Choose a directory with images" }; var dirName = await openDig.ShowAsync(new Window()); if (string.IsNullOrEmpty(dirName) || !Directory.Exists(dirName)) { Status = new AppStatusInfo() { Status = Enums.Status.Ready }; return; } var fileNames = Directory.GetFiles(dirName); _frameLoadProgressIndex = 0; Frames.Clear(); _frames.Clear(); GC.Collect(); var loadingFrames = new List <Frame>(); foreach (var fileName in fileNames) { // TODO: Проверка IsImage вне зависимости от расширений. if (!Path.HasExtension(fileName)) { continue; } if (Path.GetExtension(fileName).ToLower() != ".jpg" && Path.GetExtension(fileName).ToLower() != ".jpeg" && Path.GetExtension(fileName).ToLower() != ".png" && Path.GetExtension(fileName).ToLower() != ".bmp") { continue; } var frame = new Frame(); frame.OnLoad += FrameLoadingProgressUpdate; frame.Load(fileName, Enums.ImageLoadMode.Miniature); loadingFrames.Add(frame); } if (loadingFrames.Count == 0) { Status = new AppStatusInfo() { Status = Enums.Status.Ready }; return; } Frames = loadingFrames; if (SelectedIndex < 0) { SelectedIndex = 0; } UpdateFramesRepo(); UpdateUi(); _frames = new List <Frame>(Frames); Status = new AppStatusInfo() { Status = Enums.Status.Ready }; } catch (Exception ex) { Status = new AppStatusInfo() { Status = Enums.Status.Error, StringStatus = $"Error | {ex.Message.Replace('\n', ' ')}" }; } }
private async void PredictAll() { if (Frames == null || Frames.Count < 1) { return; } Status = new AppStatusInfo() { Status = Enums.Status.Working, StringStatus = $"Working | loading model..." }; if (_model == null) { _model = new NeuroModel(); } var isLoaded = await _model.Load(); if (!isLoaded) { Status = new AppStatusInfo() { Status = Enums.Status.Error, StringStatus = $"Error: unable to load model" }; _model.Dispose(); _model = null; return; } var index = 0; Status = new AppStatusInfo() { Status = Enums.Status.Working, StringStatus = $"Working | processing images: {index} / {Frames.Count}" }; foreach (var frame in Frames) { index++; frame.Rectangles = await _model.Predict(frame); if (index < Frames.Count) { Status = new AppStatusInfo() { Status = Enums.Status.Working, StringStatus = $"Working | processing images: {index} / {Frames.Count}" } } ; else { Status = new AppStatusInfo() { Status = Enums.Status.Ready }; } } UpdateUi(); }
private async void PredictAll() { if (Frames == null || Frames.Count < 1) { return; } Status = new AppStatusInfo() { Status = Enums.Status.Working, StringStatus = $"Working | loading model..." }; if (_model == null) { _model = new NeuroModel(); } var isLoaded = await _model.Run(); if (!isLoaded) { Status = new AppStatusInfo() { Status = Enums.Status.Error, StringStatus = $"Error: unable to load model" }; _model.Dispose(); _model = null; return; } var index = 0; Status = new AppStatusInfo() { Status = Enums.Status.Working, StringStatus = $"Working | processing images: {index} / {Frames.Count}" }; foreach (var frame in Frames) { index++; frame.Rectangles = await _model.Predict(frame); if (index < Frames.Count) { Status = new AppStatusInfo() { Status = Enums.Status.Working, StringStatus = $"Working | processing images: {index} / {Frames.Count}" } } ; if (frame.Rectangles.Count > 0) { frame.IsVisible = true; } } _frames = new List <Frame>(Frames); await _model.Stop(); SelectedIndex = 0; //Fix bug when application stopped if index > 0 UpdateUi(); Status = new AppStatusInfo() { Status = Enums.Status.Ready }; }
private async void SaveAll() { try { if (Frames == null || Frames.Count < 1) { Status = new AppStatusInfo() { Status = Enums.Status.Ready }; return; } Status = new AppStatusInfo() { Status = Enums.Status.Working }; var openDig = new OpenFolderDialog() { Title = "Choose a directory to save annotations" }; var dirName = await openDig.ShowAsync(new Window()); if (string.IsNullOrEmpty(dirName) || !Directory.Exists(dirName)) { Status = new AppStatusInfo() { Status = Enums.Status.Ready }; return; } foreach (var frame in Frames) { if (frame.Rectangles == null || frame.Rectangles.Count <= 0) { continue; } var annotation = new Annotation(); annotation.Filename = Path.GetFileNameWithoutExtension(frame.Patch); annotation.Folder = Path.GetRelativePath(dirName, Path.GetDirectoryName(frame.Patch)); annotation.Segmented = 0; frame.Load(frame.Patch); annotation.Size = new Models.Size() { Depth = 3, Height = frame.Height, Width = frame.Width }; foreach (var rectangle in frame.Rectangles) { var o = new Models.Object(); o.Name = "Pedestrian"; o.Box = new Box() { Xmax = rectangle.XBase + rectangle.WidthBase, Ymax = rectangle.YBase + rectangle.HeightBase, Xmin = rectangle.XBase, Ymin = rectangle.YBase }; annotation.Objects.Add(o); } annotation.SaveToXml(Path.Join(dirName, $"{annotation.Filename}.xml")); Status = new AppStatusInfo() { Status = Enums.Status.Ready }; } } catch (Exception ex) { Status = new AppStatusInfo() { Status = Enums.Status.Error, StringStatus = $"Error | {ex.Message.Replace('\n', ' ')}" }; } }
private async void ImportAll() { Status = new AppStatusInfo() { Status = Enums.Status.Working }; try { var openDig = new OpenFolderDialog() { Title = "Choose a directory with xml annotations" }; var dirName = await openDig.ShowAsync(new Window()); if (string.IsNullOrEmpty(dirName) || !Directory.Exists(dirName)) { Status = new AppStatusInfo() { Status = Enums.Status.Ready }; return; } var fileNames = Directory.GetFiles(dirName); _frameLoadProgressIndex = 0; Frames.Clear(); _frames.Clear(); GC.Collect(); var loadingFrames = new List <Frame>(); var annotations = new List <Annotation>(); foreach (var fileName in fileNames) { if (Path.GetExtension(fileName).ToLower() != ".xml") { continue; } annotations.Add(Annotation.ParseFromXml(fileName)); } foreach (var ann in annotations) { var fileName = Path.Combine(dirName, ann.Filename); // TODO: Проверка IsImage вне зависимости от расширений. if (!File.Exists(fileName)) { continue; } if (!Path.HasExtension(fileName)) { continue; } if (Path.GetExtension(fileName).ToLower() != ".jpg" && Path.GetExtension(fileName).ToLower() != ".jpeg" && Path.GetExtension(fileName).ToLower() != ".png" && Path.GetExtension(fileName).ToLower() != ".bmp") { continue; } var frame = new Frame(); frame.OnLoad += FrameLoadingProgressUpdate; frame.Load(fileName, Enums.ImageLoadMode.Miniature); frame.Rectangles = new List <BoundBox>(); foreach (var obj in ann.Objects) { var bbox = new BoundBox( x: obj.Box.Xmin, y: obj.Box.Ymin, height: obj.Box.Ymax - obj.Box.Ymin, width: obj.Box.Xmax - obj.Box.Xmin ); frame.Rectangles.Add(bbox); } if (frame.Rectangles.Count > 0) { frame.IsVisible = true; } loadingFrames.Add(frame); } if (loadingFrames.Count == 0) { Status = new AppStatusInfo() { Status = Enums.Status.Ready }; return; } Frames = loadingFrames; if (SelectedIndex < 0) { SelectedIndex = 0; } UpdateFramesRepo(); UpdateUi(); _frames = new List <Frame>(Frames); Status = new AppStatusInfo() { Status = Enums.Status.Ready }; } catch (Exception ex) { Status = new AppStatusInfo() { Status = Enums.Status.Error, StringStatus = $"Error | {ex.Message.Replace('\n', ' ')}" }; } }
public ApplicationStatusManager() { AppStatusInfo = new AppStatusInfo(); AppStatusInfo.ChangeCurrentStatus(Enums.Status.Ready, string.Empty); _appStatusInfoBehaviourSubject = new BehaviorSubject <AppStatusInfo>(AppStatusInfo); }
private void SaveAll() { try { if (Frames == null || Frames.Count < 1) { Status = new AppStatusInfo() { Status = Enums.Status.Ready }; return; } Status = new AppStatusInfo() { Status = Enums.Status.Working }; var dirName = Path.GetDirectoryName(Frames.First().Patch); if (string.IsNullOrEmpty(dirName) || !Directory.Exists(dirName)) { Status = new AppStatusInfo() { Status = Enums.Status.Ready }; return; } foreach (var frame in Frames) { if (frame.Rectangles == null || frame.Rectangles.Count <= 0) { continue; } var annotation = new Annotation(); annotation.Filename = Path.GetFileName(frame.Patch); annotation.Folder = Path.GetRelativePath(dirName, Path.GetDirectoryName(frame.Patch)); annotation.Segmented = 0; annotation.Size = new Models.Size() { Depth = 3, Height = frame.Height, Width = frame.Width }; foreach (var rectangle in frame.Rectangles) { var o = new Models.Object(); o.Name = "Pedestrian"; o.Box = new Box() { Xmax = rectangle.XBase + rectangle.WidthBase, Ymax = rectangle.YBase + rectangle.HeightBase, Xmin = rectangle.XBase, Ymin = rectangle.YBase }; annotation.Objects.Add(o); } annotation.SaveToXml(Path.Join(dirName, $"{annotation.Filename}.xml")); } Console.WriteLine($"Saved to {dirName}"); Status = new AppStatusInfo() { Status = Enums.Status.Ready, StringStatus = $"Success | saved to {dirName}" }; } catch (Exception ex) { Status = new AppStatusInfo() { Status = Enums.Status.Error, StringStatus = $"Error | {ex.Message.Replace('\n', ' ')}" }; } }
private void UpdateStatus(AppStatusInfo status) { StatusColor = status.GetColor(); StringStatus = status.StringStatus; }