Exemplo n.º 1
0
        /// <summary>
        /// Создания потоков и запуск генерации изображений
        /// </summary>
        /// <param name="list">Коллекция Canvas</param>
        /// <param name="scenario">Сценарий для генерации изображений</param>
        /// <param name="progressViewModel">Загрузка (ViewModel)</param>
        public void CreateThreads(List <Canvas> list, SettingsScenario scenario, ProgressViewModel progressViewModel)
        {
            progressViewModel.FinishTotalNumbers = scenario.countDigits.Sum();
            progressViewModel.TotalNumber        = 0;

            for (int i = 0; i < list.Count; i++)
            {
                var canvas         = XamlWriter.Save(list[i]);
                var canvasChildren = new List <string>();
                foreach (var child in list[i].Children)
                {
                    canvasChildren.Add(XamlWriter.Save(child));
                }

                var    count  = scenario.countDigits[i];
                Thread thread = new Thread(() => CreateMnistData(canvas, canvasChildren, count, scenario, progressViewModel));
                thread.SetApartmentState(ApartmentState.STA);
                thread.Start();
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Сохранение сценария
        /// </summary>
        /// <param name="scenario">Объект типа SettingsScenario</param>
        public void SaveScenario(SettingsScenario scenario)
        {
            var saveDialog = new SaveFileDialog
            {
                Filter           = "JSON data|* .json",
                InitialDirectory = Application.StartupPath + "\\temp\\scenario"
            };

            if (saveDialog.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            JsonSerializer serializer = new JsonSerializer();

            using (StreamWriter sw = new StreamWriter(saveDialog.FileName))
            {
                using (JsonWriter writer = new JsonTextWriter(sw))
                {
                    serializer.Serialize(writer, scenario);
                }
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Метод создания копий цифр с искажениями из стокового Canvas
        /// </summary>
        /// <param name="canvas">Стоковый Canvas</param>
        /// <param name="canvasChildren">Дочерние элементы передаваемого Canvas</param>
        /// <param name="count">Кол-во копий с преобразованиями</param>
        /// <param name="scenario">Сценарий генерации</param>
        /// <param name="progressViewModel">Загрузка (для изменения на view progressbar)</param>
        private void CreateMnistData(string canvas, List <string> canvasChildren, int count, SettingsScenario scenario, ProgressViewModel progressViewModel)
        {
            for (int k = 0; k < count; k++)
            {
                // делаем копию канваса из вьюхи, чтобы не затронуть шаблонный для последующий копий
                Canvas root = (UIElement)XamlReader.Parse(canvas) as Canvas;
                // преобразуем дочерние элементы canvas из string в UIElement, и добавляем в root
                canvasChildren.ForEach(x => root.Children.Add(XamlReader.Parse(x) as UIElement));

                var parametrs = new NumProperties
                {
                    Rotate = random.Next(scenario.RotateMin, scenario.RotateMax),
                    ShiftX = random.Next(scenario.ShiftMinX, scenario.ShiftMaxX),
                    ShiftY = random.Next(scenario.ShiftMinY, scenario.ShiftMaxY),
                    SkewX  = random.Next(scenario.SkewMinX, scenario.SkewMaxX),
                    SkewY  = random.Next(scenario.SkewMinY, scenario.SkewMaxY),
                    ScaleX = GetRandomNumber(scenario.ScaleMinX, scenario.ScaleMaxX),
                    ScaleY = GetRandomNumber(scenario.ScaleMinY, scenario.ScaleMaxY),
                };

                var img = GetBitmapNumber(
                    canvas: root,
                    canvasWidth: (int)root.Width,
                    canvasHeight: (int)root.Height,
                    sizeImg: SIZE,
                    rotate: parametrs.Rotate,
                    scaleX: parametrs.ScaleX,
                    scaleY: parametrs.ScaleY,
                    shiftX: parametrs.ShiftX,
                    shiftY: parametrs.ShiftY,
                    skewX: parametrs.SkewX,
                    skewY: parametrs.SkewY
                    );

                var nameNumber = ""; //string.Concat(root.Name.Last().ToString(), "-", Guid.NewGuid());
                var number     = root.Name.Last().ToString();
                var line       = st.ConvertToCsv(img, number, SIZE);

                var model = new Number
                {
                    Num           = number,
                    Value         = line,
                    NumProperties = parametrs
                };

                lock (threadLock)
                {
                    SingletonContext.Context.Numbers.Add(model);
                    SingletonContext.Context.SaveChanges();
                    nameNumber = model.Id.ToString();

                    st.SaveToCsvFile(strFilePath, line);

                    progressViewModel.TotalNumber++;
                }

                st.SaveImage(img, nameNumber, path);
            }
        }