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', ' ')}"
                };
            }
        }
Beispiel #4
0
        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
            };
        }
Beispiel #10
0
        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
         };
     }
 }
Beispiel #12
0
        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', ' ')}"
                };
            }
        }
Beispiel #13
0
        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();
        }
Beispiel #15
0
        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', ' ')}"
                };
            }
        }
Beispiel #17
0
        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);
 }
Beispiel #19
0
        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', ' ')}"
                };
            }
        }
Beispiel #20
0
 private void UpdateStatus(AppStatusInfo status)
 {
     StatusColor  = status.GetColor();
     StringStatus = status.StringStatus;
 }