Beispiel #1
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);
            }
        }